diff --git a/toolchain/check/deduce.cpp b/toolchain/check/deduce.cpp index 880da32774df..4b5a3c1c2899 100644 --- a/toolchain/check/deduce.cpp +++ b/toolchain/check/deduce.cpp @@ -13,6 +13,7 @@ #include "toolchain/diagnostics/diagnostic.h" #include "toolchain/sem_ir/ids.h" #include "toolchain/sem_ir/impl.h" +#include "toolchain/sem_ir/type.h" #include "toolchain/sem_ir/typed_insts.h" namespace Carbon::Check { @@ -298,6 +299,10 @@ auto DeductionContext::Deduce() -> bool { // and the parameter doesn't have a symbolic constant value. auto param_type_id = context().insts().Get(param_id).type_id(); + if (context().types().Is(param_type_id)) { + param_type_id = + SemIR::ExtractScrutineeType(context().sem_ir(), param_type_id); + } // If the parameter has a symbolic type, deduce against that. if (param_type_id.is_symbolic()) { Add(context().types().GetInstId(param_type_id), @@ -598,8 +603,9 @@ auto DeductionContext::MakeSpecific() -> SemIR::SpecificId { auto DeduceGenericCallArguments( Context& context, SemIR::LocId loc_id, SemIR::GenericId generic_id, SemIR::SpecificId enclosing_specific_id, SemIR::InstId self_type_id, - [[maybe_unused]] SemIR::InstBlockId implicit_params_id, - SemIR::InstBlockId params_id, [[maybe_unused]] SemIR::InstId self_id, + [[maybe_unused]] SemIR::InstBlockId implicit_param_patterns_id, + SemIR::InstBlockId param_patterns_id, + [[maybe_unused]] SemIR::InstId self_id, llvm::ArrayRef arg_ids) -> SemIR::SpecificId { DeductionContext deduction(&context, loc_id, generic_id, enclosing_specific_id, self_type_id, @@ -608,7 +614,7 @@ auto DeduceGenericCallArguments( // Prepare to perform deduction of the explicit parameters against their // arguments. // TODO: Also perform deduction for type of self. - deduction.AddAll(params_id, arg_ids, /*needs_substitution=*/true); + deduction.AddAll(param_patterns_id, arg_ids, /*needs_substitution=*/true); if (!deduction.Deduce() || !deduction.CheckDeductionIsComplete()) { return SemIR::SpecificId::None; diff --git a/toolchain/check/deduce.h b/toolchain/check/deduce.h index 6053be04f906..2fab6189002e 100644 --- a/toolchain/check/deduce.h +++ b/toolchain/check/deduce.h @@ -14,9 +14,9 @@ namespace Carbon::Check { auto DeduceGenericCallArguments( Context& context, SemIR::LocId loc_id, SemIR::GenericId generic_id, SemIR::SpecificId enclosing_specific_id, SemIR::InstId self_type_id, - SemIR::InstBlockId implicit_params_id, SemIR::InstBlockId params_id, - SemIR::InstId self_id, llvm::ArrayRef arg_ids) - -> SemIR::SpecificId; + SemIR::InstBlockId implicit_param_patterns_id, + SemIR::InstBlockId param_patterns_id, SemIR::InstId self_id, + llvm::ArrayRef arg_ids) -> SemIR::SpecificId; // Data from the `Impl` that is used by deduce. // diff --git a/toolchain/check/handle_binding_pattern.cpp b/toolchain/check/handle_binding_pattern.cpp index ec4088ed565b..f3e0dcbbdeb8 100644 --- a/toolchain/check/handle_binding_pattern.cpp +++ b/toolchain/check/handle_binding_pattern.cpp @@ -75,15 +75,16 @@ static auto HandleAnyBindingPattern(Context& context, Parse::NodeId node_id, .value_id = SemIR::InstId::None}); } + auto pattern_type_id = GetPatternType(context, cast_type_id); auto binding_pattern_id = SemIR::InstId::None; if (is_generic) { binding_pattern_id = AddPatternInst( context, name_node, - {.type_id = cast_type_id, .entity_name_id = entity_name_id}); + {.type_id = pattern_type_id, .entity_name_id = entity_name_id}); } else { binding_pattern_id = AddPatternInst( context, name_node, - {.type_id = cast_type_id, .entity_name_id = entity_name_id}); + {.type_id = pattern_type_id, .entity_name_id = entity_name_id}); } if (is_generic) { @@ -121,7 +122,18 @@ static auto HandleAnyBindingPattern(Context& context, Parse::NodeId node_id, // true binding, so we handle it separately. if (auto parent_interface_decl = context.scope_stack().GetCurrentScopeAs(); - parent_interface_decl.has_value() && is_generic) { + parent_interface_decl.has_value()) { + // TODO: diagnose this during parsing, to avoid near-duplicate error + // messages. + if (!is_generic) { + CARBON_DIAGNOSTIC(ExpectedSymbolicBindingInAssociatedConstant, Error, + "found runtime binding pattern in associated constant " + "declaration; expected a `:!` binding"); + context.emitter().Emit(node_id, + ExpectedSymbolicBindingInAssociatedConstant); + context.node_stack().Push(node_id, SemIR::ErrorInst::InstId); + return true; + } if (name_id == SemIR::NameId::Underscore) { // The action item here may be to document this as not allowed, and // add a proper diagnostic. @@ -375,12 +387,15 @@ auto HandleParseNode(Context& context, Parse::FieldNameAndTypeId node_id) auto HandleParseNode(Context& context, Parse::AddrId node_id) -> bool { auto param_pattern_id = context.node_stack().PopPattern(); if (SemIR::IsSelfPattern(context.sem_ir(), param_pattern_id)) { - auto pointer_type = context.types().TryGetAs( - context.insts().Get(param_pattern_id).type_id()); + auto param_type_id = ExtractScrutineeType( + context.sem_ir(), context.insts().Get(param_pattern_id).type_id()); + auto pointer_type = + context.types().TryGetAs(param_type_id); if (pointer_type) { auto addr_pattern_id = AddPatternInst( context, node_id, - {.type_id = SemIR::AutoType::TypeId, .inner_id = param_pattern_id}); + {.type_id = GetPatternType(context, SemIR::AutoType::TypeId), + .inner_id = param_pattern_id}); context.node_stack().Push(node_id, addr_pattern_id); } else { CARBON_DIAGNOSTIC( diff --git a/toolchain/check/handle_function.cpp b/toolchain/check/handle_function.cpp index 18914e83483b..a3b934e3b958 100644 --- a/toolchain/check/handle_function.cpp +++ b/toolchain/check/handle_function.cpp @@ -72,12 +72,13 @@ auto HandleParseNode(Context& context, Parse::ReturnTypeId node_id) -> bool { FullPatternStack::Kind::ExplicitParamList); } + auto pattern_type_id = GetPatternType(context, as_type.type_id); auto return_slot_pattern_id = AddPatternInst( context, node_id, - {.type_id = as_type.type_id, .type_inst_id = as_type.inst_id}); + {.type_id = pattern_type_id, .type_inst_id = as_type.inst_id}); auto param_pattern_id = AddPatternInst( context, node_id, - {.type_id = as_type.type_id, + {.type_id = pattern_type_id, .subpattern_id = return_slot_pattern_id, .index = SemIR::CallParamIndex::None}); context.node_stack().Push(node_id, param_pattern_id); diff --git a/toolchain/check/handle_let_and_var.cpp b/toolchain/check/handle_let_and_var.cpp index fe55818e1724..c45d74380dfc 100644 --- a/toolchain/check/handle_let_and_var.cpp +++ b/toolchain/check/handle_let_and_var.cpp @@ -25,6 +25,7 @@ #include "toolchain/sem_ir/inst.h" #include "toolchain/sem_ir/name_scope.h" #include "toolchain/sem_ir/pattern.h" +#include "toolchain/sem_ir/type.h" #include "toolchain/sem_ir/typed_insts.h" namespace Carbon::Check { @@ -132,7 +133,8 @@ static auto GetOrAddStorage(Context& context, SemIR::InstId var_pattern_id) return AddInstWithCleanup( context, pattern.loc_id, SemIR::VarStorage{ - .type_id = pattern.inst.type_id(), + .type_id = + ExtractScrutineeType(context.sem_ir(), pattern.inst.type_id()), .pretty_name_id = SemIR::GetPrettyNameFromPatternId( context.sem_ir(), pattern.inst.As().subpattern_id)}); @@ -293,16 +295,7 @@ static auto HandleDecl(Context& context) -> DeclInfo { static auto FinishAssociatedConstant(Context& context, Parse::LetDeclId node_id, SemIR::InterfaceId interface_id, DeclInfo& decl_info) -> void { - auto decl = context.insts().TryGetAs( - decl_info.pattern_id); - if (!decl) { - if (decl_info.pattern_id != SemIR::ErrorInst::InstId) { - CARBON_DIAGNOSTIC(ExpectedSymbolicBindingInAssociatedConstant, Error, - "pattern in associated constant declaration must be a " - "single `:!` binding"); - context.emitter().Emit(context.insts().GetLocId(decl_info.pattern_id), - ExpectedSymbolicBindingInAssociatedConstant); - } + if (decl_info.pattern_id == SemIR::ErrorInst::InstId) { context.name_scopes() .Get(context.interfaces().Get(interface_id).scope_id) .set_has_error(); @@ -312,6 +305,8 @@ static auto FinishAssociatedConstant(Context& context, Parse::LetDeclId node_id, context.inst_block_stack().Pop(); return; } + auto decl = context.insts().GetAs( + decl_info.pattern_id); if (decl_info.introducer.modifier_set.HasAnyOf( KeywordModifierSet::Interface)) { @@ -322,10 +317,9 @@ static auto FinishAssociatedConstant(Context& context, Parse::LetDeclId node_id, // If there was an initializer, convert it and store it on the constant. if (decl_info.init_id.has_value()) { // TODO: Diagnose if the `default` modifier was not used. - auto default_value_id = ConvertToValueOfType( - context, node_id, decl_info.init_id, decl->type_id); - auto& assoc_const = - context.associated_constants().Get(decl->assoc_const_id); + auto default_value_id = + ConvertToValueOfType(context, node_id, decl_info.init_id, decl.type_id); + auto& assoc_const = context.associated_constants().Get(decl.assoc_const_id); assoc_const.default_value_id = default_value_id; FinishGenericDefinition(context, assoc_const.generic_id); } else { @@ -334,8 +328,8 @@ static auto FinishAssociatedConstant(Context& context, Parse::LetDeclId node_id, } // Store the decl block on the declaration. - decl->decl_block_id = context.inst_block_stack().Pop(); - ReplaceInstPreservingConstantValue(context, decl_info.pattern_id, *decl); + decl.decl_block_id = context.inst_block_stack().Pop(); + ReplaceInstPreservingConstantValue(context, decl_info.pattern_id, decl); context.inst_block_stack().AddInstId(decl_info.pattern_id); } diff --git a/toolchain/check/handle_pattern_list.cpp b/toolchain/check/handle_pattern_list.cpp index e42ab296a3c2..c595c8e8c939 100644 --- a/toolchain/check/handle_pattern_list.cpp +++ b/toolchain/check/handle_pattern_list.cpp @@ -74,14 +74,24 @@ auto HandleParseNode(Context& context, Parse::TuplePatternId node_id) -> bool { context.node_stack() .PopAndDiscardSoloNodeId(); + if (context.scope_stack().GetCurrentScopeAs()) { + CARBON_DIAGNOSTIC(ExpectedSingleBindingInAssociatedConstant, Error, + "found tuple pattern in associated constant declaration; " + "expected symbolic binding pattern"); + context.emitter().Emit(node_id, ExpectedSingleBindingInAssociatedConstant); + context.node_stack().Push(node_id, SemIR::ErrorInst::InstId); + EndSubpatternAsNonExpr(context); + return true; + } const auto& inst_block = context.inst_blocks().Get(refs_id); llvm::SmallVector type_inst_ids; type_inst_ids.reserve(inst_block.size()); for (auto inst : inst_block) { - type_inst_ids.push_back( - context.types().GetInstId(context.insts().Get(inst).type_id())); + auto type_id = ExtractScrutineeType(context.sem_ir(), + context.insts().Get(inst).type_id()); + type_inst_ids.push_back(context.types().GetInstId(type_id)); } - auto type_id = GetTupleType(context, type_inst_ids); + auto type_id = GetPatternType(context, GetTupleType(context, type_inst_ids)); context.node_stack().Push( node_id, AddPatternInst( diff --git a/toolchain/check/import_cpp.cpp b/toolchain/check/import_cpp.cpp index 5f10085ae447..ac53968d9d14 100644 --- a/toolchain/check/import_cpp.cpp +++ b/toolchain/check/import_cpp.cpp @@ -337,7 +337,8 @@ static auto MakeParamPatternsBlockId(Context& context, SemIR::LocId loc_id, params.reserve(clang_decl.parameters().size()); for (const clang::ParmVarDecl* param : clang_decl.parameters()) { clang::QualType param_type = param->getType().getCanonicalType(); - SemIR::TypeId type_id = MapType(context, param_type).type_id; + SemIR::TypeId type_id = + GetPatternType(context, MapType(context, param_type).type_id); if (type_id == SemIR::ErrorInst::TypeId) { context.TODO(loc_id, llvm::formatv("Unsupported: parameter type: {0}", param_type.getAsString())); @@ -386,14 +387,16 @@ static auto GetReturnType(Context& context, SemIR::LocId loc_id, ret_type.getAsString())); return SemIR::ErrorInst::InstId; } + auto pattern_type_id = GetPatternType(context, type_id); SemIR::InstId return_slot_pattern_id = AddInstInNoBlock( // TODO: Fill in a location for the return type once available. - context, SemIR::LocIdAndInst::NoLoc(SemIR::ReturnSlotPattern( - {.type_id = type_id, .type_inst_id = type_inst_id}))); + context, + SemIR::LocIdAndInst::NoLoc(SemIR::ReturnSlotPattern( + {.type_id = pattern_type_id, .type_inst_id = type_inst_id}))); SemIR::InstId param_pattern_id = AddInstInNoBlock( // TODO: Fill in a location for the return type once available. context, SemIR::LocIdAndInst::NoLoc(SemIR::OutParamPattern( - {.type_id = type_id, + {.type_id = pattern_type_id, .subpattern_id = return_slot_pattern_id, .index = SemIR::CallParamIndex::None}))); return param_pattern_id; diff --git a/toolchain/check/import_ref.cpp b/toolchain/check/import_ref.cpp index 0bba599bae0b..c089bad6bb8e 100644 --- a/toolchain/check/import_ref.cpp +++ b/toolchain/check/import_ref.cpp @@ -2675,6 +2675,20 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, return {.const_id = namespace_const_id}; } +static auto TryResolveTypedInst(ImportRefResolver& resolver, + SemIR::PatternType inst) -> ResolveResult { + CARBON_CHECK(inst.type_id == SemIR::TypeType::TypeId); + auto scrutinee_type_inst_id = + GetLocalTypeInstId(resolver, inst.scrutinee_type_inst_id); + if (resolver.HasNewWork()) { + return ResolveResult::Retry(); + } + + return ResolveAs( + resolver, {.type_id = SemIR::TypeType::TypeId, + .scrutinee_type_inst_id = scrutinee_type_inst_id}); +} + static auto TryResolveTypedInst(ImportRefResolver& resolver, SemIR::PointerType inst) -> ResolveResult { CARBON_CHECK(inst.type_id == SemIR::TypeType::TypeId); @@ -2971,6 +2985,9 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, case CARBON_KIND(SemIR::Namespace inst): { return TryResolveTypedInst(resolver, inst, inst_id); } + case CARBON_KIND(SemIR::PatternType inst): { + return TryResolveTypedInst(resolver, inst); + } case CARBON_KIND(SemIR::PointerType inst): { return TryResolveTypedInst(resolver, inst); } diff --git a/toolchain/check/inst.cpp b/toolchain/check/inst.cpp index e9f2fc6ac349..2a1fb4ae4bab 100644 --- a/toolchain/check/inst.cpp +++ b/toolchain/check/inst.cpp @@ -94,6 +94,9 @@ auto AddDependentActionInst(Context& context, auto AddPatternInst(Context& context, SemIR::LocIdAndInst loc_id_and_inst) -> SemIR::InstId { + auto type_id = loc_id_and_inst.inst.type_id(); + CARBON_CHECK(type_id == SemIR::ErrorInst::TypeId || + context.types().Is(type_id)); auto inst_id = AddInstInNoBlock(context, loc_id_and_inst); context.pattern_block_stack().AddInstId(inst_id); return inst_id; diff --git a/toolchain/check/pattern_match.cpp b/toolchain/check/pattern_match.cpp index 8da0ea9db6fc..5382a6eece39 100644 --- a/toolchain/check/pattern_match.cpp +++ b/toolchain/check/pattern_match.cpp @@ -225,7 +225,7 @@ auto MatchContext::DoEmitPatternMatch(Context& context, entry.scrutinee_id, {.kind = bind_name_id.has_value() ? ConversionTarget::ValueOrRef : ConversionTarget::Discarded, - .type_id = binding_pattern.type_id}); + .type_id = context.insts().Get(bind_name_id).type_id()}); } else { // In a function call, conversion is handled while matching the enclosing // `*ParamPattern`. @@ -298,8 +298,10 @@ auto MatchContext::DoEmitPatternMatch(Context& context, results_.push_back(ConvertToValueOfType( context, context.insts().GetLocId(entry.scrutinee_id), entry.scrutinee_id, - SemIR::GetTypeOfInstInSpecific( - context.sem_ir(), callee_specific_id_, pattern_inst_id))); + ExtractScrutineeType( + context.sem_ir(), + SemIR::GetTypeOfInstInSpecific( + context.sem_ir(), callee_specific_id_, pattern_inst_id)))); } // Do not traverse farther, because the caller side of the pattern // ends here. @@ -311,7 +313,8 @@ auto MatchContext::DoEmitPatternMatch(Context& context, ReplaceInstBeforeConstantUse(context, entry.pattern_id, param_pattern); auto param_id = AddInst( context, context.insts().GetLocId(pattern_inst_id), - {.type_id = param_pattern.type_id, + {.type_id = + ExtractScrutineeType(context.sem_ir(), param_pattern.type_id), .index = param_pattern.index, .pretty_name_id = SemIR::GetPrettyNameFromPatternId( context.sem_ir(), entry.pattern_id)}); @@ -352,7 +355,8 @@ auto MatchContext::DoEmitPatternMatch(Context& context, ReplaceInstBeforeConstantUse(context, entry.pattern_id, param_pattern); auto param_id = AddInst( context, context.insts().GetLocId(pattern_inst_id), - {.type_id = param_pattern.type_id, + {.type_id = + ExtractScrutineeType(context.sem_ir(), param_pattern.type_id), .index = param_pattern.index, .pretty_name_id = SemIR::GetPrettyNameFromPatternId( context.sem_ir(), entry.pattern_id)}); @@ -378,9 +382,12 @@ auto MatchContext::DoEmitPatternMatch(Context& context, "Parameters out of order; expecting {0} but got {1}", results_.size(), param_pattern.index.index); CARBON_CHECK(entry.scrutinee_id.has_value()); - CARBON_CHECK(context.insts().Get(entry.scrutinee_id).type_id() == - SemIR::GetTypeOfInstInSpecific( - context.sem_ir(), callee_specific_id_, pattern_inst_id)); + CARBON_CHECK( + context.insts().Get(entry.scrutinee_id).type_id() == + ExtractScrutineeType( + context.sem_ir(), + SemIR::GetTypeOfInstInSpecific( + context.sem_ir(), callee_specific_id_, pattern_inst_id))); results_.push_back(entry.scrutinee_id); // Do not traverse farther, because the caller side of the pattern // ends here. @@ -394,7 +401,8 @@ auto MatchContext::DoEmitPatternMatch(Context& context, ReplaceInstBeforeConstantUse(context, entry.pattern_id, param_pattern); auto param_id = AddInst( context, context.insts().GetLocId(pattern_inst_id), - {.type_id = param_pattern.type_id, + {.type_id = + ExtractScrutineeType(context.sem_ir(), param_pattern.type_id), .index = param_pattern.index, .pretty_name_id = SemIR::GetPrettyNameFromPatternId( context.sem_ir(), entry.pattern_id)}); @@ -413,10 +421,12 @@ auto MatchContext::DoEmitPatternMatch( Context& context, SemIR::ReturnSlotPattern return_slot_pattern, SemIR::InstId pattern_inst_id, WorkItem entry) -> void { CARBON_CHECK(kind_ == MatchKind::Callee); + auto type_id = + ExtractScrutineeType(context.sem_ir(), return_slot_pattern.type_id); auto return_slot_id = AddInst( context, context.insts().GetLocId(pattern_inst_id), - {.type_id = return_slot_pattern.type_id, - .type_inst_id = return_slot_pattern.type_inst_id, + {.type_id = type_id, + .type_inst_id = context.types().GetInstId(type_id), .storage_id = entry.scrutinee_id}); bool already_in_lookup = context.scope_stack() @@ -450,7 +460,8 @@ auto MatchContext::DoEmitPatternMatch(Context& context, case MatchKind::Caller: { storage_id = AddInstWithCleanup( context, context.insts().GetLocId(pattern_inst_id), - {.type_id = var_pattern.type_id}); + {.type_id = + ExtractScrutineeType(context.sem_ir(), var_pattern.type_id)}); CARBON_CHECK(entry.scrutinee_id.has_value()); break; } @@ -516,9 +527,11 @@ auto MatchContext::DoEmitPatternMatch(Context& context, return; } + auto tuple_type_id = + ExtractScrutineeType(context.sem_ir(), tuple_pattern.type_id); auto converted_scrutinee = ConvertToValueOrRefOfType( context, context.insts().GetLocId(pattern_inst_id), entry.scrutinee_id, - tuple_pattern.type_id); + tuple_type_id); if (auto scrutinee_value = context.insts().TryGetAs(converted_scrutinee)) { add_all_subscrutinees( @@ -526,8 +539,7 @@ auto MatchContext::DoEmitPatternMatch(Context& context, return; } - auto tuple_type = - context.types().GetAs(tuple_pattern.type_id); + auto tuple_type = context.types().GetAs(tuple_type_id); auto element_type_inst_ids = context.inst_blocks().Get(tuple_type.type_elements_id); llvm::SmallVector subscrutinee_ids; diff --git a/toolchain/check/testdata/alias/fail_bool_value.carbon b/toolchain/check/testdata/alias/fail_bool_value.carbon index 474179182f77..0027782ff5e2 100644 --- a/toolchain/check/testdata/alias/fail_bool_value.carbon +++ b/toolchain/check/testdata/alias/fail_bool_value.carbon @@ -21,6 +21,7 @@ let a_test: bool = a; // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -41,7 +42,7 @@ let a_test: bool = a; // CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false] // CHECK:STDOUT: %a: = bind_alias a, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_test.patt: bool = binding_pattern a_test +// CHECK:STDOUT: %a_test.patt: %pattern_type.831 = binding_pattern a_test // CHECK:STDOUT: } // CHECK:STDOUT: %.loc16_13.1: type = splice_block %.loc16_13.3 [concrete = bool] { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] diff --git a/toolchain/check/testdata/alias/fail_control_flow.carbon b/toolchain/check/testdata/alias/fail_control_flow.carbon index 37859b7aee44..c0f30cf5cd37 100644 --- a/toolchain/check/testdata/alias/fail_control_flow.carbon +++ b/toolchain/check/testdata/alias/fail_control_flow.carbon @@ -49,7 +49,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %B.7dd: bool = bind_symbolic_name B, 0 [symbolic] -// CHECK:STDOUT: %B.patt: bool = symbolic_binding_pattern B, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %B.patt: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%B.7dd) [symbolic] @@ -62,9 +63,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: file {} // CHECK:STDOUT: -// CHECK:STDOUT: generic class @C(.inst27.loc4_14: bool) { +// CHECK:STDOUT: generic class @C(.inst28.loc4_14: bool) { // CHECK:STDOUT: %B: bool = bind_symbolic_name B, 0 [symbolic = %B (constants.%B.7dd)] -// CHECK:STDOUT: %B.patt.loc4_14.2: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_14.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc4_14.2: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_14.2 (constants.%B.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -79,7 +80,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %C.ref: %C.type = name_ref C, .inst32.loc4_24 [concrete = constants.%C.generic] +// CHECK:STDOUT: %C.ref: %C.type = name_ref C, .inst34.loc4_24 [concrete = constants.%C.generic] // CHECK:STDOUT: %true.loc12_20: bool = bool_literal true [concrete = constants.%true] // CHECK:STDOUT: %.loc12: bool = not %true.loc12_20 [concrete = constants.%false] // CHECK:STDOUT: %true.loc12_25: bool = bool_literal true [concrete = constants.%true] diff --git a/toolchain/check/testdata/alias/min_prelude/local.carbon b/toolchain/check/testdata/alias/min_prelude/local.carbon index 00e148f938ac..c8390816f0a3 100644 --- a/toolchain/check/testdata/alias/min_prelude/local.carbon +++ b/toolchain/check/testdata/alias/min_prelude/local.carbon @@ -25,6 +25,7 @@ fn F() -> () { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -43,8 +44,8 @@ fn F() -> () { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_12.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc4_12.2: type = converted %.loc4_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -56,8 +57,8 @@ fn F() -> () { // CHECK:STDOUT: fn @F() -> %empty_tuple.type { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc5_3.1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc5_3.1: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc5_16.1: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/alias/no_prelude/alias_of_alias.carbon b/toolchain/check/testdata/alias/no_prelude/alias_of_alias.carbon index 8a68dab6db81..e667c0465b5c 100644 --- a/toolchain/check/testdata/alias/no_prelude/alias_of_alias.carbon +++ b/toolchain/check/testdata/alias/no_prelude/alias_of_alias.carbon @@ -20,6 +20,7 @@ let d: c = {}; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -39,7 +40,7 @@ let d: c = {}; // CHECK:STDOUT: %b.ref: type = name_ref b, %b [concrete = constants.%C] // CHECK:STDOUT: %c: type = bind_alias c, %b [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %C = binding_pattern d +// CHECK:STDOUT: %d.patt: %pattern_type = binding_pattern d // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: type = name_ref c, %c [concrete = constants.%C] // CHECK:STDOUT: %.loc15_13.1: ref %C = temporary_storage diff --git a/toolchain/check/testdata/alias/no_prelude/export_name.carbon b/toolchain/check/testdata/alias/no_prelude/export_name.carbon index 1b6a008ade12..2960a48ad81b 100644 --- a/toolchain/check/testdata/alias/no_prelude/export_name.carbon +++ b/toolchain/check/testdata/alias/no_prelude/export_name.carbon @@ -164,6 +164,7 @@ var d: D* = &c; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -180,8 +181,8 @@ var d: D* = &c; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %C = binding_pattern d -// CHECK:STDOUT: %.loc6: %C = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type = binding_pattern d +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %C = var d // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] @@ -243,8 +244,10 @@ var d: D* = &c; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -263,15 +266,15 @@ var d: D* = &c; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %ptr.019 = binding_pattern d -// CHECK:STDOUT: %.loc8_1: %ptr.019 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.44a = binding_pattern d +// CHECK:STDOUT: %.loc8_1: %pattern_type.44a = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %ptr.019 = var d // CHECK:STDOUT: %.loc8_9: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/alias/no_prelude/fail_aliased_name_in_diag.carbon b/toolchain/check/testdata/alias/no_prelude/fail_aliased_name_in_diag.carbon index fbe9c06f3a17..aebed9ab6362 100644 --- a/toolchain/check/testdata/alias/no_prelude/fail_aliased_name_in_diag.carbon +++ b/toolchain/check/testdata/alias/no_prelude/fail_aliased_name_in_diag.carbon @@ -27,7 +27,9 @@ let c_var: c = d; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %D.val: %D = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -43,14 +45,14 @@ let c_var: c = d; // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: type = bind_alias c, %C.decl [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d -// CHECK:STDOUT: %.loc15: %D = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.510 = binding_pattern d +// CHECK:STDOUT: %.loc15: %pattern_type.510 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %D = var d // CHECK:STDOUT: %D.ref: type = name_ref D, %D.decl [concrete = constants.%D] // CHECK:STDOUT: %d: ref %D = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_var.patt: %C = binding_pattern c_var +// CHECK:STDOUT: %c_var.patt: %pattern_type.c48 = binding_pattern c_var // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: type = name_ref c, %c [concrete = constants.%C] // CHECK:STDOUT: %.loc21: %C = converted @__global_init.%d.ref, [concrete = ] diff --git a/toolchain/check/testdata/alias/no_prelude/fail_local_in_namespace.carbon b/toolchain/check/testdata/alias/no_prelude/fail_local_in_namespace.carbon index 3cb22cdb38f9..25dd11cfae63 100644 --- a/toolchain/check/testdata/alias/no_prelude/fail_local_in_namespace.carbon +++ b/toolchain/check/testdata/alias/no_prelude/fail_local_in_namespace.carbon @@ -31,6 +31,7 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -44,8 +45,8 @@ fn F() -> {} { // CHECK:STDOUT: .a = // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_12.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc13_12.2: type = converted %.loc13_12.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/alias/no_prelude/fail_name_conflict.carbon b/toolchain/check/testdata/alias/no_prelude/fail_name_conflict.carbon index 80bd2ddfa08d..ae280e182cdf 100644 --- a/toolchain/check/testdata/alias/no_prelude/fail_name_conflict.carbon +++ b/toolchain/check/testdata/alias/no_prelude/fail_name_conflict.carbon @@ -36,6 +36,7 @@ alias b = C; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -49,15 +50,15 @@ alias b = C; // CHECK:STDOUT: %C.ref.loc13: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc13: type = bind_alias a, %C.decl [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %.loc21: %C = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc21: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C = var a // CHECK:STDOUT: %C.ref.loc21: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc21: ref %C = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %.loc23: %C = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc23: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %C = var b // CHECK:STDOUT: %C.ref.loc23: type = name_ref C, %C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/alias/no_prelude/fail_not_constant.carbon b/toolchain/check/testdata/alias/no_prelude/fail_not_constant.carbon index 4e09914f37bf..502fe546427c 100644 --- a/toolchain/check/testdata/alias/no_prelude/fail_not_constant.carbon +++ b/toolchain/check/testdata/alias/no_prelude/fail_not_constant.carbon @@ -21,8 +21,10 @@ alias c = *b; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type.d64: type = pattern_type %ptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -32,8 +34,8 @@ alias c = *b; // CHECK:STDOUT: .c = %c // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc11_9.1: type = splice_block %.loc11_9.3 [concrete = constants.%empty_tuple.type] { @@ -42,8 +44,8 @@ alias c = *b; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %ptr = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %ptr = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.d64 = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.d64 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %ptr = var b // CHECK:STDOUT: %.loc12_10.1: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/alias/no_prelude/import.carbon b/toolchain/check/testdata/alias/no_prelude/import.carbon index 98457af8f656..ab7eb20a5728 100644 --- a/toolchain/check/testdata/alias/no_prelude/import.carbon +++ b/toolchain/check/testdata/alias/no_prelude/import.carbon @@ -74,6 +74,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -86,8 +87,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c_alias: type = bind_alias c_alias, %C.decl [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %ptr = binding_pattern a -// CHECK:STDOUT: %.loc8_1: %ptr = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc8_1: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr = var a // CHECK:STDOUT: %.loc8_9: type = splice_block %ptr [concrete = constants.%ptr] { @@ -113,6 +114,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -135,8 +137,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %c_alias.ref.loc6: type = name_ref c_alias, imports.%Main.c_alias [concrete = constants.%C] // CHECK:STDOUT: %c_alias_alias: type = bind_alias c_alias_alias, imports.%Main.c_alias [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %ptr = binding_pattern b -// CHECK:STDOUT: %.loc8_1: %ptr = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc8_1: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %ptr = var b // CHECK:STDOUT: %.loc8_15: type = splice_block %ptr [concrete = constants.%ptr] { @@ -160,6 +162,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -177,8 +180,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %ptr = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %ptr = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %ptr = var c // CHECK:STDOUT: %.loc6_21: type = splice_block %ptr [concrete = constants.%ptr] { @@ -199,6 +202,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -208,8 +212,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: .a_alias = %a_alias // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -234,6 +238,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -253,8 +258,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %a_alias.ref: ref %empty_tuple.type = name_ref a_alias, imports.%Main.a_alias // CHECK:STDOUT: %a_alias_alias: ref %empty_tuple.type = bind_alias a_alias_alias, imports.%Main.a_alias // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b -// CHECK:STDOUT: %.loc8_1: %empty_tuple.type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc8_1: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var b // CHECK:STDOUT: %.loc8_9.1: type = splice_block %.loc8_9.3 [concrete = constants.%empty_tuple.type] { @@ -277,6 +282,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -293,8 +299,8 @@ var c: () = a_alias_alias; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %empty_tuple.type = binding_pattern c -// CHECK:STDOUT: %.loc11_1: %empty_tuple.type = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc11_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %empty_tuple.type = var c // CHECK:STDOUT: %.loc11_9.1: type = splice_block %.loc11_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/alias/no_prelude/import_access.carbon b/toolchain/check/testdata/alias/no_prelude/import_access.carbon index 0bb18ccb1e06..46aebf166fdd 100644 --- a/toolchain/check/testdata/alias/no_prelude/import_access.carbon +++ b/toolchain/check/testdata/alias/no_prelude/import_access.carbon @@ -86,6 +86,7 @@ var inst: Test.A = {}; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -105,8 +106,8 @@ var inst: Test.A = {}; // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %inst.patt: %C = binding_pattern inst -// CHECK:STDOUT: %.loc4: %C = var_pattern %inst.patt +// CHECK:STDOUT: %inst.patt: %pattern_type = binding_pattern inst +// CHECK:STDOUT: %.loc4: %pattern_type = var_pattern %inst.patt // CHECK:STDOUT: } // CHECK:STDOUT: %inst.var: ref %C = var inst // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Test.A [concrete = constants.%C] diff --git a/toolchain/check/testdata/alias/no_prelude/import_order.carbon b/toolchain/check/testdata/alias/no_prelude/import_order.carbon index 494334f87249..30d0359d3db8 100644 --- a/toolchain/check/testdata/alias/no_prelude/import_order.carbon +++ b/toolchain/check/testdata/alias/no_prelude/import_order.carbon @@ -79,6 +79,7 @@ var a_val: a = {.v = b_val.v}; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.v [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %empty_tuple.type [concrete] @@ -109,29 +110,29 @@ var a_val: a = {.v = b_val.v}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d_val.patt: %C = binding_pattern d_val -// CHECK:STDOUT: %.loc7: %C = var_pattern %d_val.patt +// CHECK:STDOUT: %d_val.patt: %pattern_type = binding_pattern d_val +// CHECK:STDOUT: %.loc7: %pattern_type = var_pattern %d_val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d_val.var: ref %C = var d_val // CHECK:STDOUT: %d.ref: type = name_ref d, imports.%Main.d [concrete = constants.%C] // CHECK:STDOUT: %d_val: ref %C = bind_name d_val, %d_val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_val.patt: %C = binding_pattern c_val -// CHECK:STDOUT: %.loc8: %C = var_pattern %c_val.patt +// CHECK:STDOUT: %c_val.patt: %pattern_type = binding_pattern c_val +// CHECK:STDOUT: %.loc8: %pattern_type = var_pattern %c_val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c_val.var: ref %C = var c_val // CHECK:STDOUT: %c.ref: type = name_ref c, imports.%Main.c [concrete = constants.%C] // CHECK:STDOUT: %c_val: ref %C = bind_name c_val, %c_val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_val.patt: %C = binding_pattern b_val -// CHECK:STDOUT: %.loc9: %C = var_pattern %b_val.patt +// CHECK:STDOUT: %b_val.patt: %pattern_type = binding_pattern b_val +// CHECK:STDOUT: %.loc9: %pattern_type = var_pattern %b_val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b_val.var: ref %C = var b_val // CHECK:STDOUT: %b.ref: type = name_ref b, imports.%Main.b [concrete = constants.%C] // CHECK:STDOUT: %b_val: ref %C = bind_name b_val, %b_val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_val.patt: %C = binding_pattern a_val -// CHECK:STDOUT: %.loc10: %C = var_pattern %a_val.patt +// CHECK:STDOUT: %a_val.patt: %pattern_type = binding_pattern a_val +// CHECK:STDOUT: %.loc10: %pattern_type = var_pattern %a_val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_val.var: ref %C = var a_val // CHECK:STDOUT: %a.ref: type = name_ref a, imports.%Main.a [concrete = constants.%C] diff --git a/toolchain/check/testdata/alias/no_prelude/in_namespace.carbon b/toolchain/check/testdata/alias/no_prelude/in_namespace.carbon index e85e4ecff686..85d8cfacb45f 100644 --- a/toolchain/check/testdata/alias/no_prelude/in_namespace.carbon +++ b/toolchain/check/testdata/alias/no_prelude/in_namespace.carbon @@ -27,6 +27,7 @@ fn F() -> NS.a { // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %empty_tuple.type [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.v [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -48,7 +49,7 @@ fn F() -> NS.a { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: type = bind_alias a, %C.decl [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %C = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %.loc16_10: type = splice_block %a.ref [concrete = constants.%C] { // CHECK:STDOUT: %NS.ref: = name_ref NS, %NS [concrete = %NS] @@ -63,8 +64,8 @@ fn F() -> NS.a { // CHECK:STDOUT: %.loc16_23.6: ref %C = converted @__global_init.%.loc16_23, %.loc16_23.5 // CHECK:STDOUT: %b: ref %C = bind_name b, %.loc16_23.6 // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %NS.ref: = name_ref NS, file.%NS [concrete = file.%NS] // CHECK:STDOUT: %a.ref: type = name_ref a, file.%a [concrete = constants.%C] diff --git a/toolchain/check/testdata/array/array_in_place.carbon b/toolchain/check/testdata/array/array_in_place.carbon index 7a567b44bd23..632885e9175a 100644 --- a/toolchain/check/testdata/array/array_in_place.carbon +++ b/toolchain/check/testdata/array/array_in_place.carbon @@ -21,12 +21,14 @@ fn G() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.189: type = tuple_type (%i32, %i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.b5a: type = pattern_type %tuple.type.189 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_2, %tuple.type.189 [concrete] +// CHECK:STDOUT: %pattern_type.b65: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %tuple.type.99b: type = tuple_type (%tuple.type.189, %tuple.type.189) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -48,8 +50,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %tuple.type.189 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.189 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.b5a = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.b5a = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -70,8 +72,8 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %array_type = binding_pattern v -// CHECK:STDOUT: %.loc14_3.1: %array_type = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.b65 = binding_pattern v +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.b65 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %array_type = var v // CHECK:STDOUT: %F.ref.loc14_39: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] diff --git a/toolchain/check/testdata/array/array_vs_tuple.carbon b/toolchain/check/testdata/array/array_vs_tuple.carbon index d19bcde127c6..689d66592d4a 100644 --- a/toolchain/check/testdata/array/array_vs_tuple.carbon +++ b/toolchain/check/testdata/array/array_vs_tuple.carbon @@ -23,6 +23,7 @@ fn G() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.37f: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete] @@ -48,6 +49,7 @@ fn G() { // CHECK:STDOUT: %array: %array_type = tuple_value (%int_1.5d2, %int_2.ef8, %int_3.822) [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.189: type = tuple_type (%i32, %i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.b5a: type = pattern_type %tuple.type.189 [concrete] // CHECK:STDOUT: %tuple: %tuple.type.189 = tuple_value (%int_1.5d2, %int_2.ef8, %int_3.822) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -72,8 +74,8 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc13_3.1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.5d8 = binding_pattern a +// CHECK:STDOUT: %.loc13_3.1: %pattern_type.5d8 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %int_1.loc13_27: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -118,8 +120,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %tuple.type.189 = binding_pattern b -// CHECK:STDOUT: %.loc14_3.1: %tuple.type.189 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.b5a = binding_pattern b +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.b5a = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.189 = var b // CHECK:STDOUT: %int_1.loc14: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/array/assign_return_value.carbon b/toolchain/check/testdata/array/assign_return_value.carbon index 717ddb6945d1..c29a6c6513a2 100644 --- a/toolchain/check/testdata/array/assign_return_value.carbon +++ b/toolchain/check/testdata/array/assign_return_value.carbon @@ -21,6 +21,7 @@ fn Run() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -42,6 +43,7 @@ fn Run() { // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -61,8 +63,8 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %tuple.type.a1c = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.a1c = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.b74 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.b74 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -93,8 +95,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %array_type = binding_pattern t -// CHECK:STDOUT: %.loc14_3.1: %array_type = var_pattern %t.patt +// CHECK:STDOUT: %t.patt: %pattern_type.a98 = binding_pattern t +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.a98 = var_pattern %t.patt // CHECK:STDOUT: } // CHECK:STDOUT: %t.var: ref %array_type = var t // CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] diff --git a/toolchain/check/testdata/array/assign_var.carbon b/toolchain/check/testdata/array/assign_var.carbon index 1aa23fc945e0..58c4938565ec 100644 --- a/toolchain/check/testdata/array/assign_var.carbon +++ b/toolchain/check/testdata/array/assign_var.carbon @@ -18,6 +18,7 @@ var b: array(i32, 3) = a; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.189: type = tuple_type (%i32, %i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.b5a: type = pattern_type %tuple.type.189 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] @@ -42,6 +43,7 @@ var b: array(i32, 3) = a; // CHECK:STDOUT: %int_3.822: %i32 = int_value 3 [concrete] // CHECK:STDOUT: %tuple: %tuple.type.189 = tuple_value (%int_1.5d2, %int_2.ef8, %int_3.822) [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -62,8 +64,8 @@ var b: array(i32, 3) = a; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.189 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.189 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.b5a = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.b5a = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.189 = var a // CHECK:STDOUT: %.loc11_22.1: type = splice_block %.loc11_22.3 [concrete = constants.%tuple.type.189] { @@ -78,8 +80,8 @@ var b: array(i32, 3) = a; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.189 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %array_type = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %array_type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.5d8 = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.5d8 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %array_type = var b // CHECK:STDOUT: %.loc12_20: type = splice_block %array_type [concrete = constants.%array_type] { diff --git a/toolchain/check/testdata/array/base.carbon b/toolchain/check/testdata/array/base.carbon index 343678bd6f73..187d4d0377b3 100644 --- a/toolchain/check/testdata/array/base.carbon +++ b/toolchain/check/testdata/array/base.carbon @@ -20,6 +20,7 @@ var c: array((), 5) = ((), (), (), (), (),); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type.0cb: type = array_type %int_1.5b8, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type.0cb [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -40,12 +41,14 @@ var c: array((), 5) = ((), (), (), (), (),); // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type.ce7: type = array_type %int_2, f64 [concrete] +// CHECK:STDOUT: %pattern_type.e85: type = pattern_type %array_type.ce7 [concrete] // CHECK:STDOUT: %float.6e4: f64 = float_literal 11.100000000000001 [concrete] // CHECK:STDOUT: %float.9f7: f64 = float_literal 2.2000000000000002 [concrete] // CHECK:STDOUT: %tuple.type.bdb: type = tuple_type (f64, f64) [concrete] // CHECK:STDOUT: %array.6a2: %array_type.ce7 = tuple_value (%float.6e4, %float.9f7) [concrete] // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %array_type.c13: type = array_type %int_5, %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type.d84: type = pattern_type %array_type.c13 [concrete] // CHECK:STDOUT: %tuple.type.5b2: type = tuple_type (%empty_tuple.type, %empty_tuple.type, %empty_tuple.type, %empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] @@ -72,8 +75,8 @@ var c: array((), 5) = ((), (), (), (), (),); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type.0cb = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %array_type.0cb = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a98 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.a98 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.0cb = var a // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type.loc11 [concrete = constants.%array_type.0cb] { @@ -84,8 +87,8 @@ var c: array((), 5) = ((), (), (), (), (),); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type.0cb = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %array_type.ce7 = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %array_type.ce7 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.e85 = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.e85 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %array_type.ce7 = var b // CHECK:STDOUT: %.loc12_20: type = splice_block %array_type.loc12 [concrete = constants.%array_type.ce7] { @@ -98,8 +101,8 @@ var c: array((), 5) = ((), (), (), (), (),); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %array_type.ce7 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %array_type.c13 = binding_pattern c -// CHECK:STDOUT: %.loc13_1: %array_type.c13 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.d84 = binding_pattern c +// CHECK:STDOUT: %.loc13_1: %pattern_type.d84 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %array_type.c13 = var c // CHECK:STDOUT: %.loc13_19: type = splice_block %array_type.loc13 [concrete = constants.%array_type.c13] { diff --git a/toolchain/check/testdata/array/canonicalize_index.carbon b/toolchain/check/testdata/array/canonicalize_index.carbon index aa9210443459..481f1a3c7dd4 100644 --- a/toolchain/check/testdata/array/canonicalize_index.carbon +++ b/toolchain/check/testdata/array/canonicalize_index.carbon @@ -20,9 +20,11 @@ let c: array(i32, ConvertToU32(3))* = &a; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Add.type.b1f: type = fn_type @Add.1 [concrete] // CHECK:STDOUT: %Add: %Add.type.b1f = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.4a9: type = pattern_type %u32 [concrete] // CHECK:STDOUT: %ConvertToU32.type: type = fn_type @ConvertToU32 [concrete] // CHECK:STDOUT: %ConvertToU32: %ConvertToU32.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -57,11 +59,13 @@ let c: array(i32, ConvertToU32(3))* = &a; // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] // CHECK:STDOUT: %ptr.f01: type = ptr_type %array_type [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Convert.bound.b30: = bound_method %int_3.1ba, %Convert.956 [concrete] // CHECK:STDOUT: %bound_method.047: = bound_method %int_3.1ba, %Convert.specific_fn.b6f [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_1.5d2, %int_2.ef8, %int_3.822) [concrete] +// CHECK:STDOUT: %pattern_type.743: type = pattern_type %ptr.f01 [concrete] // CHECK:STDOUT: %int_3.d14: %u32 = int_value 3 [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.6ad = impl_witness_table (imports.%Core.import_ref.823), @impl.750 [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.a110: = impl_witness %ImplicitAs.impl_witness_table.6ad, @impl.750(%int_32) [concrete] @@ -95,12 +99,12 @@ let c: array(i32, ConvertToU32(3))* = &a; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Add.decl: %Add.type.b1f = fn_decl @Add.1 [concrete = constants.%Add] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_27: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -120,10 +124,10 @@ let c: array(i32, ConvertToU32(3))* = &a; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertToU32.decl: %ConvertToU32.type = fn_decl @ConvertToU32 [concrete = constants.%ConvertToU32] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %u32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %u32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.4a9 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.4a9 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12_28: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(constants.%int_32) [concrete = constants.%u32] @@ -137,8 +141,8 @@ let c: array(i32, ConvertToU32(3))* = &a; // CHECK:STDOUT: %return: ref %u32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc14_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.5d8 = binding_pattern a +// CHECK:STDOUT: %.loc14_1: %pattern_type.5d8 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc14_28: type = splice_block %array_type.loc14 [concrete = constants.%array_type] { @@ -175,7 +179,7 @@ let c: array(i32, ConvertToU32(3))* = &a; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %ptr.f01 = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.743 = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15: type = splice_block %ptr.loc15 [concrete = constants.%ptr.f01] { // CHECK:STDOUT: %int_32.loc15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -186,7 +190,7 @@ let c: array(i32, ConvertToU32(3))* = &a; // CHECK:STDOUT: } // CHECK:STDOUT: %b: %ptr.f01 = bind_name b, @__global_init.%addr.loc15 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %ptr.f01 = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.743 = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %.loc16_35: type = splice_block %ptr.loc16 [concrete = constants.%ptr.f01] { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] diff --git a/toolchain/check/testdata/array/fail_bound_negative.carbon b/toolchain/check/testdata/array/fail_bound_negative.carbon index 6f83f892f841..84dc7618ccc3 100644 --- a/toolchain/check/testdata/array/fail_bound_negative.carbon +++ b/toolchain/check/testdata/array/fail_bound_negative.carbon @@ -21,6 +21,7 @@ var a: array(i32, Negate(1)); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Negate.type.15b: type = fn_type @Negate.1 [concrete] // CHECK:STDOUT: %Negate: %Negate.type.15b = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -68,10 +69,10 @@ var a: array(i32, Negate(1)); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Negate.decl: %Negate.type.15b = fn_decl @Negate.1 [concrete = constants.%Negate] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_22: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_22: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/array/fail_incomplete_element.carbon b/toolchain/check/testdata/array/fail_incomplete_element.carbon index 4a83fc435a97..e576d021c19b 100644 --- a/toolchain/check/testdata/array/fail_incomplete_element.carbon +++ b/toolchain/check/testdata/array/fail_incomplete_element.carbon @@ -28,6 +28,7 @@ var p: Incomplete* = &a[0]; // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, %Incomplete [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Incomplete [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -59,8 +60,8 @@ var p: Incomplete* = &a[0]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: = bind_name a, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %.loc22_1: %ptr = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p +// CHECK:STDOUT: %.loc22_1: %pattern_type = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr = var p // CHECK:STDOUT: %.loc22_18: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/array/fail_out_of_bound.carbon b/toolchain/check/testdata/array/fail_out_of_bound.carbon index ddb277e90b87..f6a4417455ec 100644 --- a/toolchain/check/testdata/array/fail_out_of_bound.carbon +++ b/toolchain/check/testdata/array/fail_out_of_bound.carbon @@ -21,6 +21,7 @@ var a: array(i32, 1) = (1, 2, 3); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete] @@ -41,8 +42,8 @@ var a: array(i32, 1) = (1, 2, 3); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc15_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a98 = binding_pattern a +// CHECK:STDOUT: %.loc15_1: %pattern_type.a98 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc15_20: type = splice_block %array_type [concrete = constants.%array_type] { diff --git a/toolchain/check/testdata/array/fail_out_of_bound_non_literal.carbon b/toolchain/check/testdata/array/fail_out_of_bound_non_literal.carbon index 061fdcbfa656..ac1139663b57 100644 --- a/toolchain/check/testdata/array/fail_out_of_bound_non_literal.carbon +++ b/toolchain/check/testdata/array/fail_out_of_bound_non_literal.carbon @@ -22,6 +22,7 @@ var b: i32 = a[{.index = 3}.index]; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete] @@ -35,6 +36,7 @@ var b: i32 = a[{.index = 3}.index]; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.ab5: = bound_method %int_1.5b8, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.9a1: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] @@ -66,8 +68,8 @@ var b: i32 = a[{.index = 3}.index]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.5d8 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.5d8 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type [concrete = constants.%array_type] { @@ -78,8 +80,8 @@ var b: i32 = a[{.index = 3}.index]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/array/fail_type_mismatch.carbon b/toolchain/check/testdata/array/fail_type_mismatch.carbon index 19b1232a7212..41a01e9db31e 100644 --- a/toolchain/check/testdata/array/fail_type_mismatch.carbon +++ b/toolchain/check/testdata/array/fail_type_mismatch.carbon @@ -47,6 +47,7 @@ var d: array(i32, 3) = t2; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %str.ef1: String = string_literal "Hello" [concrete] // CHECK:STDOUT: %str.abb: String = string_literal "World" [concrete] @@ -66,10 +67,12 @@ var d: array(i32, 3) = t2; // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.9e7: type = tuple_type (%i32, String, String) [concrete] +// CHECK:STDOUT: %pattern_type.99d: type = pattern_type %tuple.type.9e7 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -93,8 +96,8 @@ var d: array(i32, 3) = t2; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc18_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.5d8 = binding_pattern a +// CHECK:STDOUT: %.loc18_1: %pattern_type.5d8 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc18_20: type = splice_block %array_type.loc18 [concrete = constants.%array_type] { @@ -105,8 +108,8 @@ var d: array(i32, 3) = t2; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t1.patt: %tuple.type.9e7 = binding_pattern t1 -// CHECK:STDOUT: %.loc20_1: %tuple.type.9e7 = var_pattern %t1.patt +// CHECK:STDOUT: %t1.patt: %pattern_type.99d = binding_pattern t1 +// CHECK:STDOUT: %.loc20_1: %pattern_type.99d = var_pattern %t1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %t1.var: ref %tuple.type.9e7 = var t1 // CHECK:STDOUT: %.loc20_29.1: type = splice_block %.loc20_29.3 [concrete = constants.%tuple.type.9e7] { @@ -117,8 +120,8 @@ var d: array(i32, 3) = t2; // CHECK:STDOUT: } // CHECK:STDOUT: %t1: ref %tuple.type.9e7 = bind_name t1, %t1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %array_type = binding_pattern b -// CHECK:STDOUT: %.loc28_1: %array_type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.5d8 = binding_pattern b +// CHECK:STDOUT: %.loc28_1: %pattern_type.5d8 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %array_type = var b // CHECK:STDOUT: %.loc28_20: type = splice_block %array_type.loc28 [concrete = constants.%array_type] { @@ -129,8 +132,8 @@ var d: array(i32, 3) = t2; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %array_type = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %array_type = binding_pattern c -// CHECK:STDOUT: %.loc34_1: %array_type = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.5d8 = binding_pattern c +// CHECK:STDOUT: %.loc34_1: %pattern_type.5d8 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %array_type = var c // CHECK:STDOUT: %.loc34_20: type = splice_block %array_type.loc34 [concrete = constants.%array_type] { @@ -141,8 +144,8 @@ var d: array(i32, 3) = t2; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %array_type = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t2.patt: %tuple.type.d07 = binding_pattern t2 -// CHECK:STDOUT: %.loc36_1: %tuple.type.d07 = var_pattern %t2.patt +// CHECK:STDOUT: %t2.patt: %pattern_type.511 = binding_pattern t2 +// CHECK:STDOUT: %.loc36_1: %pattern_type.511 = var_pattern %t2.patt // CHECK:STDOUT: } // CHECK:STDOUT: %t2.var: ref %tuple.type.d07 = var t2 // CHECK:STDOUT: %.loc36_18.1: type = splice_block %.loc36_18.3 [concrete = constants.%tuple.type.d07] { @@ -155,8 +158,8 @@ var d: array(i32, 3) = t2; // CHECK:STDOUT: } // CHECK:STDOUT: %t2: ref %tuple.type.d07 = bind_name t2, %t2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %array_type = binding_pattern d -// CHECK:STDOUT: %.loc41_1: %array_type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.5d8 = binding_pattern d +// CHECK:STDOUT: %.loc41_1: %pattern_type.5d8 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %array_type = var d // CHECK:STDOUT: %.loc41_20: type = splice_block %array_type.loc41 [concrete = constants.%array_type] { diff --git a/toolchain/check/testdata/array/function_param.carbon b/toolchain/check/testdata/array/function_param.carbon index 8f4748449ed1..26f274ad1b4d 100644 --- a/toolchain/check/testdata/array/function_param.carbon +++ b/toolchain/check/testdata/array/function_param.carbon @@ -23,6 +23,8 @@ fn G() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -69,12 +71,12 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %arr.patt: %array_type = binding_pattern arr -// CHECK:STDOUT: %arr.param_patt: %array_type = value_param_pattern %arr.patt, call_param0 -// CHECK:STDOUT: %i.patt: %i32 = binding_pattern i -// CHECK:STDOUT: %i.param_patt: %i32 = value_param_pattern %i.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %arr.patt: %pattern_type.5d8 = binding_pattern arr +// CHECK:STDOUT: %arr.param_patt: %pattern_type.5d8 = value_param_pattern %arr.patt, call_param0 +// CHECK:STDOUT: %i.patt: %pattern_type.7ce = binding_pattern i +// CHECK:STDOUT: %i.param_patt: %pattern_type.7ce = value_param_pattern %i.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_37: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_37: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -96,8 +98,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/array/generic_empty.carbon b/toolchain/check/testdata/array/generic_empty.carbon index 7eab234ce5f0..35df43274b4d 100644 --- a/toolchain/check/testdata/array/generic_empty.carbon +++ b/toolchain/check/testdata/array/generic_empty.carbon @@ -21,13 +21,15 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %array_type.281: type = array_type %int_0, %T [symbolic] // CHECK:STDOUT: %require_complete.b7f: = require_complete_type %array_type.281 [symbolic] +// CHECK:STDOUT: %pattern_type.d48: type = pattern_type %array_type.281 [symbolic] // CHECK:STDOUT: %array.2ed: %array_type.281 = tuple_value () [symbolic] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] @@ -36,6 +38,7 @@ fn H() { // CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%i32) [concrete] // CHECK:STDOUT: %array_type.f5c: type = array_type %int_0, %i32 [concrete] // CHECK:STDOUT: %complete_type.cff: = complete_type_witness %array_type.f5c [concrete] +// CHECK:STDOUT: %pattern_type.772: type = pattern_type %array_type.f5c [concrete] // CHECK:STDOUT: %array.812: %array_type.f5c = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -55,7 +58,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt.loc11_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] // CHECK:STDOUT: } @@ -64,18 +67,19 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc11_6.1: type) { // CHECK:STDOUT: %T.loc11_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %array_type.loc13_22.2: type = array_type constants.%int_0, %T.loc11_6.2 [symbolic = %array_type.loc13_22.2 (constants.%array_type.281)] // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc13_22.2 [symbolic = %require_complete (constants.%require_complete.b7f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc13_22.2 [symbolic = %pattern_type (constants.%pattern_type.d48)] // CHECK:STDOUT: %array: @G.%array_type.loc13_22.2 (%array_type.281) = tuple_value () [symbolic = %array (constants.%array.2ed)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: @G.%array_type.loc13_22.2 (%array_type.281) = binding_pattern arr -// CHECK:STDOUT: %.loc13_3.1: @G.%array_type.loc13_22.2 (%array_type.281) = var_pattern %arr.patt +// CHECK:STDOUT: %arr.patt: @G.%pattern_type (%pattern_type.d48) = binding_pattern arr +// CHECK:STDOUT: %.loc13_3.1: @G.%pattern_type (%pattern_type.d48) = var_pattern %arr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref @G.%array_type.loc13_22.2 (%array_type.281) = var arr // CHECK:STDOUT: %.loc13_27.1: %empty_tuple.type = tuple_literal () @@ -114,6 +118,7 @@ fn H() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: %array_type.loc13_22.2 => constants.%array_type.f5c // CHECK:STDOUT: %require_complete => constants.%complete_type.cff +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.772 // CHECK:STDOUT: %array => constants.%array.812 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/array/import.carbon b/toolchain/check/testdata/array/import.carbon index 05ab34afa4bb..563fff4dc8d3 100644 --- a/toolchain/check/testdata/array/import.carbon +++ b/toolchain/check/testdata/array/import.carbon @@ -29,6 +29,7 @@ fn G(n: i32) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_42, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.b6e: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -48,8 +49,8 @@ fn G(n: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %array_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %array_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.b6e = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.b6e = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -67,6 +68,7 @@ fn G(n: i32) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -93,10 +95,10 @@ fn G(n: i32) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc4_17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc4_17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/array/index_not_literal.carbon b/toolchain/check/testdata/array/index_not_literal.carbon index 5c3bb028ce24..2e6f102d1082 100644 --- a/toolchain/check/testdata/array/index_not_literal.carbon +++ b/toolchain/check/testdata/array/index_not_literal.carbon @@ -18,6 +18,7 @@ var b: i32 = a[{.index = 2}.index]; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral, Core.IntLiteral, Core.IntLiteral) [concrete] @@ -31,6 +32,7 @@ var b: i32 = a[{.index = 2}.index]; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.ab5: = bound_method %int_1.5b8, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.9a1: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] @@ -62,8 +64,8 @@ var b: i32 = a[{.index = 2}.index]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.5d8 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.5d8 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type [concrete = constants.%array_type] { @@ -74,8 +76,8 @@ var b: i32 = a[{.index = 2}.index]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc12_8: type = splice_block %i32.loc12 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/array/init_dependent_bound.carbon b/toolchain/check/testdata/array/init_dependent_bound.carbon index 6873dbe61344..e514de0fad64 100644 --- a/toolchain/check/testdata/array/init_dependent_bound.carbon +++ b/toolchain/check/testdata/array/init_dependent_bound.carbon @@ -41,7 +41,8 @@ fn H() { G(3); } // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.2fd: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete] @@ -58,6 +59,7 @@ fn H() { G(3); } // CHECK:STDOUT: %int.convert_checked: init Core.IntLiteral = call %bound_method(%N.51e) [symbolic] // CHECK:STDOUT: %array_type: type = array_type %int.convert_checked, %i32 [symbolic] // CHECK:STDOUT: %require_complete.7cb: = require_complete_type %array_type [symbolic] +// CHECK:STDOUT: %pattern_type.ccc: type = pattern_type %array_type [symbolic] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] @@ -80,7 +82,7 @@ fn H() { G(3); } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt.loc4_6.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_6.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc4_6.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_6.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32.loc4 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc4: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -92,7 +94,7 @@ fn H() { G(3); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc4_6.1: %i32) { // CHECK:STDOUT: %N.loc4_6.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_6.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc4_6.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_6.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc4_6.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_6.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Convert.bound: = bound_method %N.loc4_6.2, constants.%Convert.960 [symbolic = %Convert.bound (constants.%Convert.bound)] @@ -100,12 +102,13 @@ fn H() { G(3); } // CHECK:STDOUT: %int.convert_checked.loc9_23.2: init Core.IntLiteral = call %bound_method.loc9_23.3(%N.loc4_6.2) [symbolic = %int.convert_checked.loc9_23.2 (constants.%int.convert_checked)] // CHECK:STDOUT: %array_type.loc9_24.2: type = array_type %int.convert_checked.loc9_23.2, constants.%i32 [symbolic = %array_type.loc9_24.2 (constants.%array_type)] // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc9_24.2 [symbolic = %require_complete (constants.%require_complete.7cb)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc9_24.2 [symbolic = %pattern_type (constants.%pattern_type.ccc)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: @F.%array_type.loc9_24.2 (%array_type) = binding_pattern arr -// CHECK:STDOUT: %.loc9_3: @F.%array_type.loc9_24.2 (%array_type) = var_pattern %arr.patt +// CHECK:STDOUT: %arr.patt: @F.%pattern_type (%pattern_type.ccc) = binding_pattern arr +// CHECK:STDOUT: %.loc9_3: @F.%pattern_type (%pattern_type.ccc) = var_pattern %arr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref @F.%array_type.loc9_24.2 (%array_type) = var arr // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] @@ -133,7 +136,7 @@ fn H() { G(3); } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.51e) { // CHECK:STDOUT: %N.loc4_6.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc4_6.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc4_6.2 => constants.%N.patt.f2c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_init_template_dependent_bound.carbon @@ -143,7 +146,8 @@ fn H() { G(3); } // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0, template [template] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0, template [template] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0, template [template] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -206,7 +210,7 @@ fn H() { G(3); } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %N.patt.loc5_15.1: %i32 = symbolic_binding_pattern N, 0, template [template = %N.patt.loc5_15.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc5_15.1: %pattern_type.7ce = symbolic_binding_pattern N, 0, template [template = %N.patt.loc5_15.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5: type = splice_block %i32.loc5 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -219,7 +223,7 @@ fn H() { G(3); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%N.loc5_15.1: %i32) { // CHECK:STDOUT: %N.loc5_15.2: %i32 = bind_symbolic_name N, 0, template [template = %N.loc5_15.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc5_15.2: %i32 = symbolic_binding_pattern N, 0, template [template = %N.patt.loc5_15.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc5_15.2: %pattern_type.7ce = symbolic_binding_pattern N, 0, template [template = %N.patt.loc5_15.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %.loc10_23.2: = convert_to_value_action %N.ref, Core.IntLiteral [template] @@ -266,12 +270,12 @@ fn H() { G(3); } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%N.51e) { // CHECK:STDOUT: %N.loc5_15.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc5_15.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc5_15.2 => constants.%N.patt.f2c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%int_3.822) { // CHECK:STDOUT: %N.loc5_15.2 => constants.%int_3.822 -// CHECK:STDOUT: %N.patt.loc5_15.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc5_15.2 => constants.%N.patt.f2c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %.loc10_23.2 => constants.%inst.splice_block diff --git a/toolchain/check/testdata/array/nine_elements.carbon b/toolchain/check/testdata/array/nine_elements.carbon index ba719f8ee03d..b10f8848fa54 100644 --- a/toolchain/check/testdata/array/nine_elements.carbon +++ b/toolchain/check/testdata/array/nine_elements.carbon @@ -17,6 +17,7 @@ var a: array(i32, 9) = (1, 2, 3, 4, 5, 6, 7, 8, 9); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_9.988: Core.IntLiteral = int_value 9 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_9.988, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.b3e: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] @@ -82,8 +83,8 @@ var a: array(i32, 9) = (1, 2, 3, 4, 5, 6, 7, 8, 9); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.b3e = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.b3e = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type [concrete = constants.%array_type] { diff --git a/toolchain/check/testdata/as/adapter_conversion.carbon b/toolchain/check/testdata/as/adapter_conversion.carbon index e78bfd958d12..5592777d5a38 100644 --- a/toolchain/check/testdata/as/adapter_conversion.carbon +++ b/toolchain/check/testdata/as/adapter_conversion.carbon @@ -170,6 +170,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.x.y.871: type = struct_type {.x: %i32, .y: %i32} [concrete] @@ -194,7 +195,9 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %A.val: %A = struct_value (%int_1.5d2, %int_2.ef8) [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -221,24 +224,24 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: %A = binding_pattern a_ref -// CHECK:STDOUT: %.loc17: %A = var_pattern %a_ref.patt +// CHECK:STDOUT: %a_ref.patt: %pattern_type.c10 = binding_pattern a_ref +// CHECK:STDOUT: %.loc17: %pattern_type.c10 = var_pattern %a_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref %A = var a_ref // CHECK:STDOUT: %A.ref.loc17: type = name_ref A, %A.decl [concrete = constants.%A] // CHECK:STDOUT: %a_ref: ref %A = bind_name a_ref, %a_ref.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_val.patt: %A = binding_pattern a_val +// CHECK:STDOUT: %a_val.patt: %pattern_type.c10 = binding_pattern a_val // CHECK:STDOUT: } // CHECK:STDOUT: %A.ref.loc18: type = name_ref A, %A.decl [concrete = constants.%A] // CHECK:STDOUT: %a_val: ref %A = bind_name a_val, @__global_init.%a_ref.ref.loc18 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_val.patt: %B = binding_pattern b_val +// CHECK:STDOUT: %b_val.patt: %pattern_type.049 = binding_pattern b_val // CHECK:STDOUT: } // CHECK:STDOUT: %B.ref.loc21: type = name_ref B, %B.decl [concrete = constants.%B] // CHECK:STDOUT: %b_val: ref %B = bind_name b_val, @__global_init.%.loc21_22.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_ptr.patt: %ptr.e79 = binding_pattern b_ptr +// CHECK:STDOUT: %b_ptr.patt: %pattern_type.960 = binding_pattern b_ptr // CHECK:STDOUT: } // CHECK:STDOUT: %.loc22: type = splice_block %ptr [concrete = constants.%ptr.e79] { // CHECK:STDOUT: %B.ref.loc22: type = name_ref B, %B.decl [concrete = constants.%B] @@ -246,8 +249,8 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: } // CHECK:STDOUT: %b_ptr: %ptr.e79 = bind_name b_ptr, @__global_init.%addr // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_factory.patt: %B = binding_pattern b_factory -// CHECK:STDOUT: %.loc24: %B = var_pattern %b_factory.patt +// CHECK:STDOUT: %b_factory.patt: %pattern_type.049 = binding_pattern b_factory +// CHECK:STDOUT: %.loc24: %pattern_type.049 = var_pattern %b_factory.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b_factory.var: ref %B = var b_factory // CHECK:STDOUT: %B.ref.loc24: type = name_ref B, %B.decl [concrete = constants.%B] @@ -262,8 +265,8 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: %A.elem = field_decl y, element1 [concrete] // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %A = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %A = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c10 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c10 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %return.param: ref %A = out_param call_param0 @@ -371,6 +374,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %As.type.fd4: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.99b: type = fn_type @Convert.1, @As(%i32) [concrete] @@ -381,6 +385,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %As.facet: %As.type.fd4 = facet_value Core.IntLiteral, (%As.impl_witness.6b4) [concrete] // CHECK:STDOUT: %.982: type = fn_type_with_self_type %Convert.type.99b, %As.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_1.5b8, %Convert.197 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.197, @Convert.5(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] @@ -406,12 +411,12 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: %A = bind_name a, @__global_init.%.loc8_23.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -463,6 +468,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %D [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %D.val: %D = struct_value () [concrete] // CHECK:STDOUT: } @@ -489,7 +495,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d +// CHECK:STDOUT: %d.patt: %pattern_type = binding_pattern d // CHECK:STDOUT: } // CHECK:STDOUT: %D.ref: type = name_ref D, %D.decl [concrete = constants.%D] // CHECK:STDOUT: %d: %D = bind_name d, @__global_init.%.loc9_15.2 @@ -559,6 +565,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %struct_type.x.y.871: type = struct_type {.x: %i32, .y: %i32} [concrete] // CHECK:STDOUT: %complete_type.70a: = complete_type_witness %struct_type.x.y.871 [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.x.y.4cf: type = struct_type {.x: Core.IntLiteral, .y: Core.IntLiteral} [concrete] @@ -600,7 +607,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_value.patt: %B = binding_pattern b_value +// CHECK:STDOUT: %b_value.patt: %pattern_type.049 = binding_pattern b_value // CHECK:STDOUT: } // CHECK:STDOUT: %B.ref: type = name_ref B, %B.decl [concrete = constants.%B] // CHECK:STDOUT: %b_value: ref %B = bind_name b_value, @__global_init.%.loc13_42.2 @@ -676,6 +683,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %struct_type.x.y.871: type = struct_type {.x: %i32, .y: %i32} [concrete] // CHECK:STDOUT: %complete_type.70a: = complete_type_witness %struct_type.x.y.871 [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.x.y.4cf: type = struct_type {.x: Core.IntLiteral, .y: Core.IntLiteral} [concrete] @@ -717,8 +725,8 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_init.patt: %B = binding_pattern b_init -// CHECK:STDOUT: %.loc22: %B = var_pattern %b_init.patt +// CHECK:STDOUT: %b_init.patt: %pattern_type.049 = binding_pattern b_init +// CHECK:STDOUT: %.loc22: %pattern_type.049 = var_pattern %b_init.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b_init.var: ref %B = var b_init // CHECK:STDOUT: %B.ref: type = name_ref B, %B.decl [concrete = constants.%B] @@ -799,6 +807,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.560: type = tuple_type (%i32, %Noncopyable) [concrete] // CHECK:STDOUT: %complete_type.ce5: = complete_type_witness %tuple.type.560 [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -822,8 +831,8 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %Noncopyable.decl: type = class_decl @Noncopyable [concrete = constants.%Noncopyable] {} {} // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c10 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref.loc12: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -858,7 +867,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: fn @F(%a.param: %A) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_value.patt: %A = binding_pattern a_value +// CHECK:STDOUT: %a_value.patt: %pattern_type.c10 = binding_pattern a_value // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %A = name_ref a, %a // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -888,6 +897,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.560: type = tuple_type (%i32, %Noncopyable) [concrete] // CHECK:STDOUT: %complete_type.ce5: = complete_type_witness %tuple.type.560 [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -911,8 +921,8 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %Noncopyable.decl: type = class_decl @Noncopyable [concrete = constants.%Noncopyable] {} {} // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c10 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref.loc12: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -947,8 +957,8 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: fn @F(%a.param: %A) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_init.patt: %A = binding_pattern a_init -// CHECK:STDOUT: %.loc25_3.1: %A = var_pattern %a_init.patt +// CHECK:STDOUT: %a_init.patt: %pattern_type.c10 = binding_pattern a_init +// CHECK:STDOUT: %.loc25_3.1: %pattern_type.c10 = var_pattern %a_init.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_init.var: ref %A = var a_init // CHECK:STDOUT: %a.ref: %A = name_ref a, %a @@ -984,6 +994,7 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.x.c96: type = struct_type {.x: Core.IntLiteral} [concrete] // CHECK:STDOUT: } @@ -1008,8 +1019,8 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %B = binding_pattern b -// CHECK:STDOUT: %.loc22: %B = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.049 = binding_pattern b +// CHECK:STDOUT: %.loc22: %pattern_type.049 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var b // CHECK:STDOUT: %B.ref: type = name_ref B, %B.decl [concrete = constants.%B] diff --git a/toolchain/check/testdata/as/as_type.carbon b/toolchain/check/testdata/as/as_type.carbon index 4cf3d880b327..73976d1e0e69 100644 --- a/toolchain/check/testdata/as/as_type.carbon +++ b/toolchain/check/testdata/as/as_type.carbon @@ -13,6 +13,7 @@ let t: type = (i32, i32) as type; // CHECK:STDOUT: --- as_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] @@ -34,7 +35,7 @@ let t: type = (i32, i32) as type; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: type = binding_pattern t +// CHECK:STDOUT: %t.patt: %pattern_type.98f = binding_pattern t // CHECK:STDOUT: } // CHECK:STDOUT: %t: type = bind_name t, @__global_init.%.loc11_26 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/as/basic.carbon b/toolchain/check/testdata/as/basic.carbon index d8552295ee5a..912f064a7b4a 100644 --- a/toolchain/check/testdata/as/basic.carbon +++ b/toolchain/check/testdata/as/basic.carbon @@ -17,6 +17,7 @@ fn Main() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -50,8 +51,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/as/fail_no_conversion.carbon b/toolchain/check/testdata/as/fail_no_conversion.carbon index f98cf08582f1..5562f3ac96e2 100644 --- a/toolchain/check/testdata/as/fail_no_conversion.carbon +++ b/toolchain/check/testdata/as/fail_no_conversion.carbon @@ -24,6 +24,7 @@ let n: (i32, i32) = 1 as (i32, i32); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -43,7 +44,7 @@ let n: (i32, i32) = 1 as (i32, i32); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %tuple.type.d07 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.511 = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %.loc18_17.1: type = splice_block %.loc18_17.3 [concrete = constants.%tuple.type.d07] { // CHECK:STDOUT: %int_32.loc18_9: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] diff --git a/toolchain/check/testdata/as/fail_not_type.carbon b/toolchain/check/testdata/as/fail_not_type.carbon index 2984cb6db4a4..6d7b67cf0fbd 100644 --- a/toolchain/check/testdata/as/fail_not_type.carbon +++ b/toolchain/check/testdata/as/fail_not_type.carbon @@ -22,6 +22,7 @@ let n: i32 = 1 as 2; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: } @@ -42,7 +43,7 @@ let n: i32 = 1 as 2; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %.loc18: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] diff --git a/toolchain/check/testdata/as/identity.carbon b/toolchain/check/testdata/as/identity.carbon index 4211f22b801a..7390c59f0fae 100644 --- a/toolchain/check/testdata/as/identity.carbon +++ b/toolchain/check/testdata/as/identity.carbon @@ -34,9 +34,11 @@ fn Initializing() { // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %Value.type: type = fn_type @Value [concrete] // CHECK:STDOUT: %Value: %Value.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.d17: type = ptr_type %X [concrete] +// CHECK:STDOUT: %pattern_type.1c6: type = pattern_type %ptr.d17 [concrete] // CHECK:STDOUT: %Reference.type: type = fn_type @Reference [concrete] // CHECK:STDOUT: %Reference: %Reference.type = struct_value () [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] @@ -64,16 +66,16 @@ fn Initializing() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %Value.decl: %Value.type = fn_decl @Value [concrete = constants.%Value] { -// CHECK:STDOUT: %n.patt: %X = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %X = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.019 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.019 = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %X = value_param call_param0 // CHECK:STDOUT: %X.ref.loc17: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %n: %X = bind_name n, %n.param // CHECK:STDOUT: } // CHECK:STDOUT: %Reference.decl: %Reference.type = fn_decl @Reference [concrete = constants.%Reference] { -// CHECK:STDOUT: %p.patt: %ptr.d17 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.d17 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.1c6 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.1c6 = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.d17 = value_param call_param0 // CHECK:STDOUT: %.loc21: type = splice_block %ptr.loc21 [concrete = constants.%ptr.d17] { @@ -83,8 +85,8 @@ fn Initializing() { // CHECK:STDOUT: %p: %ptr.d17 = bind_name p, %p.param // CHECK:STDOUT: } // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %X = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %X = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.019 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.019 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %return.param: ref %X = out_param call_param0 @@ -105,7 +107,7 @@ fn Initializing() { // CHECK:STDOUT: fn @Value(%n.param: %X) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: %X = binding_pattern m +// CHECK:STDOUT: %m.patt: %pattern_type.019 = binding_pattern m // CHECK:STDOUT: } // CHECK:STDOUT: %n.ref: %X = name_ref n, %n // CHECK:STDOUT: %X.ref.loc18_19: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -117,7 +119,7 @@ fn Initializing() { // CHECK:STDOUT: fn @Reference(%p.param: %ptr.d17) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %q.patt: %ptr.d17 = binding_pattern q +// CHECK:STDOUT: %q.patt: %pattern_type.1c6 = binding_pattern q // CHECK:STDOUT: } // CHECK:STDOUT: %p.ref: %ptr.d17 = name_ref p, %p // CHECK:STDOUT: %.loc22_17: ref %X = deref %p.ref @@ -136,8 +138,8 @@ fn Initializing() { // CHECK:STDOUT: fn @Initializing() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %X = binding_pattern x -// CHECK:STDOUT: %.loc28_3.1: %X = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.019 = binding_pattern x +// CHECK:STDOUT: %.loc28_3.1: %pattern_type.019 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %X = var x // CHECK:STDOUT: %Make.ref: %Make.type = name_ref Make, file.%Make.decl [concrete = constants.%Make] diff --git a/toolchain/check/testdata/as/min_prelude/tuple.carbon b/toolchain/check/testdata/as/min_prelude/tuple.carbon index b32fabffc2e2..90d139f18e8f 100644 --- a/toolchain/check/testdata/as/min_prelude/tuple.carbon +++ b/toolchain/check/testdata/as/min_prelude/tuple.carbon @@ -37,12 +37,14 @@ fn Var() { // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %Let.type: type = fn_type @Let [concrete] // CHECK:STDOUT: %Let: %Let.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.b67: type = tuple_type (%X, %X) [concrete] +// CHECK:STDOUT: %pattern_type.bb7: type = pattern_type %tuple.type.b67 [concrete] // CHECK:STDOUT: %Var.type: type = fn_type @Var [concrete] // CHECK:STDOUT: %Var: %Var.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -64,8 +66,8 @@ fn Var() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %X = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %X = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.019 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.019 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %return.param: ref %X = out_param call_param0 @@ -89,7 +91,7 @@ fn Var() { // CHECK:STDOUT: fn @Let() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.b67 = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.bb7 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %Make.ref.loc12_20: %Make.type = name_ref Make, file.%Make.decl [concrete = constants.%Make] // CHECK:STDOUT: %.loc12_25.1: ref %X = temporary_storage @@ -121,8 +123,8 @@ fn Var() { // CHECK:STDOUT: fn @Var() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %tuple.type.b67 = binding_pattern b -// CHECK:STDOUT: %.loc17_3.1: %tuple.type.b67 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.bb7 = binding_pattern b +// CHECK:STDOUT: %.loc17_3.1: %pattern_type.bb7 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.b67 = var b // CHECK:STDOUT: %Make.ref.loc17_20: %Make.type = name_ref Make, file.%Make.decl [concrete = constants.%Make] diff --git a/toolchain/check/testdata/as/overloaded.carbon b/toolchain/check/testdata/as/overloaded.carbon index 8c7573a17f5a..ef685a7aa294 100644 --- a/toolchain/check/testdata/as/overloaded.carbon +++ b/toolchain/check/testdata/as/overloaded.carbon @@ -36,6 +36,8 @@ let n: i32 = ((4 as i32) as X) as i32; // CHECK:STDOUT: %As.type.602: type = facet_type <@As, @As(%X)> [concrete] // CHECK:STDOUT: %Convert.type.35b: type = fn_type @Convert.1, @As(%X) [concrete] // CHECK:STDOUT: %As.impl_witness.cf1: = impl_witness file.%As.impl_witness_table.loc15 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %Convert.type.0e3: type = fn_type @Convert.2 [concrete] // CHECK:STDOUT: %Convert.311: %Convert.type.0e3 = struct_value () [concrete] // CHECK:STDOUT: %As.facet.f77: %As.type.602 = facet_value %i32, (%As.impl_witness.cf1) [concrete] @@ -100,7 +102,7 @@ let n: i32 = ((4 as i32) as X) as i32; // CHECK:STDOUT: %As.impl_witness_table.loc19 = impl_witness_table (@impl.18a.%Convert.decl), @impl.18a [concrete] // CHECK:STDOUT: %As.impl_witness.loc19: = impl_witness %As.impl_witness_table.loc19 [concrete = constants.%As.impl_witness.031] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %.loc23: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -111,10 +113,10 @@ let n: i32 = ((4 as i32) as X) as i32; // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.d8c: %i32 as %As.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.0e3 = fn_decl @Convert.2 [concrete = constants.%Convert.311] { -// CHECK:STDOUT: %self.patt: %i32 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %i32 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %X = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %X = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.7ce = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.7ce = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.019 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.019 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %self.param: %i32 = value_param call_param0 @@ -135,10 +137,10 @@ let n: i32 = ((4 as i32) as X) as i32; // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.18a: %X.ref as %As.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.c23 = fn_decl @Convert.3 [concrete = constants.%Convert.8bb] { -// CHECK:STDOUT: %self.patt: %X = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %X = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.019 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.019 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/basics/builtin_types.carbon b/toolchain/check/testdata/basics/builtin_types.carbon index f7472b489743..c43ea9ffa595 100644 --- a/toolchain/check/testdata/basics/builtin_types.carbon +++ b/toolchain/check/testdata/basics/builtin_types.carbon @@ -18,7 +18,9 @@ var test_type: type = i32; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.a2f = impl_witness_table (imports.%Core.import_ref.a5b), @impl.4f9 [concrete] @@ -34,7 +36,9 @@ var test_type: type = i32; // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %float: f64 = float_literal 0.10000000000000001 [concrete] +// CHECK:STDOUT: %pattern_type.b05: type = pattern_type String [concrete] // CHECK:STDOUT: %str: String = string_literal "Test" [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -58,8 +62,8 @@ var test_type: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_i32.patt: %i32 = binding_pattern test_i32 -// CHECK:STDOUT: %.loc11_1: %i32 = var_pattern %test_i32.patt +// CHECK:STDOUT: %test_i32.patt: %pattern_type.7ce = binding_pattern test_i32 +// CHECK:STDOUT: %.loc11_1: %pattern_type.7ce = var_pattern %test_i32.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_i32.var: ref %i32 = var test_i32 // CHECK:STDOUT: %.loc11_15: type = splice_block %i32 [concrete = constants.%i32] { @@ -68,8 +72,8 @@ var test_type: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: %test_i32: ref %i32 = bind_name test_i32, %test_i32.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_f64.patt: f64 = binding_pattern test_f64 -// CHECK:STDOUT: %.loc12_1: f64 = var_pattern %test_f64.patt +// CHECK:STDOUT: %test_f64.patt: %pattern_type.3de = binding_pattern test_f64 +// CHECK:STDOUT: %.loc12_1: %pattern_type.3de = var_pattern %test_f64.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_f64.var: ref f64 = var test_f64 // CHECK:STDOUT: %.loc12_15.1: type = splice_block %.loc12_15.3 [concrete = f64] { @@ -80,12 +84,12 @@ var test_type: type = i32; // CHECK:STDOUT: } // CHECK:STDOUT: %test_f64: ref f64 = bind_name test_f64, %test_f64.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_str.patt: String = binding_pattern test_str +// CHECK:STDOUT: %test_str.patt: %pattern_type.b05 = binding_pattern test_str // CHECK:STDOUT: } // CHECK:STDOUT: %test_str: String = bind_name test_str, @__global_init.%str // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_type.patt: type = binding_pattern test_type -// CHECK:STDOUT: %.loc14: type = var_pattern %test_type.patt +// CHECK:STDOUT: %test_type.patt: %pattern_type.98f = binding_pattern test_type +// CHECK:STDOUT: %.loc14: %pattern_type.98f = var_pattern %test_type.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_type.var: ref type = var test_type // CHECK:STDOUT: %test_type: ref type = bind_name test_type, %test_type.var diff --git a/toolchain/check/testdata/basics/fail_bad_run.carbon b/toolchain/check/testdata/basics/fail_bad_run.carbon index 32a361f34717..acd65b42bcac 100644 --- a/toolchain/check/testdata/basics/fail_bad_run.carbon +++ b/toolchain/check/testdata/basics/fail_bad_run.carbon @@ -21,6 +21,7 @@ fn Run() -> String {} // CHECK:STDOUT: --- fail_bad_run.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.b05: type = pattern_type String [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -42,8 +43,8 @@ fn Run() -> String {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %return.patt: String = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: String = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.b05 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.b05 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref String = out_param call_param0 // CHECK:STDOUT: %return: ref String = return_slot %return.param diff --git a/toolchain/check/testdata/basics/fail_bad_run_2.carbon b/toolchain/check/testdata/basics/fail_bad_run_2.carbon index 167573e980b7..f579f21c26f4 100644 --- a/toolchain/check/testdata/basics/fail_bad_run_2.carbon +++ b/toolchain/check/testdata/basics/fail_bad_run_2.carbon @@ -19,6 +19,7 @@ fn Run(n: i32) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -38,8 +39,8 @@ fn Run(n: i32) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc15: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/basics/fail_non_type_as_type.carbon b/toolchain/check/testdata/basics/fail_non_type_as_type.carbon index c568e67a35ee..5b3f29940323 100644 --- a/toolchain/check/testdata/basics/fail_non_type_as_type.carbon +++ b/toolchain/check/testdata/basics/fail_non_type_as_type.carbon @@ -20,6 +20,7 @@ var x: type = 42; // CHECK:STDOUT: --- fail_non_type_as_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -38,8 +39,8 @@ var x: type = 42; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: type = binding_pattern x -// CHECK:STDOUT: %.loc18: type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.98f = binding_pattern x +// CHECK:STDOUT: %.loc18: %pattern_type.98f = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref type = var x // CHECK:STDOUT: %x: ref type = bind_name x, %x.var diff --git a/toolchain/check/testdata/basics/fail_numeric_literal_overflow.carbon b/toolchain/check/testdata/basics/fail_numeric_literal_overflow.carbon index 48783b4666b9..29ddf7ebbbe5 100644 --- a/toolchain/check/testdata/basics/fail_numeric_literal_overflow.carbon +++ b/toolchain/check/testdata/basics/fail_numeric_literal_overflow.carbon @@ -43,6 +43,7 @@ let e: f64 = 5.0e39999999999999999993; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_39999999999999999993.af6: Core.IntLiteral = int_value 39999999999999999993 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -63,6 +64,7 @@ let e: f64 = 5.0e39999999999999999993; // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -86,7 +88,7 @@ let e: f64 = 5.0e39999999999999999993; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15_8: type = splice_block %i32.loc15 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -101,7 +103,7 @@ let e: f64 = 5.0e39999999999999999993; // CHECK:STDOUT: %.loc15_14.2: %i32 = converted @__global_init.%int_39999999999999999993, %.loc15_14.1 [concrete = constants.%int_39999999999999999993.dee] // CHECK:STDOUT: %a: %i32 = bind_name a, %.loc15_14.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %.loc21_8: type = splice_block %i32.loc21 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -116,7 +118,7 @@ let e: f64 = 5.0e39999999999999999993; // CHECK:STDOUT: %.loc21_14.2: %i32 = converted @__global_init.%int_2147483648.loc21, %.loc21_14.1 [concrete = constants.%int_2147483648.8df] // CHECK:STDOUT: %b: %i32 = bind_name b, %.loc21_14.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %.loc27_8: type = splice_block %i32.loc27 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -131,7 +133,7 @@ let e: f64 = 5.0e39999999999999999993; // CHECK:STDOUT: %.loc27_14.2: %i32 = converted @__global_init.%int_2147483648.loc27, %.loc27_14.1 [concrete = constants.%int_2147483648.8df] // CHECK:STDOUT: %c: %i32 = bind_name c, %.loc27_14.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: f64 = binding_pattern d +// CHECK:STDOUT: %d.patt: %pattern_type.3de = binding_pattern d // CHECK:STDOUT: } // CHECK:STDOUT: %.loc33_8.1: type = splice_block %.loc33_8.3 [concrete = f64] { // CHECK:STDOUT: %int_64.loc33: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] @@ -141,7 +143,7 @@ let e: f64 = 5.0e39999999999999999993; // CHECK:STDOUT: } // CHECK:STDOUT: %d: f64 = bind_name d, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: f64 = binding_pattern e +// CHECK:STDOUT: %e.patt: %pattern_type.3de = binding_pattern e // CHECK:STDOUT: } // CHECK:STDOUT: %.loc39_8.1: type = splice_block %.loc39_8.3 [concrete = f64] { // CHECK:STDOUT: %int_64.loc39: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] diff --git a/toolchain/check/testdata/basics/no_prelude/raw_identifier.carbon b/toolchain/check/testdata/basics/no_prelude/raw_identifier.carbon index 310c039ae217..ec90bee52c7b 100644 --- a/toolchain/check/testdata/basics/no_prelude/raw_identifier.carbon +++ b/toolchain/check/testdata/basics/no_prelude/raw_identifier.carbon @@ -24,6 +24,7 @@ fn C(r#if: ()) -> () { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] @@ -39,10 +40,10 @@ fn C(r#if: ()) -> () { // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %n.patt: %empty_tuple.type = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %empty_tuple.type = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_17.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc11_17.2: type = converted %.loc11_17.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -56,10 +57,10 @@ fn C(r#if: ()) -> () { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %n.patt: %empty_tuple.type = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %empty_tuple.type = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_19.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc15_19.2: type = converted %.loc15_19.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -73,10 +74,10 @@ fn C(r#if: ()) -> () { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %if.patt: %empty_tuple.type = binding_pattern r#if -// CHECK:STDOUT: %if.param_patt: %empty_tuple.type = value_param_pattern %if.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %if.patt: %pattern_type = binding_pattern r#if +// CHECK:STDOUT: %if.param_patt: %pattern_type = value_param_pattern %if.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19_20.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc19_20.2: type = converted %.loc19_20.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/basics/numeric_literals.carbon b/toolchain/check/testdata/basics/numeric_literals.carbon index 089ab7ace9bc..0755b20ad72a 100644 --- a/toolchain/check/testdata/basics/numeric_literals.carbon +++ b/toolchain/check/testdata/basics/numeric_literals.carbon @@ -38,6 +38,7 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_6: Core.IntLiteral = int_value 6 [concrete] // CHECK:STDOUT: %array_type.d49: type = array_type %int_6, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.0c8: type = pattern_type %array_type.d49 [concrete] // CHECK:STDOUT: %int_8.b85: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %int_9.988: Core.IntLiteral = int_value 9 [concrete] // CHECK:STDOUT: %int_2147483647.d89: Core.IntLiteral = int_value 2147483647 [concrete] @@ -71,6 +72,7 @@ fn F() { // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] // CHECK:STDOUT: %array_type.72b: type = array_type %int_6, f64 [concrete] +// CHECK:STDOUT: %pattern_type.601: type = pattern_type %array_type.72b [concrete] // CHECK:STDOUT: %float.952: f64 = float_literal 0.90000000000000002 [concrete] // CHECK:STDOUT: %float.298: f64 = float_literal 8 [concrete] // CHECK:STDOUT: %float.dcb: f64 = float_literal 80 [concrete] @@ -103,8 +105,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ints.patt: %array_type.d49 = binding_pattern ints -// CHECK:STDOUT: %.loc14_3.1: %array_type.d49 = var_pattern %ints.patt +// CHECK:STDOUT: %ints.patt: %pattern_type.0c8 = binding_pattern ints +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.0c8 = var_pattern %ints.patt // CHECK:STDOUT: } // CHECK:STDOUT: %ints.var: ref %array_type.d49 = var ints // CHECK:STDOUT: %int_8.loc15: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] @@ -179,8 +181,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %ints: ref %array_type.d49 = bind_name ints, %ints.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %floats.patt: %array_type.72b = binding_pattern floats -// CHECK:STDOUT: %.loc22_3.1: %array_type.72b = var_pattern %floats.patt +// CHECK:STDOUT: %floats.patt: %pattern_type.601 = binding_pattern floats +// CHECK:STDOUT: %.loc22_3.1: %pattern_type.601 = var_pattern %floats.patt // CHECK:STDOUT: } // CHECK:STDOUT: %floats.var: ref %array_type.72b = var floats // CHECK:STDOUT: %float.loc23: f64 = float_literal 0.90000000000000002 [concrete = constants.%float.952] diff --git a/toolchain/check/testdata/basics/parens.carbon b/toolchain/check/testdata/basics/parens.carbon index 600574ecfdfc..faef52d8fa89 100644 --- a/toolchain/check/testdata/basics/parens.carbon +++ b/toolchain/check/testdata/basics/parens.carbon @@ -16,6 +16,7 @@ var b: i32 = ((2)); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -52,8 +53,8 @@ var b: i32 = ((2)); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc11_8: type = splice_block %i32.loc11 [concrete = constants.%i32] { @@ -62,8 +63,8 @@ var b: i32 = ((2)); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %i32 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc12_8: type = splice_block %i32.loc12 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/basics/run_i32.carbon b/toolchain/check/testdata/basics/run_i32.carbon index 2a86a23ff919..73078ec620b4 100644 --- a/toolchain/check/testdata/basics/run_i32.carbon +++ b/toolchain/check/testdata/basics/run_i32.carbon @@ -15,6 +15,7 @@ fn Run() -> i32 { return 0; } // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -48,8 +49,8 @@ fn Run() -> i32 { return 0; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/basics/type_literals.carbon b/toolchain/check/testdata/basics/type_literals.carbon index 9402419346fe..e5ed794b503b 100644 --- a/toolchain/check/testdata/basics/type_literals.carbon +++ b/toolchain/check/testdata/basics/type_literals.carbon @@ -131,10 +131,13 @@ var test_f128: f128; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %i8: type = class_type @Int, @Int(%int_8) [concrete] +// CHECK:STDOUT: %pattern_type.e3f: type = pattern_type %i8 [concrete] // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %i16: type = class_type @Int, @Int(%int_16) [concrete] +// CHECK:STDOUT: %pattern_type.2f8: type = pattern_type %i16 [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] +// CHECK:STDOUT: %pattern_type.95b: type = pattern_type %i64 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -154,8 +157,8 @@ var test_f128: f128; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_i8.patt: %i8 = binding_pattern test_i8 -// CHECK:STDOUT: %.loc3_1: %i8 = var_pattern %test_i8.patt +// CHECK:STDOUT: %test_i8.patt: %pattern_type.e3f = binding_pattern test_i8 +// CHECK:STDOUT: %.loc3_1: %pattern_type.e3f = var_pattern %test_i8.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_i8.var: ref %i8 = var test_i8 // CHECK:STDOUT: %.loc3_14: type = splice_block %i8 [concrete = constants.%i8] { @@ -164,8 +167,8 @@ var test_f128: f128; // CHECK:STDOUT: } // CHECK:STDOUT: %test_i8: ref %i8 = bind_name test_i8, %test_i8.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_i16.patt: %i16 = binding_pattern test_i16 -// CHECK:STDOUT: %.loc4_1: %i16 = var_pattern %test_i16.patt +// CHECK:STDOUT: %test_i16.patt: %pattern_type.2f8 = binding_pattern test_i16 +// CHECK:STDOUT: %.loc4_1: %pattern_type.2f8 = var_pattern %test_i16.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_i16.var: ref %i16 = var test_i16 // CHECK:STDOUT: %.loc4_15: type = splice_block %i16 [concrete = constants.%i16] { @@ -174,8 +177,8 @@ var test_f128: f128; // CHECK:STDOUT: } // CHECK:STDOUT: %test_i16: ref %i16 = bind_name test_i16, %test_i16.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_i64.patt: %i64 = binding_pattern test_i64 -// CHECK:STDOUT: %.loc5_1: %i64 = var_pattern %test_i64.patt +// CHECK:STDOUT: %test_i64.patt: %pattern_type.95b = binding_pattern test_i64 +// CHECK:STDOUT: %.loc5_1: %pattern_type.95b = var_pattern %test_i64.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_i64.var: ref %i64 = var test_i64 // CHECK:STDOUT: %.loc5_15: type = splice_block %i64 [concrete = constants.%i64] { @@ -197,10 +200,13 @@ var test_f128: f128; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %u8: type = class_type @UInt, @UInt(%int_8) [concrete] +// CHECK:STDOUT: %pattern_type.8f3: type = pattern_type %u8 [concrete] // CHECK:STDOUT: %int_16: Core.IntLiteral = int_value 16 [concrete] // CHECK:STDOUT: %u16: type = class_type @UInt, @UInt(%int_16) [concrete] +// CHECK:STDOUT: %pattern_type.9db: type = pattern_type %u16 [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %u64: type = class_type @UInt, @UInt(%int_64) [concrete] +// CHECK:STDOUT: %pattern_type.157: type = pattern_type %u64 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -220,8 +226,8 @@ var test_f128: f128; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_u8.patt: %u8 = binding_pattern test_u8 -// CHECK:STDOUT: %.loc3_1: %u8 = var_pattern %test_u8.patt +// CHECK:STDOUT: %test_u8.patt: %pattern_type.8f3 = binding_pattern test_u8 +// CHECK:STDOUT: %.loc3_1: %pattern_type.8f3 = var_pattern %test_u8.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_u8.var: ref %u8 = var test_u8 // CHECK:STDOUT: %.loc3_14: type = splice_block %u8 [concrete = constants.%u8] { @@ -230,8 +236,8 @@ var test_f128: f128; // CHECK:STDOUT: } // CHECK:STDOUT: %test_u8: ref %u8 = bind_name test_u8, %test_u8.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_u16.patt: %u16 = binding_pattern test_u16 -// CHECK:STDOUT: %.loc4_1: %u16 = var_pattern %test_u16.patt +// CHECK:STDOUT: %test_u16.patt: %pattern_type.9db = binding_pattern test_u16 +// CHECK:STDOUT: %.loc4_1: %pattern_type.9db = var_pattern %test_u16.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_u16.var: ref %u16 = var test_u16 // CHECK:STDOUT: %.loc4_15: type = splice_block %u16 [concrete = constants.%u16] { @@ -240,8 +246,8 @@ var test_f128: f128; // CHECK:STDOUT: } // CHECK:STDOUT: %test_u16: ref %u16 = bind_name test_u16, %test_u16.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %test_u64.patt: %u64 = binding_pattern test_u64 -// CHECK:STDOUT: %.loc5_1: %u64 = var_pattern %test_u64.patt +// CHECK:STDOUT: %test_u64.patt: %pattern_type.157 = binding_pattern test_u64 +// CHECK:STDOUT: %.loc5_1: %pattern_type.157 = var_pattern %test_u64.patt // CHECK:STDOUT: } // CHECK:STDOUT: %test_u64.var: ref %u64 = var test_u64 // CHECK:STDOUT: %.loc5_15: type = splice_block %u64 [concrete = constants.%u64] { diff --git a/toolchain/check/testdata/builtins/bool/eq.carbon b/toolchain/check/testdata/builtins/bool/eq.carbon index 343dca391bbf..97513a0599df 100644 --- a/toolchain/check/testdata/builtins/bool/eq.carbon +++ b/toolchain/check/testdata/builtins/bool/eq.carbon @@ -43,10 +43,11 @@ var d: C(false == false) = True(); // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Eq.type: type = fn_type @Eq [concrete] // CHECK:STDOUT: %Eq: %Eq.type = struct_value () [concrete] // CHECK:STDOUT: %B: bool = bind_symbolic_name B, 0 [symbolic] -// CHECK:STDOUT: %B.patt: bool = symbolic_binding_pattern B, 0 [symbolic] +// CHECK:STDOUT: %B.patt: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.342: type = class_type @C, @C(%B) [symbolic] @@ -54,10 +55,12 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %C.a14: type = class_type @C, @C(%true) [concrete] +// CHECK:STDOUT: %pattern_type.cc5: type = pattern_type %C.a14 [concrete] // CHECK:STDOUT: %True.type: type = fn_type @True [concrete] // CHECK:STDOUT: %True: %True.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %C.2ba: type = class_type @C, @C(%false) [concrete] +// CHECK:STDOUT: %pattern_type.d8f: type = pattern_type %C.2ba [concrete] // CHECK:STDOUT: %False.type: type = fn_type @False [concrete] // CHECK:STDOUT: %False: %False.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -84,12 +87,12 @@ var d: C(false == false) = True(); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Eq.decl: %Eq.type = fn_decl @Eq [concrete = constants.%Eq] { -// CHECK:STDOUT: %a.patt: bool = binding_pattern a -// CHECK:STDOUT: %a.param_patt: bool = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.831 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.831 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc4_28: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc4_28.1: type = value_of_initializer %bool.make_type.loc4_28 [concrete = bool] @@ -112,7 +115,7 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %B.patt.loc6_9.1: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc6_9.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc6_9.1: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc6_9.2 (constants.%B.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.3 [concrete = bool] { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] @@ -122,8 +125,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %B.loc6_9.1: bool = bind_symbolic_name B, 0 [symbolic = %B.loc6_9.2 (constants.%B)] // CHECK:STDOUT: } // CHECK:STDOUT: %True.decl: %True.type = fn_decl @True [concrete = constants.%True] { -// CHECK:STDOUT: %return.patt: %C.a14 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.a14 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cc5 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cc5 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true] @@ -132,8 +135,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %return: ref %C.a14 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %False.decl: %False.type = fn_decl @False [concrete = constants.%False] { -// CHECK:STDOUT: %return.patt: %C.2ba = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.2ba = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.d8f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false] @@ -142,8 +145,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %return: ref %C.2ba = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C.a14 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %C.a14 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cc5 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.cc5 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C.a14 = var a // CHECK:STDOUT: %.loc11_24.1: type = splice_block %C.loc11 [concrete = constants.%C.a14] { @@ -158,8 +161,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %C.a14 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %C.2ba = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %C.2ba = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.d8f = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.d8f = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %C.2ba = var b // CHECK:STDOUT: %.loc12_25.1: type = splice_block %C.loc12 [concrete = constants.%C.2ba] { @@ -174,8 +177,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %C.2ba = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C.2ba = binding_pattern c -// CHECK:STDOUT: %.loc13_1: %C.2ba = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.d8f = binding_pattern c +// CHECK:STDOUT: %.loc13_1: %pattern_type.d8f = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.2ba = var c // CHECK:STDOUT: %.loc13_25.1: type = splice_block %C.loc13 [concrete = constants.%C.2ba] { @@ -190,8 +193,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %C.2ba = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %C.a14 = binding_pattern d -// CHECK:STDOUT: %.loc14_1: %C.a14 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cc5 = binding_pattern d +// CHECK:STDOUT: %.loc14_1: %pattern_type.cc5 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %C.a14 = var d // CHECK:STDOUT: %.loc14_26.1: type = splice_block %C.loc14 [concrete = constants.%C.a14] { @@ -209,7 +212,7 @@ var d: C(false == false) = True(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%B.loc6_9.1: bool) { // CHECK:STDOUT: %B.loc6_9.2: bool = bind_symbolic_name B, 0 [symbolic = %B.loc6_9.2 (constants.%B)] -// CHECK:STDOUT: %B.patt.loc6_9.2: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc6_9.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc6_9.2: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc6_9.2 (constants.%B.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -275,7 +278,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %B: bool = bind_symbolic_name B, 0 [symbolic] -// CHECK:STDOUT: %B.patt: bool = symbolic_binding_pattern B, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %B.patt: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.342: type = class_type @C, @C(%B) [symbolic] @@ -283,10 +287,12 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %C.a14: type = class_type @C, @C(%true) [concrete] +// CHECK:STDOUT: %pattern_type.cc5: type = pattern_type %C.a14 [concrete] // CHECK:STDOUT: %True.type: type = fn_type @True [concrete] // CHECK:STDOUT: %True: %True.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %C.2ba: type = class_type @C, @C(%false) [concrete] +// CHECK:STDOUT: %pattern_type.d8f: type = pattern_type %C.2ba [concrete] // CHECK:STDOUT: %False.type: type = fn_type @False [concrete] // CHECK:STDOUT: %False: %False.type = struct_value () [concrete] // CHECK:STDOUT: %Eq.type: type = facet_type <@Eq> [concrete] @@ -323,7 +329,7 @@ var d: C(false == false) = True(); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %B.patt.loc4_9.1: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_9.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc4_9.1: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_9.2 (constants.%B.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.3 [concrete = bool] { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] @@ -333,8 +339,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %B.loc4_9.1: bool = bind_symbolic_name B, 0 [symbolic = %B.loc4_9.2 (constants.%B)] // CHECK:STDOUT: } // CHECK:STDOUT: %True.decl: %True.type = fn_decl @True [concrete = constants.%True] { -// CHECK:STDOUT: %return.patt: %C.a14 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.a14 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cc5 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cc5 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true] @@ -343,8 +349,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %return: ref %C.a14 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %False.decl: %False.type = fn_decl @False [concrete = constants.%False] { -// CHECK:STDOUT: %return.patt: %C.2ba = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.2ba = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.d8f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false] @@ -353,8 +359,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: %return: ref %C.2ba = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C.a14 = binding_pattern a -// CHECK:STDOUT: %.loc9_1: %C.a14 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cc5 = binding_pattern a +// CHECK:STDOUT: %.loc9_1: %pattern_type.cc5 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C.a14 = var a // CHECK:STDOUT: %.loc9_22.1: type = splice_block %C.loc9 [concrete = constants.%C.a14] { @@ -370,8 +376,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %C.a14 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %C.2ba = binding_pattern b -// CHECK:STDOUT: %.loc10_1: %C.2ba = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.d8f = binding_pattern b +// CHECK:STDOUT: %.loc10_1: %pattern_type.d8f = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %C.2ba = var b // CHECK:STDOUT: %.loc10_23.1: type = splice_block %C.loc10 [concrete = constants.%C.2ba] { @@ -387,8 +393,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %C.2ba = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C.2ba = binding_pattern c -// CHECK:STDOUT: %.loc11_1: %C.2ba = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.d8f = binding_pattern c +// CHECK:STDOUT: %.loc11_1: %pattern_type.d8f = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.2ba = var c // CHECK:STDOUT: %.loc11_23.1: type = splice_block %C.loc11 [concrete = constants.%C.2ba] { @@ -404,8 +410,8 @@ var d: C(false == false) = True(); // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %C.2ba = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %C.a14 = binding_pattern d -// CHECK:STDOUT: %.loc12_1: %C.a14 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cc5 = binding_pattern d +// CHECK:STDOUT: %.loc12_1: %pattern_type.cc5 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %C.a14 = var d // CHECK:STDOUT: %.loc12_24.1: type = splice_block %C.loc12 [concrete = constants.%C.a14] { @@ -424,7 +430,7 @@ var d: C(false == false) = True(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%B.loc4_9.1: bool) { // CHECK:STDOUT: %B.loc4_9.2: bool = bind_symbolic_name B, 0 [symbolic = %B.loc4_9.2 (constants.%B)] -// CHECK:STDOUT: %B.patt.loc4_9.2: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_9.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc4_9.2: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_9.2 (constants.%B.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/bool/make_type.carbon b/toolchain/check/testdata/builtins/bool/make_type.carbon index 30e14e714971..10ae55ff745f 100644 --- a/toolchain/check/testdata/builtins/bool/make_type.carbon +++ b/toolchain/check/testdata/builtins/bool/make_type.carbon @@ -25,6 +25,7 @@ var b: Bool() = false; // CHECK:STDOUT: --- types.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -43,8 +44,8 @@ var b: Bool() = false; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Bool.decl: %Bool.type = fn_decl @Bool [concrete = constants.%Bool] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param @@ -58,6 +59,7 @@ var b: Bool() = false; // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -78,8 +80,8 @@ var b: Bool() = false; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %.loc6_1: bool = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %.loc6_1: %pattern_type.831 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref bool = var b // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.3 [concrete = bool] { diff --git a/toolchain/check/testdata/builtins/bool/neq.carbon b/toolchain/check/testdata/builtins/bool/neq.carbon index 5beca57ba4d2..1602ce209447 100644 --- a/toolchain/check/testdata/builtins/bool/neq.carbon +++ b/toolchain/check/testdata/builtins/bool/neq.carbon @@ -43,10 +43,11 @@ var d: C(false != false) = False(); // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Neq.type: type = fn_type @Neq [concrete] // CHECK:STDOUT: %Neq: %Neq.type = struct_value () [concrete] // CHECK:STDOUT: %B: bool = bind_symbolic_name B, 0 [symbolic] -// CHECK:STDOUT: %B.patt: bool = symbolic_binding_pattern B, 0 [symbolic] +// CHECK:STDOUT: %B.patt: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.342: type = class_type @C, @C(%B) [symbolic] @@ -54,10 +55,12 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %C.a14: type = class_type @C, @C(%true) [concrete] +// CHECK:STDOUT: %pattern_type.cc5: type = pattern_type %C.a14 [concrete] // CHECK:STDOUT: %True.type: type = fn_type @True [concrete] // CHECK:STDOUT: %True: %True.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %C.2ba: type = class_type @C, @C(%false) [concrete] +// CHECK:STDOUT: %pattern_type.d8f: type = pattern_type %C.2ba [concrete] // CHECK:STDOUT: %False.type: type = fn_type @False [concrete] // CHECK:STDOUT: %False: %False.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -84,12 +87,12 @@ var d: C(false != false) = False(); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Neq.decl: %Neq.type = fn_decl @Neq [concrete = constants.%Neq] { -// CHECK:STDOUT: %a.patt: bool = binding_pattern a -// CHECK:STDOUT: %a.param_patt: bool = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.831 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.831 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc4_29: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc4_29.1: type = value_of_initializer %bool.make_type.loc4_29 [concrete = bool] @@ -112,7 +115,7 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %B.patt.loc6_9.1: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc6_9.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc6_9.1: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc6_9.2 (constants.%B.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.3 [concrete = bool] { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] @@ -122,8 +125,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %B.loc6_9.1: bool = bind_symbolic_name B, 0 [symbolic = %B.loc6_9.2 (constants.%B)] // CHECK:STDOUT: } // CHECK:STDOUT: %True.decl: %True.type = fn_decl @True [concrete = constants.%True] { -// CHECK:STDOUT: %return.patt: %C.a14 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.a14 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cc5 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cc5 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true] @@ -132,8 +135,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %return: ref %C.a14 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %False.decl: %False.type = fn_decl @False [concrete = constants.%False] { -// CHECK:STDOUT: %return.patt: %C.2ba = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.2ba = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.d8f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false] @@ -142,8 +145,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %return: ref %C.2ba = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C.2ba = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %C.2ba = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.d8f = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.d8f = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C.2ba = var a // CHECK:STDOUT: %.loc11_25.1: type = splice_block %C.loc11 [concrete = constants.%C.2ba] { @@ -158,8 +161,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %C.2ba = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %C.a14 = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %C.a14 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.cc5 = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.cc5 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %C.a14 = var b // CHECK:STDOUT: %.loc12_26.1: type = splice_block %C.loc12 [concrete = constants.%C.a14] { @@ -174,8 +177,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %C.a14 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C.a14 = binding_pattern c -// CHECK:STDOUT: %.loc13_1: %C.a14 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.cc5 = binding_pattern c +// CHECK:STDOUT: %.loc13_1: %pattern_type.cc5 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.a14 = var c // CHECK:STDOUT: %.loc13_26.1: type = splice_block %C.loc13 [concrete = constants.%C.a14] { @@ -190,8 +193,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %C.a14 = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %C.2ba = binding_pattern d -// CHECK:STDOUT: %.loc14_1: %C.2ba = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.d8f = binding_pattern d +// CHECK:STDOUT: %.loc14_1: %pattern_type.d8f = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %C.2ba = var d // CHECK:STDOUT: %.loc14_27.1: type = splice_block %C.loc14 [concrete = constants.%C.2ba] { @@ -209,7 +212,7 @@ var d: C(false != false) = False(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%B.loc6_9.1: bool) { // CHECK:STDOUT: %B.loc6_9.2: bool = bind_symbolic_name B, 0 [symbolic = %B.loc6_9.2 (constants.%B)] -// CHECK:STDOUT: %B.patt.loc6_9.2: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc6_9.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc6_9.2: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc6_9.2 (constants.%B.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -275,7 +278,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %B: bool = bind_symbolic_name B, 0 [symbolic] -// CHECK:STDOUT: %B.patt: bool = symbolic_binding_pattern B, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] +// CHECK:STDOUT: %B.patt: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.342: type = class_type @C, @C(%B) [symbolic] @@ -283,10 +287,12 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %C.a14: type = class_type @C, @C(%true) [concrete] +// CHECK:STDOUT: %pattern_type.cc5: type = pattern_type %C.a14 [concrete] // CHECK:STDOUT: %True.type: type = fn_type @True [concrete] // CHECK:STDOUT: %True: %True.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %C.2ba: type = class_type @C, @C(%false) [concrete] +// CHECK:STDOUT: %pattern_type.d8f: type = pattern_type %C.2ba [concrete] // CHECK:STDOUT: %False.type: type = fn_type @False [concrete] // CHECK:STDOUT: %False: %False.type = struct_value () [concrete] // CHECK:STDOUT: %Eq.type: type = facet_type <@Eq> [concrete] @@ -323,7 +329,7 @@ var d: C(false != false) = False(); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %B.patt.loc4_9.1: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_9.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc4_9.1: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_9.2 (constants.%B.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.3 [concrete = bool] { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] @@ -333,8 +339,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %B.loc4_9.1: bool = bind_symbolic_name B, 0 [symbolic = %B.loc4_9.2 (constants.%B)] // CHECK:STDOUT: } // CHECK:STDOUT: %True.decl: %True.type = fn_decl @True [concrete = constants.%True] { -// CHECK:STDOUT: %return.patt: %C.a14 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.a14 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cc5 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cc5 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true] @@ -343,8 +349,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %return: ref %C.a14 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %False.decl: %False.type = fn_decl @False [concrete = constants.%False] { -// CHECK:STDOUT: %return.patt: %C.2ba = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.2ba = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.d8f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.d8f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false] @@ -353,8 +359,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: %return: ref %C.2ba = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C.2ba = binding_pattern a -// CHECK:STDOUT: %.loc9_1: %C.2ba = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.d8f = binding_pattern a +// CHECK:STDOUT: %.loc9_1: %pattern_type.d8f = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C.2ba = var a // CHECK:STDOUT: %.loc9_22.1: type = splice_block %C.loc9 [concrete = constants.%C.2ba] { @@ -370,8 +376,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %C.2ba = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %C.a14 = binding_pattern b -// CHECK:STDOUT: %.loc10_1: %C.a14 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.cc5 = binding_pattern b +// CHECK:STDOUT: %.loc10_1: %pattern_type.cc5 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %C.a14 = var b // CHECK:STDOUT: %.loc10_23.1: type = splice_block %C.loc10 [concrete = constants.%C.a14] { @@ -387,8 +393,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %C.a14 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C.a14 = binding_pattern c -// CHECK:STDOUT: %.loc11_1: %C.a14 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.cc5 = binding_pattern c +// CHECK:STDOUT: %.loc11_1: %pattern_type.cc5 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.a14 = var c // CHECK:STDOUT: %.loc11_23.1: type = splice_block %C.loc11 [concrete = constants.%C.a14] { @@ -404,8 +410,8 @@ var d: C(false != false) = False(); // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %C.a14 = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %C.2ba = binding_pattern d -// CHECK:STDOUT: %.loc12_1: %C.2ba = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.d8f = binding_pattern d +// CHECK:STDOUT: %.loc12_1: %pattern_type.d8f = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %C.2ba = var d // CHECK:STDOUT: %.loc12_24.1: type = splice_block %C.loc12 [concrete = constants.%C.2ba] { @@ -424,7 +430,7 @@ var d: C(false != false) = False(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%B.loc4_9.1: bool) { // CHECK:STDOUT: %B.loc4_9.2: bool = bind_symbolic_name B, 0 [symbolic = %B.loc4_9.2 (constants.%B)] -// CHECK:STDOUT: %B.patt.loc4_9.2: bool = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_9.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc4_9.2: %pattern_type.831 = symbolic_binding_pattern B, 0 [symbolic = %B.patt.loc4_9.2 (constants.%B.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/builtins/float/add.carbon b/toolchain/check/testdata/builtins/float/add.carbon index da2fa92e35c8..30e0535c4b4d 100644 --- a/toolchain/check/testdata/builtins/float/add.carbon +++ b/toolchain/check/testdata/builtins/float/add.carbon @@ -57,6 +57,7 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Add.type: type = fn_type @Add [concrete] // CHECK:STDOUT: %Add: %Add.type = struct_value () [concrete] // CHECK:STDOUT: %RuntimeCallIsValid.type: type = fn_type @RuntimeCallIsValid [concrete] @@ -83,12 +84,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Add.decl: %Add.type = fn_decl @Add [concrete = constants.%Add] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc2_27: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc2_27: init type = call constants.%Float(%int_64.loc2_27) [concrete = f64] @@ -114,12 +115,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc4_42: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc4_42: init type = call constants.%Float(%int_64.loc4_42) [concrete = f64] @@ -145,8 +146,8 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: f64 = binding_pattern x -// CHECK:STDOUT: %.loc8_1: f64 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.3de = binding_pattern x +// CHECK:STDOUT: %.loc8_1: %pattern_type.3de = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref f64 = var x // CHECK:STDOUT: %.loc8_8.1: type = splice_block %.loc8_8.3 [concrete = f64] { @@ -187,12 +188,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %TooFew.type: type = fn_type @TooFew [concrete] // CHECK:STDOUT: %TooFew: %TooFew.type = struct_value () [concrete] // CHECK:STDOUT: %TooMany.type: type = fn_type @TooMany [concrete] // CHECK:STDOUT: %TooMany: %TooMany.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %BadReturnType.type: type = fn_type @BadReturnType [concrete] // CHECK:STDOUT: %BadReturnType: %BadReturnType.type = struct_value () [concrete] // CHECK:STDOUT: %JustRight.type: type = fn_type @JustRight [concrete] @@ -227,10 +230,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TooFew.decl: %TooFew.type = fn_decl @TooFew [concrete = constants.%TooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc8_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc8_22: init type = call constants.%Float(%int_64.loc8_22) [concrete = f64] @@ -248,14 +251,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TooMany.decl: %TooMany.type = fn_decl @TooMany [concrete = constants.%TooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc13_39: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc13_39: init type = call constants.%Float(%int_64.loc13_39) [concrete = f64] @@ -289,12 +292,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %BadReturnType.decl: %BadReturnType.type = fn_decl @BadReturnType [concrete = constants.%BadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc18_37.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -319,12 +322,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %JustRight.decl: %JustRight.type = fn_decl @JustRight [concrete = constants.%JustRight] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc19_33: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc19_33: init type = call constants.%Float(%int_64.loc19_33) [concrete = f64] @@ -350,10 +353,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooFew.decl: %RuntimeCallIsValidTooFew.type = fn_decl @RuntimeCallIsValidTooFew [concrete = constants.%RuntimeCallIsValidTooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc21_40: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc21_40: init type = call constants.%Float(%int_64.loc21_40) [concrete = f64] @@ -371,14 +374,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooMany.decl: %RuntimeCallIsValidTooMany.type = fn_decl @RuntimeCallIsValidTooMany [concrete = constants.%RuntimeCallIsValidTooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc25_57: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc25_57: init type = call constants.%Float(%int_64.loc25_57) [concrete = f64] @@ -412,12 +415,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidBadReturnType.decl: %RuntimeCallIsValidBadReturnType.type = fn_decl @RuntimeCallIsValidBadReturnType [concrete = constants.%RuntimeCallIsValidBadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc29_55.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/float/div.carbon b/toolchain/check/testdata/builtins/float/div.carbon index a97659e9fe3e..4fad62ac2f68 100644 --- a/toolchain/check/testdata/builtins/float/div.carbon +++ b/toolchain/check/testdata/builtins/float/div.carbon @@ -59,6 +59,7 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Div.type: type = fn_type @Div [concrete] // CHECK:STDOUT: %Div: %Div.type = struct_value () [concrete] // CHECK:STDOUT: %RuntimeCallIsValid.type: type = fn_type @RuntimeCallIsValid [concrete] @@ -91,12 +92,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Div.decl: %Div.type = fn_decl @Div [concrete = constants.%Div] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc2_27: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc2_27: init type = call constants.%Float(%int_64.loc2_27) [concrete = f64] @@ -122,12 +123,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc4_42: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc4_42: init type = call constants.%Float(%int_64.loc4_42) [concrete = f64] @@ -153,8 +154,8 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %.loc8_1: f64 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %.loc8_1: %pattern_type.3de = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref f64 = var a // CHECK:STDOUT: %.loc8_8.1: type = splice_block %.loc8_8.3 [concrete = f64] { @@ -165,7 +166,7 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref f64 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_8.1: type = splice_block %.loc9_8.3 [concrete = f64] { // CHECK:STDOUT: %int_64.loc9: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] @@ -177,7 +178,7 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %.loc9_26.2: ref f64 = temporary %.loc9_26.1, @__global_init.%float.div.loc9 // CHECK:STDOUT: %b: ref f64 = bind_name b, %.loc9_26.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_8.1: type = splice_block %.loc10_8.3 [concrete = f64] { // CHECK:STDOUT: %int_64.loc10: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] @@ -227,12 +228,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %TooFew.type: type = fn_type @TooFew [concrete] // CHECK:STDOUT: %TooFew: %TooFew.type = struct_value () [concrete] // CHECK:STDOUT: %TooMany.type: type = fn_type @TooMany [concrete] // CHECK:STDOUT: %TooMany: %TooMany.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %BadReturnType.type: type = fn_type @BadReturnType [concrete] // CHECK:STDOUT: %BadReturnType: %BadReturnType.type = struct_value () [concrete] // CHECK:STDOUT: %JustRight.type: type = fn_type @JustRight [concrete] @@ -267,10 +270,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TooFew.decl: %TooFew.type = fn_decl @TooFew [concrete = constants.%TooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc8_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc8_22: init type = call constants.%Float(%int_64.loc8_22) [concrete = f64] @@ -288,14 +291,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TooMany.decl: %TooMany.type = fn_decl @TooMany [concrete = constants.%TooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc13_39: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc13_39: init type = call constants.%Float(%int_64.loc13_39) [concrete = f64] @@ -329,12 +332,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %BadReturnType.decl: %BadReturnType.type = fn_decl @BadReturnType [concrete = constants.%BadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc18_37.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -359,12 +362,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %JustRight.decl: %JustRight.type = fn_decl @JustRight [concrete = constants.%JustRight] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc19_33: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc19_33: init type = call constants.%Float(%int_64.loc19_33) [concrete = f64] @@ -390,10 +393,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooFew.decl: %RuntimeCallIsValidTooFew.type = fn_decl @RuntimeCallIsValidTooFew [concrete = constants.%RuntimeCallIsValidTooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc21_40: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc21_40: init type = call constants.%Float(%int_64.loc21_40) [concrete = f64] @@ -411,14 +414,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooMany.decl: %RuntimeCallIsValidTooMany.type = fn_decl @RuntimeCallIsValidTooMany [concrete = constants.%RuntimeCallIsValidTooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc25_57: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc25_57: init type = call constants.%Float(%int_64.loc25_57) [concrete = f64] @@ -452,12 +455,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidBadReturnType.decl: %RuntimeCallIsValidBadReturnType.type = fn_decl @RuntimeCallIsValidBadReturnType [concrete = constants.%RuntimeCallIsValidBadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc29_55.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/float/eq.carbon b/toolchain/check/testdata/builtins/float/eq.carbon index a5cefe31cd23..6900dbab84cc 100644 --- a/toolchain/check/testdata/builtins/float/eq.carbon +++ b/toolchain/check/testdata/builtins/float/eq.carbon @@ -40,14 +40,18 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.eq"; // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Eq.type: type = fn_type @Eq [concrete] // CHECK:STDOUT: %Eq: %Eq.type = struct_value () [concrete] // CHECK:STDOUT: %True: type = class_type @True [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %False: type = class_type @False [concrete] +// CHECK:STDOUT: %pattern_type.efb: type = pattern_type %True [concrete] +// CHECK:STDOUT: %pattern_type.4cc: type = pattern_type %False [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %float.f4e: f64 = float_literal 1 [concrete] @@ -78,12 +82,12 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.eq"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Eq.decl: %Eq.type = fn_decl @Eq [concrete = constants.%Eq] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc2_26.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -110,10 +114,10 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.eq"; // CHECK:STDOUT: %True.decl: type = class_decl @True [concrete = constants.%True] {} {} // CHECK:STDOUT: %False.decl: type = class_decl @False [concrete = constants.%False] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %true_.patt: %True = binding_pattern true_ -// CHECK:STDOUT: %true_.param_patt: %True = value_param_pattern %true_.patt, call_param0 -// CHECK:STDOUT: %false_.patt: %False = binding_pattern false_ -// CHECK:STDOUT: %false_.param_patt: %False = value_param_pattern %false_.patt, call_param1 +// CHECK:STDOUT: %true_.patt: %pattern_type.efb = binding_pattern true_ +// CHECK:STDOUT: %true_.param_patt: %pattern_type.efb = value_param_pattern %true_.patt, call_param0 +// CHECK:STDOUT: %false_.patt: %pattern_type.4cc = binding_pattern false_ +// CHECK:STDOUT: %false_.param_patt: %pattern_type.4cc = value_param_pattern %false_.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %true_.param: %True = value_param call_param0 // CHECK:STDOUT: %True.ref.loc7: type = name_ref True, file.%True.decl [concrete = constants.%True] @@ -123,12 +127,12 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.eq"; // CHECK:STDOUT: %false_: %False = bind_name false_, %false_.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc12_42.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -234,6 +238,7 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.eq"; // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %WrongResult.type: type = fn_type @WrongResult [concrete] // CHECK:STDOUT: %WrongResult: %WrongResult.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -253,12 +258,12 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.eq"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %WrongResult.decl: %WrongResult.type = fn_decl @WrongResult [concrete = constants.%WrongResult] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc8_35: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc8_35: init type = call constants.%Float(%int_64.loc8_35) [concrete = f64] diff --git a/toolchain/check/testdata/builtins/float/greater.carbon b/toolchain/check/testdata/builtins/float/greater.carbon index ce284359b8f0..78a4f0f21d0f 100644 --- a/toolchain/check/testdata/builtins/float/greater.carbon +++ b/toolchain/check/testdata/builtins/float/greater.carbon @@ -34,8 +34,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Greater.type: type = fn_type @Greater [concrete] // CHECK:STDOUT: %Greater: %Greater.type = struct_value () [concrete] // CHECK:STDOUT: %Negate.type: type = fn_type @Negate [concrete] @@ -44,6 +46,8 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %False: type = class_type @False [concrete] +// CHECK:STDOUT: %pattern_type.efb: type = pattern_type %True [concrete] +// CHECK:STDOUT: %pattern_type.4cc: type = pattern_type %False [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %float.f4e: f64 = float_literal 1 [concrete] @@ -77,12 +81,12 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Greater.decl: %Greater.type = fn_decl @Greater [concrete = constants.%Greater] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc2_31.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -107,10 +111,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Negate.decl: %Negate.type = fn_decl @Negate [concrete = constants.%Negate] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc3_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc3_22: init type = call constants.%Float(%int_64.loc3_22) [concrete = f64] @@ -130,10 +134,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %True.decl: type = class_decl @True [concrete = constants.%True] {} {} // CHECK:STDOUT: %False.decl: type = class_decl @False [concrete = constants.%False] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %true_.patt: %True = binding_pattern true_ -// CHECK:STDOUT: %true_.param_patt: %True = value_param_pattern %true_.patt, call_param0 -// CHECK:STDOUT: %false_.patt: %False = binding_pattern false_ -// CHECK:STDOUT: %false_.param_patt: %False = value_param_pattern %false_.patt, call_param1 +// CHECK:STDOUT: %true_.patt: %pattern_type.efb = binding_pattern true_ +// CHECK:STDOUT: %true_.param_patt: %pattern_type.efb = value_param_pattern %true_.patt, call_param0 +// CHECK:STDOUT: %false_.patt: %pattern_type.4cc = binding_pattern false_ +// CHECK:STDOUT: %false_.param_patt: %pattern_type.4cc = value_param_pattern %false_.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %true_.param: %True = value_param call_param0 // CHECK:STDOUT: %True.ref.loc8: type = name_ref True, file.%True.decl [concrete = constants.%True] @@ -143,12 +147,12 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %false_: %False = bind_name false_, %false_.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc16_42.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/float/greater_eq.carbon b/toolchain/check/testdata/builtins/float/greater_eq.carbon index e5fbaef873f9..5963db62eb72 100644 --- a/toolchain/check/testdata/builtins/float/greater_eq.carbon +++ b/toolchain/check/testdata/builtins/float/greater_eq.carbon @@ -34,8 +34,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %GreaterEq.type: type = fn_type @GreaterEq [concrete] // CHECK:STDOUT: %GreaterEq: %GreaterEq.type = struct_value () [concrete] // CHECK:STDOUT: %Negate.type: type = fn_type @Negate [concrete] @@ -44,6 +46,8 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %False: type = class_type @False [concrete] +// CHECK:STDOUT: %pattern_type.efb: type = pattern_type %True [concrete] +// CHECK:STDOUT: %pattern_type.4cc: type = pattern_type %False [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %float.f4e: f64 = float_literal 1 [concrete] @@ -77,12 +81,12 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %GreaterEq.decl: %GreaterEq.type = fn_decl @GreaterEq [concrete = constants.%GreaterEq] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc2_33.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -107,10 +111,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Negate.decl: %Negate.type = fn_decl @Negate [concrete = constants.%Negate] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc3_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc3_22: init type = call constants.%Float(%int_64.loc3_22) [concrete = f64] @@ -130,10 +134,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %True.decl: type = class_decl @True [concrete = constants.%True] {} {} // CHECK:STDOUT: %False.decl: type = class_decl @False [concrete = constants.%False] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %true_.patt: %True = binding_pattern true_ -// CHECK:STDOUT: %true_.param_patt: %True = value_param_pattern %true_.patt, call_param0 -// CHECK:STDOUT: %false_.patt: %False = binding_pattern false_ -// CHECK:STDOUT: %false_.param_patt: %False = value_param_pattern %false_.patt, call_param1 +// CHECK:STDOUT: %true_.patt: %pattern_type.efb = binding_pattern true_ +// CHECK:STDOUT: %true_.param_patt: %pattern_type.efb = value_param_pattern %true_.patt, call_param0 +// CHECK:STDOUT: %false_.patt: %pattern_type.4cc = binding_pattern false_ +// CHECK:STDOUT: %false_.param_patt: %pattern_type.4cc = value_param_pattern %false_.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %true_.param: %True = value_param call_param0 // CHECK:STDOUT: %True.ref.loc8: type = name_ref True, file.%True.decl [concrete = constants.%True] @@ -143,12 +147,12 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %false_: %False = bind_name false_, %false_.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc16_42.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/float/less.carbon b/toolchain/check/testdata/builtins/float/less.carbon index ac0a07c81616..953d995a376b 100644 --- a/toolchain/check/testdata/builtins/float/less.carbon +++ b/toolchain/check/testdata/builtins/float/less.carbon @@ -34,8 +34,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Less.type: type = fn_type @Less [concrete] // CHECK:STDOUT: %Less: %Less.type = struct_value () [concrete] // CHECK:STDOUT: %Negate.type: type = fn_type @Negate [concrete] @@ -44,6 +46,8 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %False: type = class_type @False [concrete] +// CHECK:STDOUT: %pattern_type.efb: type = pattern_type %True [concrete] +// CHECK:STDOUT: %pattern_type.4cc: type = pattern_type %False [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %float.f4e: f64 = float_literal 1 [concrete] @@ -77,12 +81,12 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Less.decl: %Less.type = fn_decl @Less [concrete = constants.%Less] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc2_28.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -107,10 +111,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Negate.decl: %Negate.type = fn_decl @Negate [concrete = constants.%Negate] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc3_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc3_22: init type = call constants.%Float(%int_64.loc3_22) [concrete = f64] @@ -130,10 +134,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %True.decl: type = class_decl @True [concrete = constants.%True] {} {} // CHECK:STDOUT: %False.decl: type = class_decl @False [concrete = constants.%False] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %true_.patt: %True = binding_pattern true_ -// CHECK:STDOUT: %true_.param_patt: %True = value_param_pattern %true_.patt, call_param0 -// CHECK:STDOUT: %false_.patt: %False = binding_pattern false_ -// CHECK:STDOUT: %false_.param_patt: %False = value_param_pattern %false_.patt, call_param1 +// CHECK:STDOUT: %true_.patt: %pattern_type.efb = binding_pattern true_ +// CHECK:STDOUT: %true_.param_patt: %pattern_type.efb = value_param_pattern %true_.patt, call_param0 +// CHECK:STDOUT: %false_.patt: %pattern_type.4cc = binding_pattern false_ +// CHECK:STDOUT: %false_.param_patt: %pattern_type.4cc = value_param_pattern %false_.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %true_.param: %True = value_param call_param0 // CHECK:STDOUT: %True.ref.loc8: type = name_ref True, file.%True.decl [concrete = constants.%True] @@ -143,12 +147,12 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %false_: %False = bind_name false_, %false_.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc16_42.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/float/less_eq.carbon b/toolchain/check/testdata/builtins/float/less_eq.carbon index cdd205a1d4e2..ba9cf8a0e0c3 100644 --- a/toolchain/check/testdata/builtins/float/less_eq.carbon +++ b/toolchain/check/testdata/builtins/float/less_eq.carbon @@ -34,8 +34,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %LessEq.type: type = fn_type @LessEq [concrete] // CHECK:STDOUT: %LessEq: %LessEq.type = struct_value () [concrete] // CHECK:STDOUT: %Negate.type: type = fn_type @Negate [concrete] @@ -44,6 +46,8 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %False: type = class_type @False [concrete] +// CHECK:STDOUT: %pattern_type.efb: type = pattern_type %True [concrete] +// CHECK:STDOUT: %pattern_type.4cc: type = pattern_type %False [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %float.f4e: f64 = float_literal 1 [concrete] @@ -77,12 +81,12 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %LessEq.decl: %LessEq.type = fn_decl @LessEq [concrete = constants.%LessEq] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc2_30.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -107,10 +111,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Negate.decl: %Negate.type = fn_decl @Negate [concrete = constants.%Negate] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc3_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc3_22: init type = call constants.%Float(%int_64.loc3_22) [concrete = f64] @@ -130,10 +134,10 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %True.decl: type = class_decl @True [concrete = constants.%True] {} {} // CHECK:STDOUT: %False.decl: type = class_decl @False [concrete = constants.%False] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %true_.patt: %True = binding_pattern true_ -// CHECK:STDOUT: %true_.param_patt: %True = value_param_pattern %true_.patt, call_param0 -// CHECK:STDOUT: %false_.patt: %False = binding_pattern false_ -// CHECK:STDOUT: %false_.param_patt: %False = value_param_pattern %false_.patt, call_param1 +// CHECK:STDOUT: %true_.patt: %pattern_type.efb = binding_pattern true_ +// CHECK:STDOUT: %true_.param_patt: %pattern_type.efb = value_param_pattern %true_.patt, call_param0 +// CHECK:STDOUT: %false_.patt: %pattern_type.4cc = binding_pattern false_ +// CHECK:STDOUT: %false_.param_patt: %pattern_type.4cc = value_param_pattern %false_.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %true_.param: %True = value_param call_param0 // CHECK:STDOUT: %True.ref.loc8: type = name_ref True, file.%True.decl [concrete = constants.%True] @@ -143,12 +147,12 @@ fn RuntimeCallIsValid(a: f64, b: f64) -> bool { // CHECK:STDOUT: %false_: %False = bind_name false_, %false_.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc16_42.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/float/make_type.carbon b/toolchain/check/testdata/builtins/float/make_type.carbon index b0584a17f07d..0b24973f2f0e 100644 --- a/toolchain/check/testdata/builtins/float/make_type.carbon +++ b/toolchain/check/testdata/builtins/float/make_type.carbon @@ -50,6 +50,8 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -69,10 +71,10 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Float.decl: %Float.type = fn_decl @Float [concrete = constants.%Float] { -// CHECK:STDOUT: %size.patt: %i32 = binding_pattern size -// CHECK:STDOUT: %size.param_patt: %i32 = value_param_pattern %size.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %size.patt: %pattern_type.7ce = binding_pattern size +// CHECK:STDOUT: %size.param_patt: %pattern_type.7ce = value_param_pattern %size.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %size.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { @@ -94,6 +96,8 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.501: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_64.fab: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %ImplicitAs.type.9ba: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.6da: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -107,6 +111,7 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.16d, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_64.fab, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_64.198: %i32 = int_value 64 [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %float: f64 = float_literal 0 [concrete] // CHECK:STDOUT: %GetFloat.type: type = fn_type @GetFloat [concrete] // CHECK:STDOUT: %GetFloat: %GetFloat.type = struct_value () [concrete] @@ -132,8 +137,8 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: f64 = binding_pattern f -// CHECK:STDOUT: %.loc6_1: f64 = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type.3de = binding_pattern f +// CHECK:STDOUT: %.loc6_1: %pattern_type.3de = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref f64 = var f // CHECK:STDOUT: %.loc6_16.1: type = splice_block %.loc6_16.3 [concrete = f64] { @@ -152,10 +157,10 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: } // CHECK:STDOUT: %f: ref f64 = bind_name f, %f.var // CHECK:STDOUT: %GetFloat.decl: %GetFloat.type = fn_decl @GetFloat [concrete = constants.%GetFloat] { -// CHECK:STDOUT: %dyn_size.patt: %i32 = binding_pattern dyn_size -// CHECK:STDOUT: %dyn_size.param_patt: %i32 = value_param_pattern %dyn_size.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %dyn_size.patt: %pattern_type.501 = binding_pattern dyn_size +// CHECK:STDOUT: %dyn_size.param_patt: %pattern_type.501 = value_param_pattern %dyn_size.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %dyn_size.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc8: type = splice_block %i32 [concrete = constants.%i32] { @@ -194,6 +199,7 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] // CHECK:STDOUT: %int_32.be0: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32.be0) [concrete] +// CHECK:STDOUT: %pattern_type.501: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %ImplicitAs.type.9ba: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.6da: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.e36 = impl_witness_table (imports.%Core.import_ref.a86), @impl.c81 [concrete] @@ -253,8 +259,8 @@ var dyn: Float(dyn_size); // CHECK:STDOUT: } // CHECK:STDOUT: %invalid_float: = bind_name invalid_float, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %dyn_size.patt: %i32 = binding_pattern dyn_size -// CHECK:STDOUT: %.loc12_1: %i32 = var_pattern %dyn_size.patt +// CHECK:STDOUT: %dyn_size.patt: %pattern_type.501 = binding_pattern dyn_size +// CHECK:STDOUT: %.loc12_1: %pattern_type.501 = var_pattern %dyn_size.patt // CHECK:STDOUT: } // CHECK:STDOUT: %dyn_size.var: ref %i32 = var dyn_size // CHECK:STDOUT: %.loc12_15: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/builtins/float/mul.carbon b/toolchain/check/testdata/builtins/float/mul.carbon index d8abb2e9d308..8fe047c79c0d 100644 --- a/toolchain/check/testdata/builtins/float/mul.carbon +++ b/toolchain/check/testdata/builtins/float/mul.carbon @@ -57,6 +57,7 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Mul.type: type = fn_type @Mul [concrete] // CHECK:STDOUT: %Mul: %Mul.type = struct_value () [concrete] // CHECK:STDOUT: %RuntimeCallIsValid.type: type = fn_type @RuntimeCallIsValid [concrete] @@ -83,12 +84,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Mul.decl: %Mul.type = fn_decl @Mul [concrete = constants.%Mul] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc2_27: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc2_27: init type = call constants.%Float(%int_64.loc2_27) [concrete = f64] @@ -114,12 +115,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc4_42: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc4_42: init type = call constants.%Float(%int_64.loc4_42) [concrete = f64] @@ -145,8 +146,8 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: f64 = binding_pattern x -// CHECK:STDOUT: %.loc8_1: f64 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.3de = binding_pattern x +// CHECK:STDOUT: %.loc8_1: %pattern_type.3de = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref f64 = var x // CHECK:STDOUT: %.loc8_8.1: type = splice_block %.loc8_8.3 [concrete = f64] { @@ -187,12 +188,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %TooFew.type: type = fn_type @TooFew [concrete] // CHECK:STDOUT: %TooFew: %TooFew.type = struct_value () [concrete] // CHECK:STDOUT: %TooMany.type: type = fn_type @TooMany [concrete] // CHECK:STDOUT: %TooMany: %TooMany.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %BadReturnType.type: type = fn_type @BadReturnType [concrete] // CHECK:STDOUT: %BadReturnType: %BadReturnType.type = struct_value () [concrete] // CHECK:STDOUT: %JustRight.type: type = fn_type @JustRight [concrete] @@ -227,10 +230,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TooFew.decl: %TooFew.type = fn_decl @TooFew [concrete = constants.%TooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc8_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc8_22: init type = call constants.%Float(%int_64.loc8_22) [concrete = f64] @@ -248,14 +251,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TooMany.decl: %TooMany.type = fn_decl @TooMany [concrete = constants.%TooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc13_39: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc13_39: init type = call constants.%Float(%int_64.loc13_39) [concrete = f64] @@ -289,12 +292,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %BadReturnType.decl: %BadReturnType.type = fn_decl @BadReturnType [concrete = constants.%BadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc18_37.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -319,12 +322,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %JustRight.decl: %JustRight.type = fn_decl @JustRight [concrete = constants.%JustRight] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc19_33: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc19_33: init type = call constants.%Float(%int_64.loc19_33) [concrete = f64] @@ -350,10 +353,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooFew.decl: %RuntimeCallIsValidTooFew.type = fn_decl @RuntimeCallIsValidTooFew [concrete = constants.%RuntimeCallIsValidTooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc21_40: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc21_40: init type = call constants.%Float(%int_64.loc21_40) [concrete = f64] @@ -371,14 +374,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooMany.decl: %RuntimeCallIsValidTooMany.type = fn_decl @RuntimeCallIsValidTooMany [concrete = constants.%RuntimeCallIsValidTooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc25_57: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc25_57: init type = call constants.%Float(%int_64.loc25_57) [concrete = f64] @@ -412,12 +415,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidBadReturnType.decl: %RuntimeCallIsValidBadReturnType.type = fn_decl @RuntimeCallIsValidBadReturnType [concrete = constants.%RuntimeCallIsValidBadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc29_55.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/float/negate.carbon b/toolchain/check/testdata/builtins/float/negate.carbon index 5c37b10b358e..bf6287595490 100644 --- a/toolchain/check/testdata/builtins/float/negate.carbon +++ b/toolchain/check/testdata/builtins/float/negate.carbon @@ -78,6 +78,7 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Negate.type: type = fn_type @Negate [concrete] // CHECK:STDOUT: %Negate: %Negate.type = struct_value () [concrete] // CHECK:STDOUT: %RuntimeCallIsValid.type: type = fn_type @RuntimeCallIsValid [concrete] @@ -103,10 +104,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Negate.decl: %Negate.type = fn_decl @Negate [concrete = constants.%Negate] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc2_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc2_22: init type = call constants.%Float(%int_64.loc2_22) [concrete = f64] @@ -124,12 +125,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc4_42: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc4_42: init type = call constants.%Float(%int_64.loc4_42) [concrete = f64] @@ -155,7 +156,7 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_8.1: type = splice_block %.loc8_8.3 [concrete = f64] { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] @@ -194,12 +195,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %TooFew.type: type = fn_type @TooFew [concrete] // CHECK:STDOUT: %TooFew: %TooFew.type = struct_value () [concrete] // CHECK:STDOUT: %TooMany.type: type = fn_type @TooMany [concrete] // CHECK:STDOUT: %TooMany: %TooMany.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %BadReturnType.type: type = fn_type @BadReturnType [concrete] // CHECK:STDOUT: %BadReturnType: %BadReturnType.type = struct_value () [concrete] // CHECK:STDOUT: %JustRight.type: type = fn_type @JustRight [concrete] @@ -234,8 +237,8 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TooFew.decl: %TooFew.type = fn_decl @TooFew [concrete = constants.%TooFew] { -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type: init type = call constants.%Float(%int_64) [concrete = f64] @@ -245,12 +248,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TooMany.decl: %TooMany.type = fn_decl @TooMany [concrete = constants.%TooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc13_31: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc13_31: init type = call constants.%Float(%int_64.loc13_31) [concrete = f64] @@ -276,10 +279,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %BadReturnType.decl: %BadReturnType.type = fn_decl @BadReturnType [concrete = constants.%BadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc18_29.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -296,10 +299,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %JustRight.decl: %JustRight.type = fn_decl @JustRight [concrete = constants.%JustRight] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc19_25: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc19_25: init type = call constants.%Float(%int_64.loc19_25) [concrete = f64] @@ -317,10 +320,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooFew.decl: %RuntimeCallIsValidTooFew.type = fn_decl @RuntimeCallIsValidTooFew [concrete = constants.%RuntimeCallIsValidTooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc21_40: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc21_40: init type = call constants.%Float(%int_64.loc21_40) [concrete = f64] @@ -338,14 +341,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooMany.decl: %RuntimeCallIsValidTooMany.type = fn_decl @RuntimeCallIsValidTooMany [concrete = constants.%RuntimeCallIsValidTooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc32_57: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc32_57: init type = call constants.%Float(%int_64.loc32_57) [concrete = f64] @@ -379,12 +382,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidBadReturnType.decl: %RuntimeCallIsValidBadReturnType.type = fn_decl @RuntimeCallIsValidBadReturnType [concrete = constants.%RuntimeCallIsValidBadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc43_55.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/float/neq.carbon b/toolchain/check/testdata/builtins/float/neq.carbon index 47c203f142c8..4905992423dc 100644 --- a/toolchain/check/testdata/builtins/float/neq.carbon +++ b/toolchain/check/testdata/builtins/float/neq.carbon @@ -40,14 +40,18 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.neq"; // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Neq.type: type = fn_type @Neq [concrete] // CHECK:STDOUT: %Neq: %Neq.type = struct_value () [concrete] // CHECK:STDOUT: %True: type = class_type @True [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %False: type = class_type @False [concrete] +// CHECK:STDOUT: %pattern_type.efb: type = pattern_type %True [concrete] +// CHECK:STDOUT: %pattern_type.4cc: type = pattern_type %False [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %float.f4e: f64 = float_literal 1 [concrete] @@ -78,12 +82,12 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.neq"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Neq.decl: %Neq.type = fn_decl @Neq [concrete = constants.%Neq] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc2_27.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -110,10 +114,10 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.neq"; // CHECK:STDOUT: %True.decl: type = class_decl @True [concrete = constants.%True] {} {} // CHECK:STDOUT: %False.decl: type = class_decl @False [concrete = constants.%False] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %true_.patt: %True = binding_pattern true_ -// CHECK:STDOUT: %true_.param_patt: %True = value_param_pattern %true_.patt, call_param0 -// CHECK:STDOUT: %false_.patt: %False = binding_pattern false_ -// CHECK:STDOUT: %false_.param_patt: %False = value_param_pattern %false_.patt, call_param1 +// CHECK:STDOUT: %true_.patt: %pattern_type.efb = binding_pattern true_ +// CHECK:STDOUT: %true_.param_patt: %pattern_type.efb = value_param_pattern %true_.patt, call_param0 +// CHECK:STDOUT: %false_.patt: %pattern_type.4cc = binding_pattern false_ +// CHECK:STDOUT: %false_.param_patt: %pattern_type.4cc = value_param_pattern %false_.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %true_.param: %True = value_param call_param0 // CHECK:STDOUT: %True.ref.loc7: type = name_ref True, file.%True.decl [concrete = constants.%True] @@ -123,12 +127,12 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.neq"; // CHECK:STDOUT: %false_: %False = bind_name false_, %false_.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc12_42.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -234,6 +238,7 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.neq"; // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %WrongResult.type: type = fn_type @WrongResult [concrete] // CHECK:STDOUT: %WrongResult: %WrongResult.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -253,12 +258,12 @@ fn WrongResult(a: f64, b: f64) -> f64 = "float.neq"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %WrongResult.decl: %WrongResult.type = fn_decl @WrongResult [concrete = constants.%WrongResult] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc8_35: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc8_35: init type = call constants.%Float(%int_64.loc8_35) [concrete = f64] diff --git a/toolchain/check/testdata/builtins/float/sub.carbon b/toolchain/check/testdata/builtins/float/sub.carbon index 94b8a7ac6b9c..ef1f98a29b81 100644 --- a/toolchain/check/testdata/builtins/float/sub.carbon +++ b/toolchain/check/testdata/builtins/float/sub.carbon @@ -57,6 +57,7 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Sub.type: type = fn_type @Sub [concrete] // CHECK:STDOUT: %Sub: %Sub.type = struct_value () [concrete] // CHECK:STDOUT: %RuntimeCallIsValid.type: type = fn_type @RuntimeCallIsValid [concrete] @@ -83,12 +84,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Sub.decl: %Sub.type = fn_decl @Sub [concrete = constants.%Sub] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc2_27: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc2_27: init type = call constants.%Float(%int_64.loc2_27) [concrete = f64] @@ -114,12 +115,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValid.decl: %RuntimeCallIsValid.type = fn_decl @RuntimeCallIsValid [concrete = constants.%RuntimeCallIsValid] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc4_42: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc4_42: init type = call constants.%Float(%int_64.loc4_42) [concrete = f64] @@ -145,8 +146,8 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: f64 = binding_pattern x -// CHECK:STDOUT: %.loc8_1: f64 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.3de = binding_pattern x +// CHECK:STDOUT: %.loc8_1: %pattern_type.3de = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref f64 = var x // CHECK:STDOUT: %.loc8_8.1: type = splice_block %.loc8_8.3 [concrete = f64] { @@ -187,12 +188,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %TooFew.type: type = fn_type @TooFew [concrete] // CHECK:STDOUT: %TooFew: %TooFew.type = struct_value () [concrete] // CHECK:STDOUT: %TooMany.type: type = fn_type @TooMany [concrete] // CHECK:STDOUT: %TooMany: %TooMany.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %BadReturnType.type: type = fn_type @BadReturnType [concrete] // CHECK:STDOUT: %BadReturnType: %BadReturnType.type = struct_value () [concrete] // CHECK:STDOUT: %JustRight.type: type = fn_type @JustRight [concrete] @@ -227,10 +230,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TooFew.decl: %TooFew.type = fn_decl @TooFew [concrete = constants.%TooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc8_22: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc8_22: init type = call constants.%Float(%int_64.loc8_22) [concrete = f64] @@ -248,14 +251,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TooMany.decl: %TooMany.type = fn_decl @TooMany [concrete = constants.%TooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc13_39: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc13_39: init type = call constants.%Float(%int_64.loc13_39) [concrete = f64] @@ -289,12 +292,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %BadReturnType.decl: %BadReturnType.type = fn_decl @BadReturnType [concrete = constants.%BadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc18_37.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -319,12 +322,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %JustRight.decl: %JustRight.type = fn_decl @JustRight [concrete = constants.%JustRight] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc19_33: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc19_33: init type = call constants.%Float(%int_64.loc19_33) [concrete = f64] @@ -350,10 +353,10 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooFew.decl: %RuntimeCallIsValidTooFew.type = fn_decl @RuntimeCallIsValidTooFew [concrete = constants.%RuntimeCallIsValidTooFew] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc21_40: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc21_40: init type = call constants.%Float(%int_64.loc21_40) [concrete = f64] @@ -371,14 +374,14 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidTooMany.decl: %RuntimeCallIsValidTooMany.type = fn_decl @RuntimeCallIsValidTooMany [concrete = constants.%RuntimeCallIsValidTooMany] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: f64 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: f64 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.3de = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.3de = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64.loc25_57: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type.loc25_57: init type = call constants.%Float(%int_64.loc25_57) [concrete = f64] @@ -412,12 +415,12 @@ fn RuntimeCallIsValidBadReturnType(a: f64, b: f64) -> bool { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %RuntimeCallIsValidBadReturnType.decl: %RuntimeCallIsValidBadReturnType.type = fn_decl @RuntimeCallIsValidBadReturnType [concrete = constants.%RuntimeCallIsValidBadReturnType] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: f64 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: f64 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.3de = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.3de = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc29_55.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/builtins/no_prelude/no_op.carbon b/toolchain/check/testdata/builtins/no_prelude/no_op.carbon index 4fcb6b2b048e..e0d18f671811 100644 --- a/toolchain/check/testdata/builtins/no_prelude/no_op.carbon +++ b/toolchain/check/testdata/builtins/no_prelude/no_op.carbon @@ -89,6 +89,7 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %NoOp.type: type = fn_type @NoOp [concrete] // CHECK:STDOUT: %NoOp: %NoOp.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -102,8 +103,8 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %NoOp.decl: %NoOp.type = fn_decl @NoOp [concrete = constants.%NoOp] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_15.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc4_15.2: type = converted %.loc4_15.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -126,6 +127,7 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %NoOp.type: type = fn_type @NoOp [concrete] // CHECK:STDOUT: %NoOp: %NoOp.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -139,10 +141,10 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %NoOp.decl: %NoOp.type = fn_decl @NoOp [concrete = constants.%NoOp] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_20.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc4_20.2: type = converted %.loc4_20.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -176,6 +178,7 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: %NoOp.type: type = fn_type @NoOp [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %NoOp: %NoOp.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -186,8 +189,8 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: } // CHECK:STDOUT: %NoOp.decl: %NoOp.type = fn_decl @NoOp [concrete = constants.%NoOp] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -211,6 +214,7 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %NoOp.type: type = fn_type @NoOp [concrete] // CHECK:STDOUT: %NoOp: %NoOp.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -220,8 +224,8 @@ fn NoOp() -> {} = "no_op"; // CHECK:STDOUT: .NoOp = %NoOp.decl // CHECK:STDOUT: } // CHECK:STDOUT: %NoOp.decl: %NoOp.type = fn_decl @NoOp [concrete = constants.%NoOp] { -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_15.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc8_15.2: type = converted %.loc8_15.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/builtins/print/char.carbon b/toolchain/check/testdata/builtins/print/char.carbon index 297e4bbcbe78..6d83b4b53ef1 100644 --- a/toolchain/check/testdata/builtins/print/char.carbon +++ b/toolchain/check/testdata/builtins/print/char.carbon @@ -22,6 +22,7 @@ fn Main() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %PrintChar.type.c95: type = fn_type @PrintChar.1 [concrete] // CHECK:STDOUT: %PrintChar.843: %PrintChar.type.c95 = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -67,10 +68,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PrintChar.decl: %PrintChar.type.c95 = fn_decl @PrintChar.1 [concrete = constants.%PrintChar.843] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc13_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc13_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/builtins/print/int.carbon b/toolchain/check/testdata/builtins/print/int.carbon index f539511cdda7..55dbc613a738 100644 --- a/toolchain/check/testdata/builtins/print/int.carbon +++ b/toolchain/check/testdata/builtins/print/int.carbon @@ -24,6 +24,7 @@ fn Main() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Print.type.980: type = fn_type @Print.1 [concrete] // CHECK:STDOUT: %Print.b7c: %Print.type.980 = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -69,8 +70,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Print.decl: %Print.type.980 = fn_decl @Print.1 [concrete = constants.%Print.b7c] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc13: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/builtins/read/int.carbon b/toolchain/check/testdata/builtins/read/int.carbon index 28798fa33b82..6e34d6b00176 100644 --- a/toolchain/check/testdata/builtins/read/int.carbon +++ b/toolchain/check/testdata/builtins/read/int.carbon @@ -22,6 +22,7 @@ fn Main() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %ReadChar.type.fa8: type = fn_type @ReadChar.1 [concrete] // CHECK:STDOUT: %ReadChar.7f4: %ReadChar.type.fa8 = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -49,8 +50,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ReadChar.decl: %ReadChar.type.fa8 = fn_decl @ReadChar.1 [concrete = constants.%ReadChar.7f4] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -65,7 +66,7 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %ReadChar.ref.loc16: %ReadChar.type.fa8 = name_ref ReadChar, file.%ReadChar.decl [concrete = constants.%ReadChar.7f4] // CHECK:STDOUT: %read.char.loc16: init %i32 = call %ReadChar.ref.loc16() @@ -77,7 +78,7 @@ fn Main() { // CHECK:STDOUT: %.loc16_25.2: ref %i32 = temporary %.loc16_25.1, %read.char.loc16 // CHECK:STDOUT: %n: ref %i32 = bind_name n, %.loc16_25.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m // CHECK:STDOUT: } // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %ReadChar.ref.loc17: %ReadChar.type.9f3 = name_ref ReadChar, imports.%Core.ReadChar [concrete = constants.%ReadChar.01f] diff --git a/toolchain/check/testdata/choice/basic.carbon b/toolchain/check/testdata/choice/basic.carbon index cc052fc4d2b1..f89c5d31045c 100644 --- a/toolchain/check/testdata/choice/basic.carbon +++ b/toolchain/check/testdata/choice/basic.carbon @@ -100,6 +100,7 @@ fn G() { // CHECK:STDOUT: %Always.val: %Always = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Always [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -145,7 +146,7 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %mood.patt: %Always = binding_pattern mood +// CHECK:STDOUT: %mood.patt: %pattern_type = binding_pattern mood // CHECK:STDOUT: } // CHECK:STDOUT: %Always.ref.loc8_22: type = name_ref Always, file.%Always.decl [concrete = constants.%Always] // CHECK:STDOUT: %Sunny.ref: %Always = name_ref Sunny, @Always.%Sunny @@ -192,6 +193,7 @@ fn G() { // CHECK:STDOUT: %Ordering.val.8a7: %Ordering = struct_value (%int_3.975) [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.308: type = pattern_type %Ordering [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -299,28 +301,28 @@ fn G() { // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %less.patt: %Ordering = binding_pattern less +// CHECK:STDOUT: %less.patt: %pattern_type.308 = binding_pattern less // CHECK:STDOUT: } // CHECK:STDOUT: %Ordering.ref.loc11_24: type = name_ref Ordering, file.%Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %Less.ref: %Ordering = name_ref Less, @Ordering.%Less // CHECK:STDOUT: %Ordering.ref.loc11_13: type = name_ref Ordering, file.%Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %less: %Ordering = bind_name less, %Less.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %equiv.patt: %Ordering = binding_pattern equiv +// CHECK:STDOUT: %equiv.patt: %pattern_type.308 = binding_pattern equiv // CHECK:STDOUT: } // CHECK:STDOUT: %Ordering.ref.loc12_25: type = name_ref Ordering, file.%Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %Equivalent.ref: %Ordering = name_ref Equivalent, @Ordering.%Equivalent // CHECK:STDOUT: %Ordering.ref.loc12_14: type = name_ref Ordering, file.%Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %equiv: %Ordering = bind_name equiv, %Equivalent.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %greater.patt: %Ordering = binding_pattern greater +// CHECK:STDOUT: %greater.patt: %pattern_type.308 = binding_pattern greater // CHECK:STDOUT: } // CHECK:STDOUT: %Ordering.ref.loc13_27: type = name_ref Ordering, file.%Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %Greater.ref: %Ordering = name_ref Greater, @Ordering.%Greater // CHECK:STDOUT: %Ordering.ref.loc13_16: type = name_ref Ordering, file.%Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %greater: %Ordering = bind_name greater, %Greater.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %inc.patt: %Ordering = binding_pattern inc +// CHECK:STDOUT: %inc.patt: %pattern_type.308 = binding_pattern inc // CHECK:STDOUT: } // CHECK:STDOUT: %Ordering.ref.loc14_23: type = name_ref Ordering, file.%Ordering.decl [concrete = constants.%Ordering] // CHECK:STDOUT: %Incomparable.ref: %Ordering = name_ref Incomparable, @Ordering.%Incomparable @@ -340,6 +342,7 @@ fn G() { // CHECK:STDOUT: %Always.val: %Always = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Always [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -385,7 +388,7 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %mood.patt: %Always = binding_pattern mood +// CHECK:STDOUT: %mood.patt: %pattern_type = binding_pattern mood // CHECK:STDOUT: } // CHECK:STDOUT: %Always.ref.loc12_22: type = name_ref Always, file.%Always.decl [concrete = constants.%Always] // CHECK:STDOUT: %Sunny.ref: %Always = name_ref Sunny, @Always.%Sunny diff --git a/toolchain/check/testdata/choice/fail_invalid.carbon b/toolchain/check/testdata/choice/fail_invalid.carbon index 1081f162a656..4e2ff561160d 100644 --- a/toolchain/check/testdata/choice/fail_invalid.carbon +++ b/toolchain/check/testdata/choice/fail_invalid.carbon @@ -31,6 +31,7 @@ fn F() { // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.discriminant [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Never [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -63,7 +64,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %never.patt: %Never = binding_pattern never +// CHECK:STDOUT: %never.patt: %pattern_type = binding_pattern never // CHECK:STDOUT: } // CHECK:STDOUT: %.loc11_23.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %Never.ref: type = name_ref Never, file.%Never.decl [concrete = constants.%Never] diff --git a/toolchain/check/testdata/choice/fail_todo_params.carbon b/toolchain/check/testdata/choice/fail_todo_params.carbon index e7c910386d03..0e5da7fa2139 100644 --- a/toolchain/check/testdata/choice/fail_todo_params.carbon +++ b/toolchain/check/testdata/choice/fail_todo_params.carbon @@ -158,11 +158,13 @@ choice C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %struct_type.discriminant: type = struct_type {.discriminant: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.discriminant [concrete] // CHECK:STDOUT: } @@ -181,7 +183,7 @@ choice C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc3_10.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc3_10.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc3_10.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_10.2 (constants.%T)] // CHECK:STDOUT: } @@ -189,9 +191,10 @@ choice C { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc3_10.1: type) { // CHECK:STDOUT: %T.loc3_10.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_10.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc3_10.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc3_10.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_10.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc3_10.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %a.param: @C.%T.loc3_10.2 (%T) = value_param call_param0 diff --git a/toolchain/check/testdata/choice/generic.carbon b/toolchain/check/testdata/choice/generic.carbon index eeb99dc5275a..920276539975 100644 --- a/toolchain/check/testdata/choice/generic.carbon +++ b/toolchain/check/testdata/choice/generic.carbon @@ -16,7 +16,8 @@ choice Always(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Always.type: type = generic_class_type @Always [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Always.generic: %Always.type = struct_value () [concrete] @@ -42,7 +43,7 @@ choice Always(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Always.decl: %Always.type = class_decl @Always [concrete = constants.%Always.generic] { -// CHECK:STDOUT: %T.patt.loc11_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -50,7 +51,7 @@ choice Always(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Always(%T.loc11_15.1: type) { // CHECK:STDOUT: %T.loc11_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Always: type = class_type @Always, @Always(%T.loc11_15.2) [symbolic = %Always (constants.%Always)] diff --git a/toolchain/check/testdata/class/access_modifers.carbon b/toolchain/check/testdata/class/access_modifers.carbon index 4c2b0c05f669..2e25785fd68d 100644 --- a/toolchain/check/testdata/class/access_modifers.carbon +++ b/toolchain/check/testdata/class/access_modifers.carbon @@ -153,6 +153,7 @@ class A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Circle.elem: type = unbound_element_type %Circle, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -168,6 +169,7 @@ class A { // CHECK:STDOUT: %int_5.0f6: %i32 = int_value 5 [concrete] // CHECK:STDOUT: %SomeInternalFunction.type: type = fn_type @SomeInternalFunction [concrete] // CHECK:STDOUT: %SomeInternalFunction: %SomeInternalFunction.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.ce2: type = pattern_type %Circle [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.radius.251: type = struct_type {.radius: %i32} [concrete] @@ -207,7 +209,7 @@ class A { // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: %Circle.elem = field_decl radius, element0 [concrete] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_INTERNAL_CONSTANT.patt: %i32 = binding_pattern SOME_INTERNAL_CONSTANT +// CHECK:STDOUT: %SOME_INTERNAL_CONSTANT.patt: %pattern_type.7ce = binding_pattern SOME_INTERNAL_CONSTANT // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %.loc6_39: type = splice_block %i32.loc6 [concrete = constants.%i32] { @@ -223,8 +225,8 @@ class A { // CHECK:STDOUT: %.loc6_45.2: %i32 = converted %int_5, %.loc6_45.1 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %SOME_INTERNAL_CONSTANT: %i32 = bind_name SOME_INTERNAL_CONSTANT, %.loc6_45.2 // CHECK:STDOUT: %SomeInternalFunction.decl: %SomeInternalFunction.type = fn_decl @SomeInternalFunction [concrete = constants.%SomeInternalFunction] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -232,8 +234,8 @@ class A { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %Circle = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Circle = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.ce2 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.ce2 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Circle [concrete = constants.%Circle] // CHECK:STDOUT: %return.param: ref %Circle = out_param call_param0 @@ -284,7 +286,7 @@ class A { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %circle.patt: %Circle = binding_pattern circle +// CHECK:STDOUT: %circle.patt: %pattern_type.ce2 = binding_pattern circle // CHECK:STDOUT: } // CHECK:STDOUT: %Circle.ref.loc18_24: type = name_ref Circle, file.%Circle.decl [concrete = constants.%Circle] // CHECK:STDOUT: %Make.ref: %Make.type = name_ref Make, @Circle.%Make.decl [concrete = constants.%Make] @@ -294,7 +296,7 @@ class A { // CHECK:STDOUT: %.loc18_36.2: ref %Circle = temporary %.loc18_36.1, %Make.call // CHECK:STDOUT: %circle: ref %Circle = bind_name circle, %.loc18_36.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %radius.patt: %i32 = binding_pattern radius +// CHECK:STDOUT: %radius.patt: %pattern_type.7ce = binding_pattern radius // CHECK:STDOUT: } // CHECK:STDOUT: %circle.ref.loc26: ref %Circle = name_ref circle, %circle // CHECK:STDOUT: %radius.ref.loc26: = name_ref radius, [concrete = ] @@ -325,6 +327,7 @@ class A { // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -362,7 +365,7 @@ class A { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %x.ref: = name_ref x, [concrete = ] @@ -381,6 +384,8 @@ class A { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Circle.elem: type = unbound_element_type %Circle, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.ce2: type = pattern_type %Circle [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %GetRadius.type: type = fn_type @GetRadius [concrete] // CHECK:STDOUT: %GetRadius: %GetRadius.type = struct_value () [concrete] // CHECK:STDOUT: %SomeInternalFunction.type: type = fn_type @SomeInternalFunction [concrete] @@ -427,10 +432,10 @@ class A { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc5: %Circle.elem = field_decl radius, element0 [concrete] // CHECK:STDOUT: %GetRadius.decl: %GetRadius.type = fn_decl @GetRadius [concrete = constants.%GetRadius] { -// CHECK:STDOUT: %self.patt: %Circle = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Circle = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.ce2 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.ce2 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -441,8 +446,8 @@ class A { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %SomeInternalFunction.decl: %SomeInternalFunction.type = fn_decl @SomeInternalFunction [concrete = constants.%SomeInternalFunction] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -450,10 +455,10 @@ class A { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Compute.decl: %Compute.type = fn_decl @Compute [concrete = constants.%Compute] { -// CHECK:STDOUT: %self.patt: %Circle = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Circle = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.ce2 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.ce2 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -513,6 +518,7 @@ class A { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -548,7 +554,7 @@ class A { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -559,7 +565,7 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %.loc5_10: type = splice_block %i32 [concrete = constants.%i32] { @@ -596,6 +602,7 @@ class A { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -632,7 +639,7 @@ class A { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %.loc16: type = splice_block %i32.loc16 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -640,7 +647,7 @@ class A { // CHECK:STDOUT: } // CHECK:STDOUT: %x: %i32 = bind_name x, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %i32 = binding_pattern y +// CHECK:STDOUT: %y.patt: %pattern_type.7ce = binding_pattern y // CHECK:STDOUT: } // CHECK:STDOUT: %.loc24: type = splice_block %i32.loc24 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc24: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -651,7 +658,7 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %int_5.loc5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %.loc5_20: type = splice_block %i32.loc5 [concrete = constants.%i32] { @@ -667,7 +674,7 @@ class A { // CHECK:STDOUT: %.loc5_26.2: %i32 = converted %int_5.loc5, %.loc5_26.1 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %x: %i32 = bind_name x, %.loc5_26.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %i32 = binding_pattern y +// CHECK:STDOUT: %y.patt: %pattern_type.7ce = binding_pattern y // CHECK:STDOUT: } // CHECK:STDOUT: %int_5.loc6: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %.loc6_18: type = splice_block %i32.loc6 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/class/adapter/adapt.carbon b/toolchain/check/testdata/class/adapter/adapt.carbon index 2ed7daeb05d7..ea44a2922c08 100644 --- a/toolchain/check/testdata/class/adapter/adapt.carbon +++ b/toolchain/check/testdata/class/adapter/adapt.carbon @@ -149,6 +149,7 @@ interface I { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %AdaptNotExtend: type = class_type @AdaptNotExtend [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %AdaptNotExtend [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -171,8 +172,8 @@ interface I { // CHECK:STDOUT: %Adapted.decl: type = class_decl @Adapted [concrete = constants.%Adapted] {} {} // CHECK:STDOUT: %AdaptNotExtend.decl: type = class_decl @AdaptNotExtend [concrete = constants.%AdaptNotExtend] {} {} // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %a.patt: %AdaptNotExtend = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %AdaptNotExtend = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %AdaptNotExtend = value_param call_param0 // CHECK:STDOUT: %AdaptNotExtend.ref: type = name_ref AdaptNotExtend, file.%AdaptNotExtend.decl [concrete = constants.%AdaptNotExtend] diff --git a/toolchain/check/testdata/class/adapter/adapt_copy.carbon b/toolchain/check/testdata/class/adapter/adapt_copy.carbon index ce7eb3aa6dac..8b3254e6470d 100644 --- a/toolchain/check/testdata/class/adapter/adapt_copy.carbon +++ b/toolchain/check/testdata/class/adapter/adapt_copy.carbon @@ -128,11 +128,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.cdf: type = pattern_type %AdaptCopyable [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.2a3: type = tuple_type (%AdaptCopyable, %u32) [concrete] +// CHECK:STDOUT: %pattern_type.813: type = pattern_type %tuple.type.2a3 [concrete] // CHECK:STDOUT: %InTuple.type: type = fn_type @InTuple [concrete] // CHECK:STDOUT: %InTuple: %InTuple.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -156,10 +158,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %AdaptCopyable.decl: type = class_decl @AdaptCopyable [concrete = constants.%AdaptCopyable] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %AdaptCopyable = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %AdaptCopyable = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %AdaptCopyable = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %AdaptCopyable = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.cdf = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.cdf = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cdf = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cdf = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptCopyable.ref.loc10_27: type = name_ref AdaptCopyable, file.%AdaptCopyable.decl [concrete = constants.%AdaptCopyable] // CHECK:STDOUT: %c.param: %AdaptCopyable = value_param call_param0 @@ -169,10 +171,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %return: ref %AdaptCopyable = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InTuple.decl: %InTuple.type = fn_decl @InTuple [concrete = constants.%InTuple] { -// CHECK:STDOUT: %c.patt: %tuple.type.2a3 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %tuple.type.2a3 = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type.2a3 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.2a3 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.813 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.813 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.813 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.813 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptCopyable.ref.loc15_41: type = name_ref AdaptCopyable, file.%AdaptCopyable.decl [concrete = constants.%AdaptCopyable] // CHECK:STDOUT: %int_32.loc15_56: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -207,8 +209,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @F(%c.param: %AdaptCopyable) -> %AdaptCopyable { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %AdaptCopyable = binding_pattern d -// CHECK:STDOUT: %.loc11: %AdaptCopyable = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cdf = binding_pattern d +// CHECK:STDOUT: %.loc11: %pattern_type.cdf = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %AdaptCopyable = var d // CHECK:STDOUT: %c.ref: %AdaptCopyable = name_ref c, %c @@ -223,8 +225,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @InTuple(%c.param: %tuple.type.2a3) -> %return.param: %tuple.type.2a3 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %tuple.type.2a3 = binding_pattern d -// CHECK:STDOUT: %.loc16_3.1: %tuple.type.2a3 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.813 = binding_pattern d +// CHECK:STDOUT: %.loc16_3.1: %pattern_type.813 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %tuple.type.2a3 = var d // CHECK:STDOUT: %c.ref: %tuple.type.2a3 = name_ref c, %c @@ -268,10 +270,12 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %complete_type.65d: = complete_type_witness %tuple.type.d07 [concrete] +// CHECK:STDOUT: %pattern_type.562: type = pattern_type %AdaptTuple [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.f69: type = tuple_type (%AdaptTuple, %u32) [concrete] +// CHECK:STDOUT: %pattern_type.c9e: type = pattern_type %tuple.type.f69 [concrete] // CHECK:STDOUT: %InTuple.type: type = fn_type @InTuple [concrete] // CHECK:STDOUT: %InTuple: %InTuple.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -295,10 +299,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %AdaptTuple.decl: type = class_decl @AdaptTuple [concrete = constants.%AdaptTuple] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %AdaptTuple = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %AdaptTuple = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %AdaptTuple = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %AdaptTuple = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.562 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.562 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.562 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.562 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptTuple.ref.loc8_24: type = name_ref AdaptTuple, file.%AdaptTuple.decl [concrete = constants.%AdaptTuple] // CHECK:STDOUT: %c.param: %AdaptTuple = value_param call_param0 @@ -308,10 +312,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %return: ref %AdaptTuple = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InTuple.decl: %InTuple.type = fn_decl @InTuple [concrete = constants.%InTuple] { -// CHECK:STDOUT: %c.patt: %tuple.type.f69 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %tuple.type.f69 = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type.f69 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.f69 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.c9e = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c9e = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c9e = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c9e = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptTuple.ref.loc13_38: type = name_ref AdaptTuple, file.%AdaptTuple.decl [concrete = constants.%AdaptTuple] // CHECK:STDOUT: %int_32.loc13_50: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -350,8 +354,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @F(%c.param: %AdaptTuple) -> %return.param: %AdaptTuple { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %AdaptTuple = binding_pattern d -// CHECK:STDOUT: %.loc9_3.1: %AdaptTuple = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.562 = binding_pattern d +// CHECK:STDOUT: %.loc9_3.1: %pattern_type.562 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %AdaptTuple = var d // CHECK:STDOUT: %c.ref: %AdaptTuple = name_ref c, %c @@ -389,8 +393,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @InTuple(%c.param: %tuple.type.f69) -> %return.param: %tuple.type.f69 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %tuple.type.f69 = binding_pattern d -// CHECK:STDOUT: %.loc14_3.1: %tuple.type.f69 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.c9e = binding_pattern d +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.c9e = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %tuple.type.f69 = var d // CHECK:STDOUT: %c.ref: %tuple.type.f69 = name_ref c, %c @@ -453,6 +457,7 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %AdaptNoncopyable: type = class_type @AdaptNoncopyable [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %AdaptNoncopyable [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -475,10 +480,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Noncopyable.decl: type = class_decl @Noncopyable [concrete = constants.%Noncopyable] {} {} // CHECK:STDOUT: %AdaptNoncopyable.decl: type = class_decl @AdaptNoncopyable [concrete = constants.%AdaptNoncopyable] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: %AdaptNoncopyable = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %AdaptNoncopyable = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %AdaptNoncopyable = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %AdaptNoncopyable = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptNoncopyable.ref.loc12_30: type = name_ref AdaptNoncopyable, file.%AdaptNoncopyable.decl [concrete = constants.%AdaptNoncopyable] // CHECK:STDOUT: %a.param: %AdaptNoncopyable = value_param call_param0 @@ -512,8 +517,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @G(%a.param: %AdaptNoncopyable) -> %return.param: %AdaptNoncopyable { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %AdaptNoncopyable = binding_pattern b -// CHECK:STDOUT: %.loc17: %AdaptNoncopyable = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc17: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %AdaptNoncopyable = var b // CHECK:STDOUT: %a.ref: %AdaptNoncopyable = name_ref a, %a @@ -537,6 +542,7 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.c9a: type = tuple_type (%i32, %Noncopyable, %i32) [concrete] // CHECK:STDOUT: %complete_type.201: = complete_type_witness %tuple.type.c9a [concrete] +// CHECK:STDOUT: %pattern_type.7e5: type = pattern_type %AdaptNoncopyableIndirect [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -560,10 +566,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Noncopyable.decl: type = class_decl @Noncopyable [concrete = constants.%Noncopyable] {} {} // CHECK:STDOUT: %AdaptNoncopyableIndirect.decl: type = class_decl @AdaptNoncopyableIndirect [concrete = constants.%AdaptNoncopyableIndirect] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %a.patt: %AdaptNoncopyableIndirect = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %AdaptNoncopyableIndirect = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %AdaptNoncopyableIndirect = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %AdaptNoncopyableIndirect = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7e5 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7e5 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7e5 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7e5 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptNoncopyableIndirect.ref.loc12_38: type = name_ref AdaptNoncopyableIndirect, file.%AdaptNoncopyableIndirect.decl [concrete = constants.%AdaptNoncopyableIndirect] // CHECK:STDOUT: %a.param: %AdaptNoncopyableIndirect = value_param call_param0 @@ -603,8 +609,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @H(%a.param: %AdaptNoncopyableIndirect) -> %return.param: %AdaptNoncopyableIndirect { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %AdaptNoncopyableIndirect = binding_pattern b -// CHECK:STDOUT: %.loc20_3.1: %AdaptNoncopyableIndirect = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7e5 = binding_pattern b +// CHECK:STDOUT: %.loc20_3.1: %pattern_type.7e5 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %AdaptNoncopyableIndirect = var b // CHECK:STDOUT: %a.ref: %AdaptNoncopyableIndirect = name_ref a, %a @@ -637,11 +643,13 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.e.f: type = struct_type {.e: %i32, .f: %i32} [concrete] // CHECK:STDOUT: %complete_type.511: = complete_type_witness %struct_type.e.f [concrete] +// CHECK:STDOUT: %pattern_type.f45: type = pattern_type %AdaptStruct [concrete] // CHECK:STDOUT: %I.type: type = fn_type @I [concrete] // CHECK:STDOUT: %I: %I.type = struct_value () [concrete] // CHECK:STDOUT: %u32: type = class_type @UInt, @UInt(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.80b: type = tuple_type (%AdaptStruct, %u32) [concrete] +// CHECK:STDOUT: %pattern_type.31d: type = pattern_type %tuple.type.80b [concrete] // CHECK:STDOUT: %InTuple.type: type = fn_type @InTuple [concrete] // CHECK:STDOUT: %InTuple: %InTuple.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -665,10 +673,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %AdaptStruct.decl: type = class_decl @AdaptStruct [concrete = constants.%AdaptStruct] {} {} // CHECK:STDOUT: %I.decl: %I.type = fn_decl @I [concrete = constants.%I] { -// CHECK:STDOUT: %g.patt: %AdaptStruct = binding_pattern g -// CHECK:STDOUT: %g.param_patt: %AdaptStruct = value_param_pattern %g.patt, call_param0 -// CHECK:STDOUT: %return.patt: %AdaptStruct = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %AdaptStruct = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %g.patt: %pattern_type.f45 = binding_pattern g +// CHECK:STDOUT: %g.param_patt: %pattern_type.f45 = value_param_pattern %g.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.f45 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.f45 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptStruct.ref.loc8_25: type = name_ref AdaptStruct, file.%AdaptStruct.decl [concrete = constants.%AdaptStruct] // CHECK:STDOUT: %g.param: %AdaptStruct = value_param call_param0 @@ -678,10 +686,10 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: %return: ref %AdaptStruct = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InTuple.decl: %InTuple.type = fn_decl @InTuple [concrete = constants.%InTuple] { -// CHECK:STDOUT: %c.patt: %tuple.type.80b = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %tuple.type.80b = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type.80b = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.80b = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.31d = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.31d = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.31d = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.31d = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptStruct.ref.loc13_39: type = name_ref AdaptStruct, file.%AdaptStruct.decl [concrete = constants.%AdaptStruct] // CHECK:STDOUT: %int_32.loc13_52: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -719,8 +727,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @I(%g.param: %AdaptStruct) -> %return.param: %AdaptStruct { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %h.patt: %AdaptStruct = binding_pattern h -// CHECK:STDOUT: %.loc9_3.1: %AdaptStruct = var_pattern %h.patt +// CHECK:STDOUT: %h.patt: %pattern_type.f45 = binding_pattern h +// CHECK:STDOUT: %.loc9_3.1: %pattern_type.f45 = var_pattern %h.patt // CHECK:STDOUT: } // CHECK:STDOUT: %h.var: ref %AdaptStruct = var h // CHECK:STDOUT: %g.ref: %AdaptStruct = name_ref g, %g @@ -758,8 +766,8 @@ fn InTuple(c: (AdaptStruct, u32)) -> (AdaptStruct, u32) { // CHECK:STDOUT: fn @InTuple(%c.param: %tuple.type.80b) -> %return.param: %tuple.type.80b { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %tuple.type.80b = binding_pattern d -// CHECK:STDOUT: %.loc14_3.1: %tuple.type.80b = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.31d = binding_pattern d +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.31d = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %tuple.type.80b = var d // CHECK:STDOUT: %c.ref: %tuple.type.80b = name_ref c, %c diff --git a/toolchain/check/testdata/class/adapter/extend_adapt.carbon b/toolchain/check/testdata/class/adapter/extend_adapt.carbon index e07ac10bd86b..50d0e53172fa 100644 --- a/toolchain/check/testdata/class/adapter/extend_adapt.carbon +++ b/toolchain/check/testdata/class/adapter/extend_adapt.carbon @@ -149,6 +149,7 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClass.elem: type = unbound_element_type %SomeClass, %i32 [concrete] // CHECK:STDOUT: %StaticMemberFunction.type: type = fn_type @StaticMemberFunction [concrete] // CHECK:STDOUT: %StaticMemberFunction: %StaticMemberFunction.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.080: type = pattern_type %SomeClassAdapter [concrete] // CHECK:STDOUT: %AdapterMethod.type: type = fn_type @AdapterMethod [concrete] // CHECK:STDOUT: %AdapterMethod: %AdapterMethod.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] @@ -180,16 +181,16 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClass.decl: type = class_decl @SomeClass [concrete = constants.%SomeClass] {} {} // CHECK:STDOUT: %SomeClassAdapter.decl.loc15: type = class_decl @SomeClassAdapter [concrete = constants.%SomeClassAdapter] {} {} // CHECK:STDOUT: %TestStaticMemberFunction.decl: %TestStaticMemberFunction.type = fn_decl @TestStaticMemberFunction [concrete = constants.%TestStaticMemberFunction] { -// CHECK:STDOUT: %a.patt: %SomeClassAdapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %SomeClassAdapter = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.080 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.080 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %SomeClassAdapter = value_param call_param0 // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl.loc4 [concrete = constants.%SomeClassAdapter] // CHECK:STDOUT: %a: %SomeClassAdapter = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAdapterMethod.decl: %TestAdapterMethod.type = fn_decl @TestAdapterMethod [concrete = constants.%TestAdapterMethod] { -// CHECK:STDOUT: %a.patt: %SomeClassAdapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %SomeClassAdapter = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.080 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.080 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %SomeClassAdapter = value_param call_param0 // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl.loc4 [concrete = constants.%SomeClassAdapter] @@ -220,8 +221,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %.loc8: %SomeClass.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %StaticMemberFunction.decl: %StaticMemberFunction.type = fn_decl @StaticMemberFunction [concrete = constants.%StaticMemberFunction] {} {} // CHECK:STDOUT: %AdapterMethod.decl: %AdapterMethod.type = fn_decl @AdapterMethod [concrete = constants.%AdapterMethod] { -// CHECK:STDOUT: %self.patt: %SomeClassAdapter = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %SomeClassAdapter = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.080 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.080 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %SomeClassAdapter = value_param call_param0 // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl.loc4 [concrete = constants.%SomeClassAdapter] @@ -265,12 +266,14 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %SomeClass: type = class_type @SomeClass [concrete] +// CHECK:STDOUT: %pattern_type.3eb: type = pattern_type %SomeClass [concrete] // CHECK:STDOUT: %F.type.633: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.e19: %F.type.633 = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %SomeClassAdapter: type = class_type @SomeClassAdapter [concrete] +// CHECK:STDOUT: %pattern_type.080: type = pattern_type %SomeClassAdapter [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -294,8 +297,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClass.decl: type = class_decl @SomeClass [concrete = constants.%SomeClass] {} {} // CHECK:STDOUT: %SomeClassAdapter.decl: type = class_decl @SomeClassAdapter [concrete = constants.%SomeClassAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %a.patt: %SomeClassAdapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %SomeClassAdapter = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.080 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.080 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %SomeClassAdapter = value_param call_param0 // CHECK:STDOUT: %SomeClassAdapter.ref: type = name_ref SomeClassAdapter, file.%SomeClassAdapter.decl [concrete = constants.%SomeClassAdapter] @@ -305,8 +308,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @SomeClass { // CHECK:STDOUT: %F.decl: %F.type.633 = fn_decl @F.1 [concrete = constants.%F.e19] { -// CHECK:STDOUT: %self.patt: %SomeClass = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %SomeClass = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.3eb = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.3eb = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %SomeClass = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%SomeClass [concrete = constants.%SomeClass] @@ -356,6 +359,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b [concrete] // CHECK:STDOUT: %SomeClassAdapter: type = class_type @SomeClassAdapter [concrete] +// CHECK:STDOUT: %pattern_type.080: type = pattern_type %SomeClassAdapter [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -380,10 +385,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %SomeClass.decl: type = class_decl @SomeClass [concrete = constants.%SomeClass] {} {} // CHECK:STDOUT: %SomeClassAdapter.decl: type = class_decl @SomeClassAdapter [concrete = constants.%SomeClassAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %SomeClassAdapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %SomeClassAdapter = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.080 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.080 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -442,6 +447,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b [concrete] +// CHECK:STDOUT: %pattern_type.016: type = pattern_type %StructAdapter [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -463,10 +470,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %StructAdapter.decl: type = class_decl @StructAdapter [concrete = constants.%StructAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %StructAdapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %StructAdapter = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.016 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.016 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -510,6 +517,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %complete_type.65d: = complete_type_witness %tuple.type.d07 [concrete] +// CHECK:STDOUT: %pattern_type.ee1: type = pattern_type %TupleAdapter [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -532,10 +541,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TupleAdapter.decl: type = class_decl @TupleAdapter [concrete = constants.%TupleAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %TupleAdapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %TupleAdapter = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.ee1 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.ee1 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -575,13 +584,17 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] // CHECK:STDOUT: %MakeInt.type: type = fn_type @MakeInt [concrete] // CHECK:STDOUT: %MakeInt: %MakeInt.type = struct_value () [concrete] // CHECK:STDOUT: %IntAdapter: type = class_type @IntAdapter [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.90a: type = pattern_type %IntAdapter [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -605,10 +618,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %MakeInt.decl: %MakeInt.type = fn_decl @MakeInt [concrete = constants.%MakeInt] { -// CHECK:STDOUT: %N.patt: Core.IntLiteral = binding_pattern N -// CHECK:STDOUT: %N.param_patt: Core.IntLiteral = value_param_pattern %N.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = binding_pattern N +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern %N.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %N.param: Core.IntLiteral = value_param call_param0 // CHECK:STDOUT: %.loc4_31.1: type = splice_block %.loc4_31.3 [concrete = Core.IntLiteral] { @@ -624,10 +637,10 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %IntAdapter.decl: type = class_decl @IntAdapter [concrete = constants.%IntAdapter] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %IntAdapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %IntAdapter = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.90a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.90a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/adapter/fail_adapt_bad_decl.carbon b/toolchain/check/testdata/class/adapter/fail_adapt_bad_decl.carbon index 0ec7a7ef60a7..af92fdbbac2c 100644 --- a/toolchain/check/testdata/class/adapter/fail_adapt_bad_decl.carbon +++ b/toolchain/check/testdata/class/adapter/fail_adapt_bad_decl.carbon @@ -108,6 +108,7 @@ class C { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bad: type = class_type @Bad [concrete] // CHECK:STDOUT: %int_100: Core.IntLiteral = int_value 100 [concrete] +// CHECK:STDOUT: %pattern_type.fc4: type = pattern_type %Bad [concrete] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -129,8 +130,8 @@ class C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Bad.decl: type = class_decl @Bad [concrete = constants.%Bad] {} {} // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] { -// CHECK:STDOUT: %b.patt: %Bad = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %Bad = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.fc4 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.fc4 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %Bad = value_param call_param0 // CHECK:STDOUT: %Bad.ref: type = name_ref Bad, file.%Bad.decl [concrete = constants.%Bad] @@ -162,6 +163,7 @@ class C { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bad: type = class_type @Bad [concrete] // CHECK:STDOUT: %int_100: Core.IntLiteral = int_value 100 [concrete] +// CHECK:STDOUT: %pattern_type.fc4: type = pattern_type %Bad [concrete] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -183,8 +185,8 @@ class C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Bad.decl: type = class_decl @Bad [concrete = constants.%Bad] {} {} // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] { -// CHECK:STDOUT: %b.patt: %Bad = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %Bad = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.fc4 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.fc4 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %Bad = value_param call_param0 // CHECK:STDOUT: %Bad.ref: type = name_ref Bad, file.%Bad.decl [concrete = constants.%Bad] diff --git a/toolchain/check/testdata/class/adapter/fail_adapt_with_base.carbon b/toolchain/check/testdata/class/adapter/fail_adapt_with_base.carbon index a80bd606cebf..dabdac25cf19 100644 --- a/toolchain/check/testdata/class/adapter/fail_adapt_with_base.carbon +++ b/toolchain/check/testdata/class/adapter/fail_adapt_with_base.carbon @@ -27,6 +27,7 @@ base class AdaptWithVirtual { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %AdaptWithVirtual: type = class_type @AdaptWithVirtual [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %AdaptWithVirtual [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -60,8 +61,8 @@ base class AdaptWithVirtual { // CHECK:STDOUT: // CHECK:STDOUT: class @AdaptWithVirtual { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %AdaptWithVirtual = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AdaptWithVirtual = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AdaptWithVirtual = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AdaptWithVirtual [concrete = constants.%AdaptWithVirtual] diff --git a/toolchain/check/testdata/class/adapter/init_adapt.carbon b/toolchain/check/testdata/class/adapter/init_adapt.carbon index e33f6e605ca1..d6a1b0067e55 100644 --- a/toolchain/check/testdata/class/adapter/init_adapt.carbon +++ b/toolchain/check/testdata/class/adapter/init_adapt.carbon @@ -102,6 +102,7 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %AdaptC: type = class_type @AdaptC [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -121,6 +122,7 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %bound_method.b92: = bound_method %int_2.ecc, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%int_1.5d2, %int_2.ef8) [concrete] +// CHECK:STDOUT: %pattern_type.a1a: type = pattern_type %AdaptC [concrete] // CHECK:STDOUT: %MakeC.type: type = fn_type @MakeC [concrete] // CHECK:STDOUT: %MakeC: %MakeC.type = struct_value () [concrete] // CHECK:STDOUT: %MakeAdaptC.type: type = fn_type @MakeAdaptC [concrete] @@ -153,7 +155,7 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %AdaptC.decl: type = class_decl @AdaptC [concrete = constants.%AdaptC] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref.loc13: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %impl.elem0.loc13_27.1: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] @@ -178,41 +180,41 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %.loc13_27.10: ref %C = converted @__global_init.%.loc13, %.loc13_27.9 // CHECK:STDOUT: %a: ref %C = bind_name a, %.loc13_27.10 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %AdaptC = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.a1a = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %AdaptC.ref.loc15: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %b: ref %AdaptC = bind_name b, @__global_init.%.loc15_19.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref.loc17: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, @__global_init.%.loc17_14.2 // CHECK:STDOUT: %MakeC.decl: %MakeC.type = fn_decl @MakeC [concrete = constants.%MakeC] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeAdaptC.decl: %MakeAdaptC.type = fn_decl @MakeAdaptC [concrete = constants.%MakeAdaptC] { -// CHECK:STDOUT: %return.patt: %AdaptC = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %AdaptC = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a1a = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a1a = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptC.ref: type = name_ref AdaptC, file.%AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %return.param: ref %AdaptC = out_param call_param0 // CHECK:STDOUT: %return: ref %AdaptC = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %AdaptC = binding_pattern d -// CHECK:STDOUT: %.loc23: %AdaptC = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.a1a = binding_pattern d +// CHECK:STDOUT: %.loc23: %pattern_type.a1a = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %AdaptC = var d // CHECK:STDOUT: %AdaptC.ref.loc23: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %d: ref %AdaptC = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %C = binding_pattern e -// CHECK:STDOUT: %.loc25: %C = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.c48 = binding_pattern e +// CHECK:STDOUT: %.loc25: %pattern_type.c48 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %C = var e // CHECK:STDOUT: %C.ref.loc25: type = name_ref C, %C.decl [concrete = constants.%C] @@ -291,6 +293,7 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %AdaptC: type = class_type @AdaptC [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -310,6 +313,7 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %bound_method.b92: = bound_method %int_2.ecc, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%int_1.5d2, %int_2.ef8) [concrete] +// CHECK:STDOUT: %pattern_type.a1a: type = pattern_type %AdaptC [concrete] // CHECK:STDOUT: %MakeC.type: type = fn_type @MakeC [concrete] // CHECK:STDOUT: %MakeC: %MakeC.type = struct_value () [concrete] // CHECK:STDOUT: %MakeAdaptC.type: type = fn_type @MakeAdaptC [concrete] @@ -342,7 +346,7 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %AdaptC.decl: type = class_decl @AdaptC [concrete = constants.%AdaptC] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref.loc13: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %impl.elem0.loc13_27.1: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] @@ -367,43 +371,43 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: %.loc13_27.10: ref %C = converted @__global_init.%.loc13, %.loc13_27.9 // CHECK:STDOUT: %a: ref %C = bind_name a, %.loc13_27.10 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %AdaptC = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.a1a = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %AdaptC.ref.loc24: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %.loc24: %AdaptC = converted @__global_init.%a.ref, [concrete = ] // CHECK:STDOUT: %b: %AdaptC = bind_name b, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref.loc33: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc33: %C = converted @__global_init.%b.ref, [concrete = ] // CHECK:STDOUT: %c: %C = bind_name c, // CHECK:STDOUT: %MakeC.decl: %MakeC.type = fn_decl @MakeC [concrete = constants.%MakeC] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeAdaptC.decl: %MakeAdaptC.type = fn_decl @MakeAdaptC [concrete = constants.%MakeAdaptC] { -// CHECK:STDOUT: %return.patt: %AdaptC = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %AdaptC = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a1a = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a1a = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %AdaptC.ref: type = name_ref AdaptC, file.%AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %return.param: ref %AdaptC = out_param call_param0 // CHECK:STDOUT: %return: ref %AdaptC = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %AdaptC = binding_pattern d -// CHECK:STDOUT: %.loc46: %AdaptC = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.a1a = binding_pattern d +// CHECK:STDOUT: %.loc46: %pattern_type.a1a = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %AdaptC = var d // CHECK:STDOUT: %AdaptC.ref.loc46: type = name_ref AdaptC, %AdaptC.decl [concrete = constants.%AdaptC] // CHECK:STDOUT: %d: ref %AdaptC = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %C = binding_pattern e -// CHECK:STDOUT: %.loc55: %C = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.c48 = binding_pattern e +// CHECK:STDOUT: %.loc55: %pattern_type.c48 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %C = var e // CHECK:STDOUT: %C.ref.loc55: type = name_ref C, %C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/class/base.carbon b/toolchain/check/testdata/class/base.carbon index bb5d27e566b7..6be0e7b14372 100644 --- a/toolchain/check/testdata/class/base.carbon +++ b/toolchain/check/testdata/class/base.carbon @@ -59,6 +59,7 @@ class Derived { // CHECK:STDOUT: %Derived.elem.344: type = unbound_element_type %Derived, %i32 [concrete] // CHECK:STDOUT: %struct_type.base.d.f8f: type = struct_type {.base: %Base, .d: %i32} [concrete] // CHECK:STDOUT: %complete_type.da6: = complete_type_witness %struct_type.base.d.f8f [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] @@ -84,6 +85,7 @@ class Derived { // CHECK:STDOUT: %Derived.val: %Derived = struct_value (%Base.val, %int_7.0b1) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -109,18 +111,18 @@ class Derived { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %Derived = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Derived = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.fb9 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.fb9 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] // CHECK:STDOUT: %return.param: ref %Derived = out_param call_param0 // CHECK:STDOUT: %return: ref %Derived = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %d.patt: %Derived = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %Derived = value_param_pattern %d.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type.d07 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.d07 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %d.patt: %pattern_type.fb9 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.fb9 = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.511 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.511 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc17_27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc17_27: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/base_field.carbon b/toolchain/check/testdata/class/base_field.carbon index 1d87a3efb4a3..36e16834a06c 100644 --- a/toolchain/check/testdata/class/base_field.carbon +++ b/toolchain/check/testdata/class/base_field.carbon @@ -40,7 +40,9 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: %struct_type.base.d.e.6a7: type = struct_type {.base: %Base, .d: %i32, .e: %i32} [concrete] // CHECK:STDOUT: %complete_type.401: = complete_type_witness %struct_type.base.d.e.6a7 [concrete] // CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -64,10 +66,10 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %p.patt: %ptr.404 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.404 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.235 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.235 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.605 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.605 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.fe8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.fe8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/base_method.carbon b/toolchain/check/testdata/class/base_method.carbon index 94cb7e7edcd0..17c82d2dd900 100644 --- a/toolchain/check/testdata/class/base_method.carbon +++ b/toolchain/check/testdata/class/base_method.carbon @@ -35,6 +35,8 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] // CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] +// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] @@ -57,6 +59,7 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %struct_type.base.b1e: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base.b1e [concrete] // CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -80,9 +83,9 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %ptr.11f = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.11f = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc17_11: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc17_11: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc17: %ptr.11f = value_param call_param0 // CHECK:STDOUT: %.loc17_26: type = splice_block %ptr.loc17 [concrete = constants.%ptr.11f] { @@ -93,8 +96,8 @@ fn Call(p: Derived*) { // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %p.patt: %ptr.404 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.404 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.605 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.605 = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.404 = value_param call_param0 // CHECK:STDOUT: %.loc25: type = splice_block %ptr [concrete = constants.%ptr.404] { @@ -110,9 +113,9 @@ fn Call(p: Derived*) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc12: %Base.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %ptr.11f = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.11f = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc17_11: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc17_11: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc14: %ptr.11f = value_param call_param0 // CHECK:STDOUT: %.loc14: type = splice_block %ptr.loc14 [concrete = constants.%ptr.11f] { diff --git a/toolchain/check/testdata/class/base_method_qualified.carbon b/toolchain/check/testdata/class/base_method_qualified.carbon index 807e249a7cd1..5113ba77ac6d 100644 --- a/toolchain/check/testdata/class/base_method_qualified.carbon +++ b/toolchain/check/testdata/class/base_method_qualified.carbon @@ -43,10 +43,13 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Base: type = class_type @Base [concrete] +// CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.7c6: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.d17: %F.type.7c6 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %G.type.6ee: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %G.663: %G.type.6ee = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -61,6 +64,7 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %CallIndirect.type: type = fn_type @CallIndirect [concrete] // CHECK:STDOUT: %CallIndirect: %CallIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %PassDerivedToBase.type: type = fn_type @PassDerivedToBase [concrete] @@ -92,10 +96,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl.loc18: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %a.patt: %Derived = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Derived = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.fb9 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.fb9 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -106,10 +110,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallIndirect.decl: %CallIndirect.type = fn_decl @CallIndirect [concrete = constants.%CallIndirect] { -// CHECK:STDOUT: %p.patt: %ptr.404 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.404 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.605 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.605 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -123,10 +127,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %PassDerivedToBase.decl: %PassDerivedToBase.type = fn_decl @PassDerivedToBase [concrete = constants.%PassDerivedToBase] { -// CHECK:STDOUT: %a.patt: %Derived = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Derived = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.fb9 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.fb9 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -137,10 +141,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %PassDerivedToBaseIndirect.decl: %PassDerivedToBaseIndirect.type = fn_decl @PassDerivedToBaseIndirect [concrete = constants.%PassDerivedToBaseIndirect] { -// CHECK:STDOUT: %p.patt: %ptr.404 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.404 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.605 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.605 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -159,16 +163,16 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc19: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.5da = fn_decl @F.2 [concrete = constants.%F.fa3] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] // CHECK:STDOUT: %self: %Derived = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type.04c = fn_decl @G.2 [concrete = constants.%G.07e] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -189,10 +193,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %F.decl: %F.type.7c6 = fn_decl @F.1 [concrete = constants.%F.d17] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -203,10 +207,10 @@ fn PassDerivedToBaseIndirect(p: Derived*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type.6ee = fn_decl @G.1 [concrete = constants.%G.663] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/base_method_shadow.carbon b/toolchain/check/testdata/class/base_method_shadow.carbon index 15fae5639256..78fa5f241242 100644 --- a/toolchain/check/testdata/class/base_method_shadow.carbon +++ b/toolchain/check/testdata/class/base_method_shadow.carbon @@ -38,6 +38,8 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] +// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %F.type.649: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.485: %F.type.649 = struct_value () [concrete] @@ -46,6 +48,7 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %A [concrete] // CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] // CHECK:STDOUT: %F.type.8c6: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.92a: %F.type.8c6 = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.953: type = struct_type {.base: %A} [concrete] @@ -53,6 +56,7 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %F.type.c29: type = fn_type @F.3 [concrete] // CHECK:STDOUT: %F.437: %F.type.c29 = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ff: type = struct_type {.base: %B} [concrete] @@ -60,6 +64,7 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %D.elem: type = unbound_element_type %D, %B [concrete] // CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] +// CHECK:STDOUT: %pattern_type.a94: type = pattern_type %ptr.19c [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -86,14 +91,14 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %a.patt: %ptr.6db = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.6db = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %ptr.e79 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %ptr.e79 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: %ptr.019 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %ptr.019 = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %d.patt: %ptr.19c = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %ptr.19c = value_param_pattern %d.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.5f8 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.5f8 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.960 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.960 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.44a = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.44a = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %d.patt: %pattern_type.a94 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.a94 = value_param_pattern %d.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.6db = value_param call_param0 // CHECK:STDOUT: %.loc29_13: type = splice_block %ptr.loc29_13 [concrete = constants.%ptr.6db] { @@ -124,9 +129,9 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %F.decl: %F.type.649 = fn_decl @F.1 [concrete = constants.%F.485] { -// CHECK:STDOUT: %self.patt: %ptr.6db = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.6db = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc12_8: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc12_8: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 // CHECK:STDOUT: %.loc12_23: type = splice_block %ptr [concrete = constants.%ptr.6db] { @@ -148,9 +153,9 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc16: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.8c6 = fn_decl @F.2 [concrete = constants.%F.92a] { -// CHECK:STDOUT: %self.patt: %ptr.e79 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.e79 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc17_8: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.960 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.960 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc17_8: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.e79 = value_param call_param0 // CHECK:STDOUT: %.loc17_23: type = splice_block %ptr [concrete = constants.%ptr.e79] { @@ -175,9 +180,9 @@ fn Call(a: A*, b: B*, c: C*, d: D*) { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc21: %C.elem = base_decl %B.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.c29 = fn_decl @F.3 [concrete = constants.%F.437] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc22_8: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc22_8: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc22_23: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/class/basic.carbon b/toolchain/check/testdata/class/basic.carbon index 5dcd23d79c6b..e3d2b47a0a8a 100644 --- a/toolchain/check/testdata/class/basic.carbon +++ b/toolchain/check/testdata/class/basic.carbon @@ -32,6 +32,7 @@ fn Run() -> i32 { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -74,10 +75,10 @@ fn Run() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc21_23: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc21_23: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -91,8 +92,8 @@ fn Run() -> i32 { // CHECK:STDOUT: %return.loc21: ref %i32 = return_slot %return.param.loc21 // CHECK:STDOUT: } // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -105,10 +106,10 @@ fn Run() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12_19: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12_19: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -122,10 +123,10 @@ fn Run() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc16_19: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16_19: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/complete_in_member_fn.carbon b/toolchain/check/testdata/class/complete_in_member_fn.carbon index 339348e57c9f..931a3442394e 100644 --- a/toolchain/check/testdata/class/complete_in_member_fn.carbon +++ b/toolchain/check/testdata/class/complete_in_member_fn.carbon @@ -18,8 +18,10 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] @@ -46,10 +48,10 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/compound_field.carbon b/toolchain/check/testdata/class/compound_field.carbon index f8490a516703..6027cf9c1d46 100644 --- a/toolchain/check/testdata/class/compound_field.carbon +++ b/toolchain/check/testdata/class/compound_field.carbon @@ -51,12 +51,16 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %Derived.elem.344: type = unbound_element_type %Derived, %i32 [concrete] // CHECK:STDOUT: %struct_type.base.d.e.6a7: type = struct_type {.base: %Base, .d: %i32, .e: %i32} [concrete] // CHECK:STDOUT: %complete_type.401: = complete_type_witness %struct_type.base.d.e.6a7 [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessDerived.type: type = fn_type @AccessDerived [concrete] // CHECK:STDOUT: %AccessDerived: %AccessDerived.type = struct_value () [concrete] // CHECK:STDOUT: %AccessBase.type: type = fn_type @AccessBase [concrete] // CHECK:STDOUT: %AccessBase: %AccessBase.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %AccessDerivedIndirect.type: type = fn_type @AccessDerivedIndirect [concrete] // CHECK:STDOUT: %AccessDerivedIndirect: %AccessDerivedIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %AccessBaseIndirect.type: type = fn_type @AccessBaseIndirect [concrete] @@ -85,10 +89,10 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %AccessDerived.decl: %AccessDerived.type = fn_decl @AccessDerived [concrete = constants.%AccessDerived] { -// CHECK:STDOUT: %d.patt: %Derived = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %Derived = value_param_pattern %d.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %d.patt: %pattern_type.fb9 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.fb9 = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -99,10 +103,10 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessBase.decl: %AccessBase.type = fn_decl @AccessBase [concrete = constants.%AccessBase] { -// CHECK:STDOUT: %d.patt: %Derived = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %Derived = value_param_pattern %d.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %d.patt: %pattern_type.fb9 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.fb9 = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -113,10 +117,10 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessDerivedIndirect.decl: %AccessDerivedIndirect.type = fn_decl @AccessDerivedIndirect [concrete = constants.%AccessDerivedIndirect] { -// CHECK:STDOUT: %p.patt: %ptr.404 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.404 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.235 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.235 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.605 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.605 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.fe8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.fe8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -131,10 +135,10 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: %return: ref %ptr.235 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessBaseIndirect.decl: %AccessBaseIndirect.type = fn_decl @AccessBaseIndirect [concrete = constants.%AccessBaseIndirect] { -// CHECK:STDOUT: %p.patt: %ptr.404 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.404 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.235 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.235 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.605 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.605 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.fe8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.fe8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/cross_package_import.carbon b/toolchain/check/testdata/class/cross_package_import.carbon index ae627aeda8a5..1b2f65e76496 100644 --- a/toolchain/check/testdata/class/cross_package_import.carbon +++ b/toolchain/check/testdata/class/cross_package_import.carbon @@ -191,6 +191,7 @@ var c: Other.C = {}; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -217,8 +218,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc6_13: type = splice_block %C.ref [concrete = constants.%C] { @@ -298,6 +299,7 @@ var c: Other.C = {}; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -325,8 +327,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc19_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc19_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc19_13: type = splice_block %C.ref [concrete = constants.%C] { @@ -358,6 +360,7 @@ var c: Other.C = {}; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -385,8 +388,8 @@ var c: Other.C = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc19_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc19_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc19_13: type = splice_block %C.ref [concrete = constants.%C] { diff --git a/toolchain/check/testdata/class/derived_to_base.carbon b/toolchain/check/testdata/class/derived_to_base.carbon index f6b7024bc536..7b8c3478eb42 100644 --- a/toolchain/check/testdata/class/derived_to_base.carbon +++ b/toolchain/check/testdata/class/derived_to_base.carbon @@ -58,16 +58,21 @@ fn ConvertInit() { // CHECK:STDOUT: %struct_type.base.c.8e2: type = struct_type {.base: %B, .c: %i32} [concrete] // CHECK:STDOUT: %complete_type.58a: = complete_type_witness %struct_type.base.c.8e2 [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] // CHECK:STDOUT: %ConvertCToB.type: type = fn_type @ConvertCToB [concrete] // CHECK:STDOUT: %ConvertCToB: %ConvertCToB.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] +// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] // CHECK:STDOUT: %ConvertBToA.type: type = fn_type @ConvertBToA [concrete] // CHECK:STDOUT: %ConvertBToA: %ConvertBToA.type = struct_value () [concrete] // CHECK:STDOUT: %ConvertCToA.type: type = fn_type @ConvertCToA [concrete] // CHECK:STDOUT: %ConvertCToA: %ConvertCToA.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %ConvertValue.type: type = fn_type @ConvertValue [concrete] // CHECK:STDOUT: %ConvertValue: %ConvertValue.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %ConvertRef.type: type = fn_type @ConvertRef [concrete] // CHECK:STDOUT: %ConvertRef: %ConvertRef.type = struct_value () [concrete] // CHECK:STDOUT: %ConvertInit.type: type = fn_type @ConvertInit [concrete] @@ -128,10 +133,10 @@ fn ConvertInit() { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %ConvertCToB.decl: %ConvertCToB.type = fn_decl @ConvertCToB [concrete = constants.%ConvertCToB] { -// CHECK:STDOUT: %p.patt: %ptr.019 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.019 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.e79 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.e79 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.44a = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.44a = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.960 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.960 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %ptr.loc25_27: type = ptr_type %B.ref [concrete = constants.%ptr.e79] @@ -145,10 +150,10 @@ fn ConvertInit() { // CHECK:STDOUT: %return: ref %ptr.e79 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertBToA.decl: %ConvertBToA.type = fn_decl @ConvertBToA [concrete = constants.%ConvertBToA] { -// CHECK:STDOUT: %p.patt: %ptr.e79 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e79 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.6db = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.6db = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.960 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.960 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5f8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5f8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %ptr.loc26_27: type = ptr_type %A.ref [concrete = constants.%ptr.6db] @@ -162,10 +167,10 @@ fn ConvertInit() { // CHECK:STDOUT: %return: ref %ptr.6db = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertCToA.decl: %ConvertCToA.type = fn_decl @ConvertCToA [concrete = constants.%ConvertCToA] { -// CHECK:STDOUT: %p.patt: %ptr.019 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.019 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.6db = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.6db = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.44a = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.44a = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5f8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5f8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %ptr.loc27_27: type = ptr_type %A.ref [concrete = constants.%ptr.6db] @@ -179,18 +184,18 @@ fn ConvertInit() { // CHECK:STDOUT: %return: ref %ptr.6db = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertValue.decl: %ConvertValue.type = fn_decl @ConvertValue [concrete = constants.%ConvertValue] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = bind_name c, %c.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConvertRef.decl: %ConvertRef.type = fn_decl @ConvertRef [concrete = constants.%ConvertRef] { -// CHECK:STDOUT: %c.patt: %ptr.019 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %ptr.019 = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.6db = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.6db = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.44a = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.44a = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5f8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5f8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc33: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %ptr.loc33_26: type = ptr_type %A.ref.loc33 [concrete = constants.%ptr.6db] @@ -289,7 +294,7 @@ fn ConvertInit() { // CHECK:STDOUT: fn @ConvertValue(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %C = name_ref c, %c // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -315,7 +320,7 @@ fn ConvertInit() { // CHECK:STDOUT: fn @ConvertInit() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc38_39.1: %struct_type.a.a6c = struct_literal (%int_1) diff --git a/toolchain/check/testdata/class/fail_addr_not_self.carbon b/toolchain/check/testdata/class/fail_addr_not_self.carbon index f3dd708ad115..b5c4575b0d9c 100644 --- a/toolchain/check/testdata/class/fail_addr_not_self.carbon +++ b/toolchain/check/testdata/class/fail_addr_not_self.carbon @@ -28,7 +28,8 @@ class Class { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Class [concrete] // CHECK:STDOUT: %a: %ptr = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %ptr = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -55,7 +56,7 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt.loc16_13.1: %ptr = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc16_13.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc16_13.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc16_13.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] @@ -64,8 +65,8 @@ class Class { // CHECK:STDOUT: %a.loc16_13.2: %ptr = bind_symbolic_name a, 0 [symbolic = %a.loc16_13.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %b.patt: %ptr = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %ptr = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc22: type = splice_block %ptr [concrete = constants.%ptr] { @@ -87,7 +88,7 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%a.loc16_13.2: %ptr) { // CHECK:STDOUT: %a.loc16_13.1: %ptr = bind_symbolic_name a, 0 [symbolic = %a.loc16_13.1 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc16_13.2: %ptr = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc16_13.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc16_13.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc16_13.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/fail_addr_self.carbon b/toolchain/check/testdata/class/fail_addr_self.carbon index d95c0bd46a75..bf6452d0910d 100644 --- a/toolchain/check/testdata/class/fail_addr_self.carbon +++ b/toolchain/check/testdata/class/fail_addr_self.carbon @@ -40,9 +40,12 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %F.type.f1b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.1f2: %F.type.f1b = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -67,10 +70,10 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.761 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %Class = value_param call_param0 // CHECK:STDOUT: %Class.ref.loc20_9: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] @@ -86,9 +89,9 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type.f1b = fn_decl @F.1 [concrete = constants.%F.1f2] { -// CHECK:STDOUT: %self.patt: %ptr.e71 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.e71 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc12_8: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc12_8: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 // CHECK:STDOUT: %.loc12_24: type = splice_block %ptr [concrete = constants.%ptr.e71] { @@ -98,8 +101,8 @@ fn F(c: Class, p: Class*) { // CHECK:STDOUT: %self: %ptr.e71 = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/fail_base_bad_type.carbon b/toolchain/check/testdata/class/fail_base_bad_type.carbon index 90ce8c159d40..9252e1659221 100644 --- a/toolchain/check/testdata/class/fail_base_bad_type.carbon +++ b/toolchain/check/testdata/class/fail_base_bad_type.carbon @@ -183,8 +183,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %DeriveFromError: type = class_type @DeriveFromError [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %DeriveFromError [concrete] +// CHECK:STDOUT: %pattern_type.928: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseError.type: type = fn_type @AccessMemberWithInvalidBaseError [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseError: %AccessMemberWithInvalidBaseError.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -207,10 +209,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %DeriveFromError.decl: type = class_decl @DeriveFromError [concrete = constants.%DeriveFromError] {} {} // CHECK:STDOUT: %AccessMemberWithInvalidBaseError.decl: %AccessMemberWithInvalidBaseError.type = fn_decl @AccessMemberWithInvalidBaseError [concrete = constants.%AccessMemberWithInvalidBaseError] { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.928 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.928 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -254,7 +256,9 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %DeriveFromNonType: type = class_type @DeriveFromNonType [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %DeriveFromNonType [concrete] +// CHECK:STDOUT: %pattern_type.ffe: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBasNonType.type: type = fn_type @AccessMemberWithInvalidBasNonType [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBasNonType: %AccessMemberWithInvalidBasNonType.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -277,10 +281,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %DeriveFromNonType.decl: type = class_decl @DeriveFromNonType [concrete = constants.%DeriveFromNonType] {} {} // CHECK:STDOUT: %AccessMemberWithInvalidBasNonType.decl: %AccessMemberWithInvalidBasNonType.type = fn_decl @AccessMemberWithInvalidBasNonType [concrete = constants.%AccessMemberWithInvalidBasNonType] { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.ffe = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.ffe = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -328,9 +332,12 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %i32} [concrete] // CHECK:STDOUT: %complete_type.386: = complete_type_witness %struct_type.base [concrete] // CHECK:STDOUT: %ptr.45c: type = ptr_type %DeriveFromi32 [concrete] +// CHECK:STDOUT: %pattern_type.b82: type = pattern_type %ptr.45c [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %ConvertToBadBasei32.type: type = fn_type @ConvertToBadBasei32 [concrete] // CHECK:STDOUT: %ConvertToBadBasei32: %ConvertToBadBasei32.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBasei32.type: type = fn_type @AccessMemberWithInvalidBasei32 [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBasei32: %AccessMemberWithInvalidBasei32.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -353,10 +360,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %DeriveFromi32.decl: type = class_decl @DeriveFromi32 [concrete = constants.%DeriveFromi32] {} {} // CHECK:STDOUT: %ConvertToBadBasei32.decl: %ConvertToBadBasei32.type = fn_decl @ConvertToBadBasei32 [concrete = constants.%ConvertToBadBasei32] { -// CHECK:STDOUT: %p.patt: %ptr.45c = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.45c = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.235 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.235 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.b82 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.b82 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.fe8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.fe8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -371,10 +378,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %return: ref %ptr.235 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMemberWithInvalidBasei32.decl: %AccessMemberWithInvalidBasei32.type = fn_decl @AccessMemberWithInvalidBasei32 [concrete = constants.%AccessMemberWithInvalidBasei32] { -// CHECK:STDOUT: %p.patt: %ptr.45c = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.45c = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.b82 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.b82 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -432,11 +439,14 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.469: type = tuple_type (%Base) [concrete] // CHECK:STDOUT: %ptr.340: type = ptr_type %DeriveFromTuple [concrete] +// CHECK:STDOUT: %pattern_type.195: type = pattern_type %ptr.340 [concrete] // CHECK:STDOUT: %ptr.1ab: type = ptr_type %tuple.type.469 [concrete] +// CHECK:STDOUT: %pattern_type.600: type = pattern_type %ptr.1ab [concrete] // CHECK:STDOUT: %ConvertToBadBaseTuple.type: type = fn_type @ConvertToBadBaseTuple [concrete] // CHECK:STDOUT: %ConvertToBadBaseTuple: %ConvertToBadBaseTuple.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseTuple.type: type = fn_type @AccessMemberWithInvalidBaseTuple [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseTuple: %AccessMemberWithInvalidBaseTuple.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -462,10 +472,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %DeriveFromTuple.decl: type = class_decl @DeriveFromTuple [concrete = constants.%DeriveFromTuple] {} {} // CHECK:STDOUT: %ConvertToBadBaseTuple.decl: %ConvertToBadBaseTuple.type = fn_decl @ConvertToBadBaseTuple [concrete = constants.%ConvertToBadBaseTuple] { -// CHECK:STDOUT: %p.patt: %ptr.340 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.340 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.1ab = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.1ab = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.195 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.195 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.600 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.600 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc21_56: %tuple.type.85c = tuple_literal (%Base.ref) @@ -481,10 +491,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %return: ref %ptr.1ab = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMemberWithInvalidBaseTuple.decl: %AccessMemberWithInvalidBaseTuple.type = fn_decl @AccessMemberWithInvalidBaseTuple [concrete = constants.%AccessMemberWithInvalidBaseTuple] { -// CHECK:STDOUT: %p.patt: %ptr.340 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.340 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.195 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.195 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -549,8 +559,11 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %ptr.3ee: type = ptr_type %struct_type.a.b [concrete] // CHECK:STDOUT: %ptr.df0: type = ptr_type %DeriveFromStruct [concrete] +// CHECK:STDOUT: %pattern_type.00f: type = pattern_type %ptr.df0 [concrete] +// CHECK:STDOUT: %pattern_type.8dd: type = pattern_type %ptr.3ee [concrete] // CHECK:STDOUT: %ConvertToBadBaseStruct.type: type = fn_type @ConvertToBadBaseStruct [concrete] // CHECK:STDOUT: %ConvertToBadBaseStruct: %ConvertToBadBaseStruct.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseStruct.type: type = fn_type @AccessMemberWithInvalidBaseStruct [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseStruct: %AccessMemberWithInvalidBaseStruct.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -574,10 +587,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %DeriveFromStruct.decl: type = class_decl @DeriveFromStruct [concrete = constants.%DeriveFromStruct] {} {} // CHECK:STDOUT: %ConvertToBadBaseStruct.decl: %ConvertToBadBaseStruct.type = fn_decl @ConvertToBadBaseStruct [concrete = constants.%ConvertToBadBaseStruct] { -// CHECK:STDOUT: %p.patt: %ptr.df0 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.df0 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.3ee = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.3ee = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.00f = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.00f = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.8dd = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.8dd = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc21_57: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc21_57: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -595,10 +608,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %return: ref %ptr.3ee = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMemberWithInvalidBaseStruct.decl: %AccessMemberWithInvalidBaseStruct.type = fn_decl @AccessMemberWithInvalidBaseStruct [concrete = constants.%AccessMemberWithInvalidBaseStruct] { -// CHECK:STDOUT: %p.patt: %ptr.df0 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.df0 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.00f = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.00f = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -652,11 +665,14 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] // CHECK:STDOUT: %DeriveFromIncomplete: type = class_type @DeriveFromIncomplete [concrete] // CHECK:STDOUT: %ptr.089: type = ptr_type %DeriveFromIncomplete [concrete] +// CHECK:STDOUT: %pattern_type.3d0: type = pattern_type %ptr.089 [concrete] // CHECK:STDOUT: %ptr.c62: type = ptr_type %Incomplete [concrete] +// CHECK:STDOUT: %pattern_type.275: type = pattern_type %ptr.c62 [concrete] // CHECK:STDOUT: %ConvertToBadBaseIncomplete.type: type = fn_type @ConvertToBadBaseIncomplete [concrete] // CHECK:STDOUT: %ConvertToBadBaseIncomplete: %ConvertToBadBaseIncomplete.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseIncomplete.type: type = fn_type @AccessMemberWithInvalidBaseIncomplete [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseIncomplete: %AccessMemberWithInvalidBaseIncomplete.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -682,10 +698,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %Incomplete.decl: type = class_decl @Incomplete [concrete = constants.%Incomplete] {} {} // CHECK:STDOUT: %DeriveFromIncomplete.decl: type = class_decl @DeriveFromIncomplete [concrete = constants.%DeriveFromIncomplete] {} {} // CHECK:STDOUT: %ConvertToBadBaseIncomplete.decl: %ConvertToBadBaseIncomplete.type = fn_decl @ConvertToBadBaseIncomplete [concrete = constants.%ConvertToBadBaseIncomplete] { -// CHECK:STDOUT: %p.patt: %ptr.089 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.089 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.c62 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.c62 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.3d0 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.3d0 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.275 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.275 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Incomplete.ref: type = name_ref Incomplete, file.%Incomplete.decl [concrete = constants.%Incomplete] // CHECK:STDOUT: %ptr.loc28_70: type = ptr_type %Incomplete.ref [concrete = constants.%ptr.c62] @@ -699,10 +715,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %return: ref %ptr.c62 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMemberWithInvalidBaseIncomplete.decl: %AccessMemberWithInvalidBaseIncomplete.type = fn_decl @AccessMemberWithInvalidBaseIncomplete [concrete = constants.%AccessMemberWithInvalidBaseIncomplete] { -// CHECK:STDOUT: %p.patt: %ptr.089 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.089 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.3d0 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.3d0 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -763,9 +779,12 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %struct_type.base.dae: type = struct_type {.base: %Final} [concrete] // CHECK:STDOUT: %complete_type.970: = complete_type_witness %struct_type.base.dae [concrete] // CHECK:STDOUT: %ptr.160: type = ptr_type %DeriveFromFinal [concrete] +// CHECK:STDOUT: %pattern_type.982: type = pattern_type %ptr.160 [concrete] // CHECK:STDOUT: %ptr.5f6: type = ptr_type %Final [concrete] +// CHECK:STDOUT: %pattern_type.0a2: type = pattern_type %ptr.5f6 [concrete] // CHECK:STDOUT: %ConvertToBadBaseFinal.type: type = fn_type @ConvertToBadBaseFinal [concrete] // CHECK:STDOUT: %ConvertToBadBaseFinal: %ConvertToBadBaseFinal.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseFinal_WithMember.type: type = fn_type @AccessMemberWithInvalidBaseFinal_WithMember [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseFinal_WithMember: %AccessMemberWithInvalidBaseFinal_WithMember.type = struct_value () [concrete] // CHECK:STDOUT: %AccessMemberWithInvalidBaseFinal_NoMember.type: type = fn_type @AccessMemberWithInvalidBaseFinal_NoMember [concrete] @@ -793,10 +812,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %Final.decl: type = class_decl @Final [concrete = constants.%Final] {} {} // CHECK:STDOUT: %DeriveFromFinal.decl: type = class_decl @DeriveFromFinal [concrete = constants.%DeriveFromFinal] {} {} // CHECK:STDOUT: %ConvertToBadBaseFinal.decl: %ConvertToBadBaseFinal.type = fn_decl @ConvertToBadBaseFinal [concrete = constants.%ConvertToBadBaseFinal] { -// CHECK:STDOUT: %p.patt: %ptr.160 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.160 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.5f6 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.5f6 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.982 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.982 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.0a2 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.0a2 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Final.ref: type = name_ref Final, file.%Final.decl [concrete = constants.%Final] // CHECK:STDOUT: %ptr.loc17_55: type = ptr_type %Final.ref [concrete = constants.%ptr.5f6] @@ -810,10 +829,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %return: ref %ptr.5f6 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMemberWithInvalidBaseFinal_WithMember.decl: %AccessMemberWithInvalidBaseFinal_WithMember.type = fn_decl @AccessMemberWithInvalidBaseFinal_WithMember [concrete = constants.%AccessMemberWithInvalidBaseFinal_WithMember] { -// CHECK:STDOUT: %p.patt: %ptr.160 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.160 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.982 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.982 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -827,10 +846,10 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMemberWithInvalidBaseFinal_NoMember.decl: %AccessMemberWithInvalidBaseFinal_NoMember.type = fn_decl @AccessMemberWithInvalidBaseFinal_NoMember [concrete = constants.%AccessMemberWithInvalidBaseFinal_NoMember] { -// CHECK:STDOUT: %p.patt: %ptr.160 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.160 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.982 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.982 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/fail_base_unbound.carbon b/toolchain/check/testdata/class/fail_base_unbound.carbon index 6a17537d9c23..9f808435cc34 100644 --- a/toolchain/check/testdata/class/fail_base_unbound.carbon +++ b/toolchain/check/testdata/class/fail_base_unbound.carbon @@ -30,6 +30,7 @@ let b: B = C.base; // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B [concrete] // CHECK:STDOUT: %struct_type.base.0ff: type = struct_type {.base: %B} [concrete] // CHECK:STDOUT: %complete_type.98e: = complete_type_witness %struct_type.base.0ff [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %B [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -50,7 +51,7 @@ let b: B = C.base; // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %B = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %B.ref: type = name_ref B, %B.decl [concrete = constants.%B] // CHECK:STDOUT: %b: %B = bind_name b, diff --git a/toolchain/check/testdata/class/fail_compound_type_mismatch.carbon b/toolchain/check/testdata/class/fail_compound_type_mismatch.carbon index 581d3e1569f5..66aca715fc41 100644 --- a/toolchain/check/testdata/class/fail_compound_type_mismatch.carbon +++ b/toolchain/check/testdata/class/fail_compound_type_mismatch.carbon @@ -40,6 +40,8 @@ fn AccessBInA(a: A) -> i32 { // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %i32 [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %i32} [concrete] // CHECK:STDOUT: %complete_type.ba8: = complete_type_witness %struct_type.b [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessBInA.type: type = fn_type @AccessBInA [concrete] // CHECK:STDOUT: %AccessBInA: %AccessBInA.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -64,10 +66,10 @@ fn AccessBInA(a: A) -> i32 { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %AccessBInA.decl: %AccessBInA.type = fn_decl @AccessBInA [concrete = constants.%AccessBInA] { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c10 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/fail_convert_to_invalid.carbon b/toolchain/check/testdata/class/fail_convert_to_invalid.carbon index 0ec834fd06ec..a25549d7712e 100644 --- a/toolchain/check/testdata/class/fail_convert_to_invalid.carbon +++ b/toolchain/check/testdata/class/fail_convert_to_invalid.carbon @@ -24,6 +24,7 @@ fn Make() -> C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_123: Core.IntLiteral = int_value 123 [concrete] @@ -47,8 +48,8 @@ fn Make() -> C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 diff --git a/toolchain/check/testdata/class/fail_derived_to_base.carbon b/toolchain/check/testdata/class/fail_derived_to_base.carbon index 8eaafac66b6e..fbbb16aea4c3 100644 --- a/toolchain/check/testdata/class/fail_derived_to_base.carbon +++ b/toolchain/check/testdata/class/fail_derived_to_base.carbon @@ -58,12 +58,16 @@ fn ConvertIncomplete(p: Incomplete*) -> A2* { return p; } // CHECK:STDOUT: %struct_type.base.b.618: type = struct_type {.base: %A2, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.92f: = complete_type_witness %struct_type.base.b.618 [concrete] // CHECK:STDOUT: %ptr.afe: type = ptr_type %B2 [concrete] +// CHECK:STDOUT: %pattern_type.98e: type = pattern_type %ptr.afe [concrete] // CHECK:STDOUT: %ptr.678: type = ptr_type %A1 [concrete] +// CHECK:STDOUT: %pattern_type.d72: type = pattern_type %ptr.678 [concrete] // CHECK:STDOUT: %ConvertUnrelated.type: type = fn_type @ConvertUnrelated [concrete] // CHECK:STDOUT: %ConvertUnrelated: %ConvertUnrelated.type = struct_value () [concrete] // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] // CHECK:STDOUT: %ptr.c62: type = ptr_type %Incomplete [concrete] +// CHECK:STDOUT: %pattern_type.275: type = pattern_type %ptr.c62 [concrete] // CHECK:STDOUT: %ptr.590: type = ptr_type %A2 [concrete] +// CHECK:STDOUT: %pattern_type.2c5: type = pattern_type %ptr.590 [concrete] // CHECK:STDOUT: %ConvertIncomplete.type: type = fn_type @ConvertIncomplete [concrete] // CHECK:STDOUT: %ConvertIncomplete: %ConvertIncomplete.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -92,10 +96,10 @@ fn ConvertIncomplete(p: Incomplete*) -> A2* { return p; } // CHECK:STDOUT: %A2.decl: type = class_decl @A2 [concrete = constants.%A2] {} {} // CHECK:STDOUT: %B2.decl: type = class_decl @B2 [concrete = constants.%B2] {} {} // CHECK:STDOUT: %ConvertUnrelated.decl: %ConvertUnrelated.type = fn_decl @ConvertUnrelated [concrete = constants.%ConvertUnrelated] { -// CHECK:STDOUT: %p.patt: %ptr.afe = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.afe = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.678 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.678 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.98e = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.98e = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.d72 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.d72 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %A1.ref: type = name_ref A1, file.%A1.decl [concrete = constants.%A1] // CHECK:STDOUT: %ptr.loc31_34: type = ptr_type %A1.ref [concrete = constants.%ptr.678] @@ -110,10 +114,10 @@ fn ConvertIncomplete(p: Incomplete*) -> A2* { return p; } // CHECK:STDOUT: } // CHECK:STDOUT: %Incomplete.decl: type = class_decl @Incomplete [concrete = constants.%Incomplete] {} {} // CHECK:STDOUT: %ConvertIncomplete.decl: %ConvertIncomplete.type = fn_decl @ConvertIncomplete [concrete = constants.%ConvertIncomplete] { -// CHECK:STDOUT: %p.patt: %ptr.c62 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.c62 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.590 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.590 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.275 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.275 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.2c5 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.2c5 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %A2.ref: type = name_ref A2, file.%A2.decl [concrete = constants.%A2] // CHECK:STDOUT: %ptr.loc42_43: type = ptr_type %A2.ref [concrete = constants.%ptr.590] diff --git a/toolchain/check/testdata/class/fail_field_modifiers.carbon b/toolchain/check/testdata/class/fail_field_modifiers.carbon index 8c064b51c8af..cf7c60260e40 100644 --- a/toolchain/check/testdata/class/fail_field_modifiers.carbon +++ b/toolchain/check/testdata/class/fail_field_modifiers.carbon @@ -42,6 +42,7 @@ class Class { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -89,7 +90,7 @@ class Class { // CHECK:STDOUT: %i32.loc23: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc23: %Class.elem = field_decl k, element1 [concrete] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %i32 = binding_pattern l +// CHECK:STDOUT: %l.patt: %pattern_type.7ce = binding_pattern l // CHECK:STDOUT: } // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] // CHECK:STDOUT: %.loc29_18: type = splice_block %i32.loc29 [concrete = constants.%i32] { @@ -105,7 +106,7 @@ class Class { // CHECK:STDOUT: %.loc29_24.2: %i32 = converted %int_0, %.loc29_24.1 [concrete = constants.%int_0.6a9] // CHECK:STDOUT: %l: %i32 = bind_name l, %.loc29_24.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc35_16: type = splice_block %i32.loc35 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/class/fail_generic_method.carbon b/toolchain/check/testdata/class/fail_generic_method.carbon index 9f71900933d2..6632c51c738e 100644 --- a/toolchain/check/testdata/class/fail_generic_method.carbon +++ b/toolchain/check/testdata/class/fail_generic_method.carbon @@ -15,7 +15,7 @@ class Class(T:! type) { // TODO: The follow-on errors here aren't great. Investigate whether we can // enter the scope anyway if the parameters don't match. -// CHECK:STDERR: fail_generic_method.carbon:[[@LINE+15]]:10: error: type `i32` of parameter 1 in redeclaration differs from previous parameter type `type` [RedeclParamDiffersType] +// CHECK:STDERR: fail_generic_method.carbon:[[@LINE+15]]:10: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDERR: ^ // CHECK:STDERR: fail_generic_method.carbon:[[@LINE-10]]:13: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -36,12 +36,15 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.6d6: type = fn_type @F.1, @Class(%T) [symbolic] // CHECK:STDOUT: %F.cca: %F.type.6d6 = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T} [symbolic] @@ -49,7 +52,8 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -70,7 +74,7 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc11_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: } @@ -96,7 +100,7 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc11_13.1: type) { // CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc11_13.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -111,10 +115,10 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_13.1 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: %.loc12: @Class.%Class.elem (%Class.elem) = field_decl a, element0 [concrete] // CHECK:STDOUT: %F.decl: @Class.%F.type (%F.type.6d6) = fn_decl @F.1 [symbolic = @Class.%F (constants.%F.cca)] { -// CHECK:STDOUT: %self.patt: @F.1.%Class (%Class) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Class (%Class) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %n.patt: @F.1.%T (%T) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.1.%T (%T) = value_param_pattern %n.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type.loc13_8 (%pattern_type.3c1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type.loc13_8 (%pattern_type.3c1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %n.patt: @F.1.%pattern_type.loc13_20 (%pattern_type.7dc) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.1.%pattern_type.loc13_20 (%pattern_type.7dc) = value_param_pattern %n.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Class (%Class) = value_param call_param0 // CHECK:STDOUT: %.loc13_14.1: type = splice_block %Self.ref [symbolic = %Class (constants.%Class)] { @@ -141,13 +145,15 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: generic fn @F.1(@Class.%T.loc11_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] +// CHECK:STDOUT: %pattern_type.loc13_8: type = pattern_type %Class [symbolic = %pattern_type.loc13_8 (constants.%pattern_type.3c1)] +// CHECK:STDOUT: %pattern_type.loc13_20: type = pattern_type %T [symbolic = %pattern_type.loc13_20 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Class (%Class), %n.param: @F.1.%T (%T)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(%N.loc33_10.1: %i32) { // CHECK:STDOUT: %N.loc33_10.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc33_10.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -165,6 +171,8 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: specific @F.1(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class => constants.%Class +// CHECK:STDOUT: %pattern_type.loc13_8 => constants.%pattern_type.3c1 +// CHECK:STDOUT: %pattern_type.loc13_20 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@F.1.%T) {} @@ -173,6 +181,6 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%N.51e) { // CHECK:STDOUT: %N.loc33_10.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt => constants.%N.patt.f2c // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/fail_incomplete.carbon b/toolchain/check/testdata/class/fail_incomplete.carbon index 4f5b3e294c7e..21255d37c216 100644 --- a/toolchain/check/testdata/class/fail_incomplete.carbon +++ b/toolchain/check/testdata/class/fail_incomplete.carbon @@ -183,12 +183,15 @@ class C { // CHECK:STDOUT: %Function: %Function.type = struct_value () [concrete] // CHECK:STDOUT: %CallClassFunction.type: type = fn_type @CallClassFunction [concrete] // CHECK:STDOUT: %CallClassFunction: %CallClassFunction.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %ConvertFromStruct.type: type = fn_type @ConvertFromStruct [concrete] // CHECK:STDOUT: %ConvertFromStruct: %ConvertFromStruct.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %MemberAccess.type: type = fn_type @MemberAccess [concrete] @@ -206,6 +209,7 @@ class C { // CHECK:STDOUT: %CallReturnIncomplete.type: type = fn_type @CallReturnIncomplete [concrete] // CHECK:STDOUT: %CallReturnIncomplete: %CallReturnIncomplete.type = struct_value () [concrete] // CHECK:STDOUT: %IncompleteAddrSelf: type = class_type @IncompleteAddrSelf [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] @@ -251,18 +255,18 @@ class C { // CHECK:STDOUT: %Class.ref: type = name_ref Class, %Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %global_var: = bind_name global_var, // CHECK:STDOUT: %ConvertFromStruct.decl: %ConvertFromStruct.type = fn_decl @ConvertFromStruct [concrete = constants.%ConvertFromStruct] { -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %return.param: ref %Class = out_param call_param0 // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -276,10 +280,10 @@ class C { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MemberAccess.decl: %MemberAccess.type = fn_decl @MemberAccess [concrete = constants.%MemberAccess] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -293,10 +297,10 @@ class C { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Copy.decl: %Copy.type = fn_decl @Copy [concrete = constants.%Copy] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref.loc73_23: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %p.param: %ptr.e71 = value_param call_param0 @@ -309,8 +313,8 @@ class C { // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Let.decl: %Let.type = fn_decl @Let [concrete = constants.%Let] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.e71 = value_param call_param0 // CHECK:STDOUT: %.loc77: type = splice_block %ptr [concrete = constants.%ptr.e71] { @@ -320,24 +324,24 @@ class C { // CHECK:STDOUT: %p: %ptr.e71 = bind_name p, %p.param // CHECK:STDOUT: } // CHECK:STDOUT: %TakeIncomplete.decl: %TakeIncomplete.type = fn_decl @TakeIncomplete [concrete = constants.%TakeIncomplete] { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.761 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %Class = value_param call_param0 // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %c: %Class = bind_name c, %c.param // CHECK:STDOUT: } // CHECK:STDOUT: %ReturnIncomplete.decl: %ReturnIncomplete.type = fn_decl @ReturnIncomplete [concrete = constants.%ReturnIncomplete] { -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %return.param: ref %Class = out_param call_param0 // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallTakeIncomplete.decl: %CallTakeIncomplete.type = fn_decl @CallTakeIncomplete [concrete = constants.%CallTakeIncomplete] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.e71 = value_param call_param0 // CHECK:STDOUT: %.loc92: type = splice_block %ptr [concrete = constants.%ptr.e71] { @@ -349,8 +353,8 @@ class C { // CHECK:STDOUT: %CallReturnIncomplete.decl: %CallReturnIncomplete.type = fn_decl @CallReturnIncomplete [concrete = constants.%CallReturnIncomplete] {} {} // CHECK:STDOUT: %IncompleteAddrSelf.decl: type = class_decl @IncompleteAddrSelf [concrete = constants.%IncompleteAddrSelf] {} {} // CHECK:STDOUT: %CallIncompleteAddrSelf.decl: %CallIncompleteAddrSelf.type = fn_decl @CallIncompleteAddrSelf [concrete = constants.%CallIncompleteAddrSelf] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.e71 = value_param call_param0 // CHECK:STDOUT: %.loc136: type = splice_block %ptr [concrete = constants.%ptr.e71] { @@ -365,9 +369,9 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: class @IncompleteAddrSelf { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %ptr.e71 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.e71 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc133_8: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc133_8: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.e71 = value_param call_param0 // CHECK:STDOUT: %.loc133_24: type = splice_block %ptr [concrete = constants.%ptr.e71] { diff --git a/toolchain/check/testdata/class/fail_init_as_inplace.carbon b/toolchain/check/testdata/class/fail_init_as_inplace.carbon index 1f90f3a71fee..a41874cb6996 100644 --- a/toolchain/check/testdata/class/fail_init_as_inplace.carbon +++ b/toolchain/check/testdata/class/fail_init_as_inplace.carbon @@ -38,10 +38,12 @@ fn F() { // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -82,8 +84,8 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr.e71 = value_param call_param0 // CHECK:STDOUT: %.loc16: type = splice_block %ptr [concrete = constants.%ptr.e71] { @@ -117,8 +119,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %.loc26_3: %Class = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %.loc26_3: %pattern_type.761 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var c // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/class/fail_memaccess_category.carbon b/toolchain/check/testdata/class/fail_memaccess_category.carbon index 310e4dd51cb3..6908607d453a 100644 --- a/toolchain/check/testdata/class/fail_memaccess_category.carbon +++ b/toolchain/check/testdata/class/fail_memaccess_category.carbon @@ -44,6 +44,8 @@ fn F(s: {.a: A}, b: B) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] +// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %F.type.649: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.485: %F.type.649 = struct_value () [concrete] @@ -53,6 +55,8 @@ fn F(s: {.a: A}, b: B) { // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %A [concrete] // CHECK:STDOUT: %struct_type.a.72c: type = struct_type {.a: %A} [concrete] // CHECK:STDOUT: %complete_type.2b9: = complete_type_witness %struct_type.a.72c [concrete] +// CHECK:STDOUT: %pattern_type.c19: type = pattern_type %struct_type.a.72c [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -75,10 +79,10 @@ fn F(s: {.a: A}, b: B) { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %s.patt: %struct_type.a.72c = binding_pattern s -// CHECK:STDOUT: %s.param_patt: %struct_type.a.72c = value_param_pattern %s.patt, call_param0 -// CHECK:STDOUT: %b.patt: %B = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %B = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %s.patt: %pattern_type.c19 = binding_pattern s +// CHECK:STDOUT: %s.param_patt: %pattern_type.c19 = value_param_pattern %s.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.049 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.049 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %s.param: %struct_type.a.72c = value_param call_param0 // CHECK:STDOUT: %.loc19: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.72c] { @@ -94,9 +98,9 @@ fn F(s: {.a: A}, b: B) { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %F.decl: %F.type.649 = fn_decl @F.1 [concrete = constants.%F.485] { -// CHECK:STDOUT: %self.patt: %ptr.6db = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.6db = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc12_8: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.5f8 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.5f8 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc12_8: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.6db = value_param call_param0 // CHECK:STDOUT: %.loc12_20: type = splice_block %ptr [concrete = constants.%ptr.6db] { diff --git a/toolchain/check/testdata/class/fail_member_of_let.carbon b/toolchain/check/testdata/class/fail_member_of_let.carbon index c97a4e3f10d8..79bd8d8eeca5 100644 --- a/toolchain/check/testdata/class/fail_member_of_let.carbon +++ b/toolchain/check/testdata/class/fail_member_of_let.carbon @@ -32,10 +32,12 @@ fn T.F() {} // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.f1b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.1f2: %F.type.f1b = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -57,7 +59,7 @@ fn T.F() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: type = binding_pattern T +// CHECK:STDOUT: %T.patt: %pattern_type.98f = binding_pattern T // CHECK:STDOUT: } // CHECK:STDOUT: %T: type = bind_name T, @__global_init.%Class.ref // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] {} {} @@ -65,8 +67,8 @@ fn T.F() {} // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type.f1b = fn_decl @F.1 [concrete = constants.%F.1f2] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/fail_method.carbon b/toolchain/check/testdata/class/fail_method.carbon index 19a6992cefe5..1943c1c21ec2 100644 --- a/toolchain/check/testdata/class/fail_method.carbon +++ b/toolchain/check/testdata/class/fail_method.carbon @@ -54,6 +54,7 @@ fn F(c: Class) { // CHECK:STDOUT: %NoSelf.type: type = fn_type @NoSelf [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %NoSelf: %NoSelf.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Class [concrete] // CHECK:STDOUT: %WithSelf.type: type = fn_type @WithSelf [concrete] // CHECK:STDOUT: %WithSelf: %WithSelf.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -82,8 +83,8 @@ fn F(c: Class) { // CHECK:STDOUT: %WithSelf.ref: %WithSelf.type = name_ref WithSelf, @Class.%WithSelf.decl [concrete = constants.%WithSelf] // CHECK:STDOUT: %A: %WithSelf.type = bind_alias A, @Class.%WithSelf.decl [concrete = constants.%WithSelf] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %Class = value_param call_param0 // CHECK:STDOUT: %Class.ref.loc18: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] @@ -94,8 +95,8 @@ fn F(c: Class) { // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %NoSelf.decl: %NoSelf.type = fn_decl @NoSelf [concrete = constants.%NoSelf] {} {} // CHECK:STDOUT: %WithSelf.decl: %WithSelf.type = fn_decl @WithSelf [concrete = constants.%WithSelf] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/fail_method_modifiers.carbon b/toolchain/check/testdata/class/fail_method_modifiers.carbon index a78ea083bf93..fd3d1f43885b 100644 --- a/toolchain/check/testdata/class/fail_method_modifiers.carbon +++ b/toolchain/check/testdata/class/fail_method_modifiers.carbon @@ -60,6 +60,7 @@ base class BaseClass { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %FinalClass: type = class_type @FinalClass [concrete] +// CHECK:STDOUT: %pattern_type.c62: type = pattern_type %FinalClass [concrete] // CHECK:STDOUT: %Abstract.type.c3e: type = fn_type @Abstract.1 [concrete] // CHECK:STDOUT: %Abstract.d21: %Abstract.type.c3e = struct_value () [concrete] // CHECK:STDOUT: %Virtual.type: type = fn_type @Virtual [concrete] @@ -67,11 +68,13 @@ base class BaseClass { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %AbstractClass: type = class_type @AbstractClass [concrete] +// CHECK:STDOUT: %pattern_type.8b7: type = pattern_type %AbstractClass [concrete] // CHECK:STDOUT: %Default.type: type = fn_type @Default [concrete] // CHECK:STDOUT: %Default: %Default.type = struct_value () [concrete] // CHECK:STDOUT: %Final.type: type = fn_type @Final [concrete] // CHECK:STDOUT: %Final: %Final.type = struct_value () [concrete] // CHECK:STDOUT: %BaseClass: type = class_type @BaseClass [concrete] +// CHECK:STDOUT: %pattern_type.cd0: type = pattern_type %BaseClass [concrete] // CHECK:STDOUT: %Abstract.type.de1: type = fn_type @Abstract.2 [concrete] // CHECK:STDOUT: %Abstract.af0: %Abstract.type.de1 = struct_value () [concrete] // CHECK:STDOUT: } @@ -98,16 +101,16 @@ base class BaseClass { // CHECK:STDOUT: // CHECK:STDOUT: class @FinalClass { // CHECK:STDOUT: %Abstract.decl: %Abstract.type.c3e = fn_decl @Abstract.1 [concrete = constants.%Abstract.d21] { -// CHECK:STDOUT: %self.patt: %FinalClass = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %FinalClass = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.c62 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c62 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %FinalClass = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FinalClass [concrete = constants.%FinalClass] // CHECK:STDOUT: %self: %FinalClass = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Virtual.decl: %Virtual.type = fn_decl @Virtual [concrete = constants.%Virtual] { -// CHECK:STDOUT: %self.patt: %FinalClass = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %FinalClass = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.c62 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c62 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %FinalClass = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FinalClass [concrete = constants.%FinalClass] @@ -125,16 +128,16 @@ base class BaseClass { // CHECK:STDOUT: // CHECK:STDOUT: class @AbstractClass { // CHECK:STDOUT: %Default.decl: %Default.type = fn_decl @Default [concrete = constants.%Default] { -// CHECK:STDOUT: %self.patt: %AbstractClass = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AbstractClass = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.8b7 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.8b7 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AbstractClass = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractClass [concrete = constants.%AbstractClass] // CHECK:STDOUT: %self: %AbstractClass = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Final.decl: %Final.type = fn_decl @Final [concrete = constants.%Final] { -// CHECK:STDOUT: %self.patt: %AbstractClass = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AbstractClass = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.8b7 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.8b7 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AbstractClass = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractClass [concrete = constants.%AbstractClass] @@ -152,8 +155,8 @@ base class BaseClass { // CHECK:STDOUT: // CHECK:STDOUT: class @BaseClass { // CHECK:STDOUT: %Abstract.decl: %Abstract.type.de1 = fn_decl @Abstract.2 [concrete = constants.%Abstract.af0] { -// CHECK:STDOUT: %self.patt: %BaseClass = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %BaseClass = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.cd0 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cd0 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %BaseClass = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%BaseClass [concrete = constants.%BaseClass] diff --git a/toolchain/check/testdata/class/fail_modifiers.carbon b/toolchain/check/testdata/class/fail_modifiers.carbon index 384add7c48fc..c49569854c96 100644 --- a/toolchain/check/testdata/class/fail_modifiers.carbon +++ b/toolchain/check/testdata/class/fail_modifiers.carbon @@ -111,6 +111,7 @@ fn AbstractWithDefinition.G[self: Self]() { // CHECK:STDOUT: %WrongOrder: type = class_type @WrongOrder [concrete] // CHECK:STDOUT: %AbstractAndBase: type = class_type @AbstractAndBase [concrete] // CHECK:STDOUT: %AbstractWithDefinition: type = class_type @AbstractWithDefinition [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %AbstractWithDefinition [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -152,8 +153,8 @@ fn AbstractWithDefinition.G[self: Self]() { // CHECK:STDOUT: %AbstractAndBase.decl: type = class_decl @AbstractAndBase [concrete = constants.%AbstractAndBase] {} {} // CHECK:STDOUT: %AbstractWithDefinition.decl: type = class_decl @AbstractWithDefinition [concrete = constants.%AbstractWithDefinition] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %AbstractWithDefinition = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AbstractWithDefinition = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc97: %AbstractWithDefinition = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc97: type = name_ref Self, constants.%AbstractWithDefinition [concrete = constants.%AbstractWithDefinition] @@ -207,16 +208,16 @@ fn AbstractWithDefinition.G[self: Self]() { // CHECK:STDOUT: // CHECK:STDOUT: class @AbstractWithDefinition { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %AbstractWithDefinition = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AbstractWithDefinition = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AbstractWithDefinition = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractWithDefinition [concrete = constants.%AbstractWithDefinition] // CHECK:STDOUT: %self: %AbstractWithDefinition = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %AbstractWithDefinition = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AbstractWithDefinition = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc91: %AbstractWithDefinition = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc91: type = name_ref Self, constants.%AbstractWithDefinition [concrete = constants.%AbstractWithDefinition] diff --git a/toolchain/check/testdata/class/fail_scope.carbon b/toolchain/check/testdata/class/fail_scope.carbon index 3f15b36cf89a..8033954c2fe2 100644 --- a/toolchain/check/testdata/class/fail_scope.carbon +++ b/toolchain/check/testdata/class/fail_scope.carbon @@ -28,6 +28,7 @@ fn G() -> i32 { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -68,8 +69,8 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -80,8 +81,8 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/fail_self.carbon b/toolchain/check/testdata/class/fail_self.carbon index 18085aeca3bd..756f002f44b2 100644 --- a/toolchain/check/testdata/class/fail_self.carbon +++ b/toolchain/check/testdata/class/fail_self.carbon @@ -60,6 +60,7 @@ fn CallWrongSelf(ws: WrongSelf) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %F.type.f1b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.1f2: %F.type.f1b = struct_value () [concrete] @@ -70,6 +71,7 @@ fn CallWrongSelf(ws: WrongSelf) { // CHECK:STDOUT: %WrongSelf: type = class_type @WrongSelf [concrete] // CHECK:STDOUT: %F.type.25f: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.3a3: %F.type.25f = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.381: type = pattern_type %WrongSelf [concrete] // CHECK:STDOUT: %CallWrongSelf.type: type = fn_type @CallWrongSelf [concrete] // CHECK:STDOUT: %CallWrongSelf: %CallWrongSelf.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -92,16 +94,16 @@ fn CallWrongSelf(ws: WrongSelf) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type.f1b = fn_decl @F.1 [concrete = constants.%F.1f2] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc25: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc25: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %self.loc25: %Class = bind_name self, %self.param.loc25 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc28: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %return.param.loc28: ref %Class = out_param call_param0 @@ -109,8 +111,8 @@ fn CallWrongSelf(ws: WrongSelf) { // CHECK:STDOUT: } // CHECK:STDOUT: %WrongSelf.decl: type = class_decl @WrongSelf [concrete = constants.%WrongSelf] {} {} // CHECK:STDOUT: %CallWrongSelf.decl: %CallWrongSelf.type = fn_decl @CallWrongSelf [concrete = constants.%CallWrongSelf] { -// CHECK:STDOUT: %ws.patt: %WrongSelf = binding_pattern ws -// CHECK:STDOUT: %ws.param_patt: %WrongSelf = value_param_pattern %ws.patt, call_param0 +// CHECK:STDOUT: %ws.patt: %pattern_type.381 = binding_pattern ws +// CHECK:STDOUT: %ws.param_patt: %pattern_type.381 = value_param_pattern %ws.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %ws.param: %WrongSelf = value_param call_param0 // CHECK:STDOUT: %WrongSelf.ref: type = name_ref WrongSelf, file.%WrongSelf.decl [concrete = constants.%WrongSelf] @@ -120,16 +122,16 @@ fn CallWrongSelf(ws: WrongSelf) { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type.f1b = fn_decl @F.1 [concrete = constants.%F.1f2] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc16: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc16: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %self.loc16: %Class = bind_name self, %self.param.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %return.param.loc18: ref %Class = out_param call_param0 @@ -147,8 +149,8 @@ fn CallWrongSelf(ws: WrongSelf) { // CHECK:STDOUT: // CHECK:STDOUT: class @WrongSelf { // CHECK:STDOUT: %F.decl: %F.type.25f = fn_decl @F.2 [concrete = constants.%F.3a3] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Class = value_param call_param0 // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] @@ -172,8 +174,8 @@ fn CallWrongSelf(ws: WrongSelf) { // CHECK:STDOUT: fn @G() -> %return.param.loc28: %Class { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %.loc33: %Class = var_pattern %self.patt +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %.loc33: %pattern_type.761 = var_pattern %self.patt // CHECK:STDOUT: } // CHECK:STDOUT: %self.var: ref %Class = var self // CHECK:STDOUT: %Self.ref.loc33: type = name_ref Self, constants.%Class [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/fail_unbound_field.carbon b/toolchain/check/testdata/class/fail_unbound_field.carbon index fa56fb2f624a..215564c9285d 100644 --- a/toolchain/check/testdata/class/fail_unbound_field.carbon +++ b/toolchain/check/testdata/class/fail_unbound_field.carbon @@ -34,6 +34,7 @@ fn G() -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.field: type = struct_type {.field: %i32} [concrete] @@ -59,8 +60,8 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -74,8 +75,8 @@ fn G() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc12: %Class.elem = field_decl field, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/fail_unknown_member.carbon b/toolchain/check/testdata/class/fail_unknown_member.carbon index 465c59671db3..2046ebc86063 100644 --- a/toolchain/check/testdata/class/fail_unknown_member.carbon +++ b/toolchain/check/testdata/class/fail_unknown_member.carbon @@ -30,6 +30,8 @@ fn G(c: Class) -> i32 { // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -51,10 +53,10 @@ fn G(c: Class) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.761 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/field_access.carbon b/toolchain/check/testdata/class/field_access.carbon index cc57166c027a..f5ba7a0beb33 100644 --- a/toolchain/check/testdata/class/field_access.carbon +++ b/toolchain/check/testdata/class/field_access.carbon @@ -32,6 +32,7 @@ fn Run() { // CHECK:STDOUT: %complete_type.cf7: = complete_type_witness %struct_type.j.k [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -42,6 +43,7 @@ fn Run() { // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.ab5: = bound_method %int_1.5b8, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.9a1: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] @@ -91,8 +93,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %.loc17: %Class = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %.loc17: %pattern_type.761 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var c // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] @@ -120,8 +122,8 @@ fn Run() { // CHECK:STDOUT: %.loc19_7: init %i32 = converted %int_2, %int.convert_checked.loc19 [concrete = constants.%int_2.ef8] // CHECK:STDOUT: assign %.loc19_4, %.loc19_7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cj.patt: %i32 = binding_pattern cj -// CHECK:STDOUT: %.loc20_3: %i32 = var_pattern %cj.patt +// CHECK:STDOUT: %cj.patt: %pattern_type.7ce = binding_pattern cj +// CHECK:STDOUT: %.loc20_3: %pattern_type.7ce = var_pattern %cj.patt // CHECK:STDOUT: } // CHECK:STDOUT: %cj.var: ref %i32 = var cj // CHECK:STDOUT: %c.ref.loc20: ref %Class = name_ref c, %c @@ -135,8 +137,8 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %cj: ref %i32 = bind_name cj, %cj.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ck.patt: %i32 = binding_pattern ck -// CHECK:STDOUT: %.loc21_3: %i32 = var_pattern %ck.patt +// CHECK:STDOUT: %ck.patt: %pattern_type.7ce = binding_pattern ck +// CHECK:STDOUT: %.loc21_3: %pattern_type.7ce = var_pattern %ck.patt // CHECK:STDOUT: } // CHECK:STDOUT: %ck.var: ref %i32 = var ck // CHECK:STDOUT: %c.ref.loc21: ref %Class = name_ref c, %c diff --git a/toolchain/check/testdata/class/field_access_in_value.carbon b/toolchain/check/testdata/class/field_access_in_value.carbon index f870cef12347..c3d87a32c36b 100644 --- a/toolchain/check/testdata/class/field_access_in_value.carbon +++ b/toolchain/check/testdata/class/field_access_in_value.carbon @@ -33,6 +33,7 @@ fn Test() { // CHECK:STDOUT: %complete_type.cf7: = complete_type_witness %struct_type.j.k [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -43,6 +44,7 @@ fn Test() { // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.ab5: = bound_method %int_1.5b8, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.9a1: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] @@ -92,8 +94,8 @@ fn Test() { // CHECK:STDOUT: fn @Test() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cv.patt: %Class = binding_pattern cv -// CHECK:STDOUT: %.loc17: %Class = var_pattern %cv.patt +// CHECK:STDOUT: %cv.patt: %pattern_type.761 = binding_pattern cv +// CHECK:STDOUT: %.loc17: %pattern_type.761 = var_pattern %cv.patt // CHECK:STDOUT: } // CHECK:STDOUT: %cv.var: ref %Class = var cv // CHECK:STDOUT: %Class.ref.loc17: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] @@ -121,14 +123,14 @@ fn Test() { // CHECK:STDOUT: %.loc19_8: init %i32 = converted %int_2, %int.convert_checked.loc19 [concrete = constants.%int_2.ef8] // CHECK:STDOUT: assign %.loc19_5, %.loc19_8 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %cv.ref.loc20: ref %Class = name_ref cv, %cv // CHECK:STDOUT: %Class.ref.loc20: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %c: ref %Class = bind_name c, %cv.ref.loc20 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %cj.patt: %i32 = binding_pattern cj -// CHECK:STDOUT: %.loc21_3: %i32 = var_pattern %cj.patt +// CHECK:STDOUT: %cj.patt: %pattern_type.7ce = binding_pattern cj +// CHECK:STDOUT: %.loc21_3: %pattern_type.7ce = var_pattern %cj.patt // CHECK:STDOUT: } // CHECK:STDOUT: %cj.var: ref %i32 = var cj // CHECK:STDOUT: %c.ref.loc21: ref %Class = name_ref c, %c @@ -142,8 +144,8 @@ fn Test() { // CHECK:STDOUT: } // CHECK:STDOUT: %cj: ref %i32 = bind_name cj, %cj.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ck.patt: %i32 = binding_pattern ck -// CHECK:STDOUT: %.loc22_3: %i32 = var_pattern %ck.patt +// CHECK:STDOUT: %ck.patt: %pattern_type.7ce = binding_pattern ck +// CHECK:STDOUT: %.loc22_3: %pattern_type.7ce = var_pattern %ck.patt // CHECK:STDOUT: } // CHECK:STDOUT: %ck.var: ref %i32 = var ck // CHECK:STDOUT: %c.ref.loc22: ref %Class = name_ref c, %c diff --git a/toolchain/check/testdata/class/forward_declared.carbon b/toolchain/check/testdata/class/forward_declared.carbon index cd54ae1e6639..27b067b54879 100644 --- a/toolchain/check/testdata/class/forward_declared.carbon +++ b/toolchain/check/testdata/class/forward_declared.carbon @@ -17,6 +17,7 @@ fn F(p: Class*) -> Class* { return p; } // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -37,10 +38,10 @@ fn F(p: Class*) -> Class* { return p; } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref.loc13_20: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %ptr.loc13_25: type = ptr_type %Class.ref.loc13_20 [concrete = constants.%ptr] diff --git a/toolchain/check/testdata/class/generic/adapt.carbon b/toolchain/check/testdata/class/generic/adapt.carbon index 990c0ee6ae87..d68126822d89 100644 --- a/toolchain/check/testdata/class/generic/adapt.carbon +++ b/toolchain/check/testdata/class/generic/adapt.carbon @@ -125,7 +125,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] @@ -142,6 +143,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.elem.476: type = unbound_element_type %C.98a, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] +// CHECK:STDOUT: %pattern_type.27e: type = pattern_type %Adapter [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -163,16 +166,16 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Adapter.decl: type = class_decl @Adapter [concrete = constants.%Adapter] {} {} // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %a.patt: %Adapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Adapter = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.27e = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.27e = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -186,7 +189,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_9.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -269,7 +272,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.239: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %struct_type.x.767: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.c07: = complete_type_witness %struct_type.x.767 [concrete] @@ -278,6 +282,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %C.elem.ed6: type = unbound_element_type %C.239, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.27e: type = pattern_type %Adapter [concrete] +// CHECK:STDOUT: %pattern_type.501: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %ImportedAccess.type: type = fn_type @ImportedAccess [concrete] // CHECK:STDOUT: %ImportedAccess: %ImportedAccess.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -293,10 +299,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.5ab: type = import_ref Main//adapt_specific_type, loc4_9, loaded [symbolic = @C.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.b5f: = import_ref Main//adapt_specific_type, loc6_1, loaded [symbolic = @C.%complete_type (constants.%complete_type.433)] -// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//adapt_specific_type, inst27 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//adapt_specific_type, inst28 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.262: @C.%C.elem (%C.elem.66c) = import_ref Main//adapt_specific_type, loc5_8, loaded [concrete = %.22b] // CHECK:STDOUT: %Main.import_ref.709: = import_ref Main//adapt_specific_type, loc10_1, loaded [concrete = constants.%complete_type.c07] -// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//adapt_specific_type, inst43 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//adapt_specific_type, inst44 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -310,10 +316,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %ImportedAccess.decl: %ImportedAccess.type = fn_decl @ImportedAccess [concrete = constants.%ImportedAccess] { -// CHECK:STDOUT: %a.patt: %Adapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Adapter = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.27e = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.27e = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.501 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.501 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -334,7 +340,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.5ab: type) [from "adapt_specific_type.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -390,7 +396,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] @@ -407,6 +414,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.elem.476: type = unbound_element_type %C.98a, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] +// CHECK:STDOUT: %pattern_type.27e: type = pattern_type %Adapter [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -429,16 +438,16 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Adapter.decl: type = class_decl @Adapter [concrete = constants.%Adapter] {} {} // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %a.patt: %Adapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Adapter = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.27e = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.27e = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -452,7 +461,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_9.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -523,7 +532,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] @@ -558,7 +568,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc7_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc7_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -567,7 +577,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc7_9.1: type) { // CHECK:STDOUT: %T.loc7_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc7_9.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -634,7 +644,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.239: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %struct_type.x.767: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.c07: = complete_type_witness %struct_type.x.767 [concrete] @@ -643,6 +654,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %C.elem.ed6: type = unbound_element_type %C.239, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.27e: type = pattern_type %Adapter [concrete] +// CHECK:STDOUT: %pattern_type.501: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %ImportedAccess.type: type = fn_type @ImportedAccess [concrete] // CHECK:STDOUT: %ImportedAccess: %ImportedAccess.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -658,10 +671,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.5ab: type = import_ref Main//extend_adapt_specific_type_library, loc7_9, loaded [symbolic = @C.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.b5f: = import_ref Main//extend_adapt_specific_type_library, loc9_1, loaded [symbolic = @C.%complete_type (constants.%complete_type.433)] -// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//extend_adapt_specific_type_library, inst27 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//extend_adapt_specific_type_library, inst28 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.262: @C.%C.elem (%C.elem.66c) = import_ref Main//extend_adapt_specific_type_library, loc8_8, loaded [concrete = %.22b] // CHECK:STDOUT: %Main.import_ref.709: = import_ref Main//extend_adapt_specific_type_library, loc13_1, loaded [concrete = constants.%complete_type.c07] -// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//extend_adapt_specific_type_library, inst43 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//extend_adapt_specific_type_library, inst44 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.19d12e.2: type = import_ref Main//extend_adapt_specific_type_library, loc12_21, loaded [concrete = constants.%C.239] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -675,10 +688,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %ImportedAccess.decl: %ImportedAccess.type = fn_decl @ImportedAccess [concrete = constants.%ImportedAccess] { -// CHECK:STDOUT: %a.patt: %Adapter = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Adapter = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.27e = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.27e = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.501 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.501 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -701,7 +714,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.5ab: type) [from "extend_adapt_specific_type_library.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -751,7 +764,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Adapter.type: type = generic_class_type @Adapter [concrete] // CHECK:STDOUT: %Adapter.generic: %Adapter.type = struct_value () [concrete] // CHECK:STDOUT: %Adapter.0e3: type = class_type @Adapter, @Adapter(%T) [symbolic] @@ -760,6 +774,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Adapter.e4c: type = class_type @Adapter, @Adapter(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.5a0: type = pattern_type %Adapter.e4c [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert [concrete] // CHECK:STDOUT: %Convert: %Convert.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -783,15 +799,15 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Adapter.decl: %Adapter.type = class_decl @Adapter [concrete = constants.%Adapter.generic] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Convert.decl: %Convert.type = fn_decl @Convert [concrete = constants.%Convert] { -// CHECK:STDOUT: %a.patt: %Adapter.e4c = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Adapter.e4c = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.5a0 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.5a0 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc8_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc8_32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -810,7 +826,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Adapter(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_15.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -859,11 +875,14 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Adapter.generic: %Adapter.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %complete_type.f87: = complete_type_witness %T [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Adapter.e4c: type = class_type @Adapter, @Adapter(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.5a0: type = pattern_type %Adapter.e4c [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %ImportedConvert.type: type = fn_type @ImportedConvert [concrete] // CHECK:STDOUT: %ImportedConvert: %ImportedConvert.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -874,6 +893,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %Adapter.58f: type = class_type @Adapter, @Adapter(%C) [concrete] +// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %Adapter.58f [concrete] // CHECK:STDOUT: %ImportedConvertLocal.type: type = fn_type @ImportedConvertLocal [concrete] // CHECK:STDOUT: %ImportedConvertLocal: %ImportedConvertLocal.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.af2: = complete_type_witness %C [concrete] @@ -889,7 +909,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.5ab: type = import_ref Main//adapt_generic_type, loc4_15, loaded [symbolic = @Adapter.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.fb3: = import_ref Main//adapt_generic_type, loc6_1, loaded [symbolic = @Adapter.%complete_type (constants.%complete_type.f87)] -// CHECK:STDOUT: %Main.import_ref.9a3 = import_ref Main//adapt_generic_type, inst27 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.9a3 = import_ref Main//adapt_generic_type, inst28 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -904,10 +924,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %ImportedConvert.decl: %ImportedConvert.type = fn_decl @ImportedConvert [concrete = constants.%ImportedConvert] { -// CHECK:STDOUT: %a.patt: %Adapter.e4c = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Adapter.e4c = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.5a0 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.5a0 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6_40: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6_40: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -924,10 +944,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %ImportedConvertLocal.decl: %ImportedConvertLocal.type = fn_decl @ImportedConvertLocal [concrete = constants.%ImportedConvertLocal] { -// CHECK:STDOUT: %a.patt: %Adapter.58f = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Adapter.58f = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.5f8 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.5f8 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -945,7 +965,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Adapter(imports.%Main.import_ref.5ab: type) [from "adapt_generic_type.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] diff --git a/toolchain/check/testdata/class/generic/base_is_generic.carbon b/toolchain/check/testdata/class/generic/base_is_generic.carbon index d24defbcde00..7d3c01e6f079 100644 --- a/toolchain/check/testdata/class/generic/base_is_generic.carbon +++ b/toolchain/check/testdata/class/generic/base_is_generic.carbon @@ -89,7 +89,8 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Base.type: type = generic_class_type @Base [concrete] // CHECK:STDOUT: %Base.generic: %Base.type = struct_value () [concrete] // CHECK:STDOUT: %Base.370: type = class_type @Base, @Base(%T) [symbolic] @@ -111,6 +112,8 @@ fn H() { // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base.7a8 [concrete] // CHECK:STDOUT: %struct_type.base.8bc: type = struct_type {.base: %Base.7a8} [concrete] // CHECK:STDOUT: %complete_type.b07: = complete_type_witness %struct_type.base.8bc [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %DoubleFieldAccess.type: type = fn_type @DoubleFieldAccess [concrete] // CHECK:STDOUT: %DoubleFieldAccess: %DoubleFieldAccess.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -133,17 +136,17 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Base.decl: %Base.type = class_decl @Base [concrete = constants.%Base.generic] { -// CHECK:STDOUT: %T.patt.loc4_17.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_17.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Param.decl: type = class_decl @Param [concrete = constants.%Param] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %DoubleFieldAccess.decl: %DoubleFieldAccess.type = fn_decl @DoubleFieldAccess [concrete = constants.%DoubleFieldAccess] { -// CHECK:STDOUT: %d.patt: %Derived = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %Derived = value_param_pattern %d.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %d.patt: %pattern_type.fb9 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.fb9 = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -157,7 +160,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_17.1: type) { // CHECK:STDOUT: %T.loc4_17.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_17.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_17.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -256,7 +259,8 @@ fn H() { // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T} [symbolic] // CHECK:STDOUT: %complete_type.433: = complete_type_witness %struct_type.x.2ac [symbolic] // CHECK:STDOUT: %Base.370: type = class_type @Base, @Base(%T) [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Base.7a8: type = class_type @Base, @Base(%Param) [concrete] // CHECK:STDOUT: %struct_type.base.8bc: type = struct_type {.base: %Base.7a8} [concrete] // CHECK:STDOUT: %complete_type.b07: = complete_type_witness %struct_type.base.8bc [concrete] @@ -265,6 +269,8 @@ fn H() { // CHECK:STDOUT: %Base.elem.d1f: type = unbound_element_type %Base.7a8, %Param [concrete] // CHECK:STDOUT: %struct_type.x.975: type = struct_type {.x: %Param} [concrete] // CHECK:STDOUT: %complete_type.db3: = complete_type_witness %struct_type.x.975 [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.501: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %ImportedDoubleFieldAccess.type: type = fn_type @ImportedDoubleFieldAccess [concrete] // CHECK:STDOUT: %ImportedDoubleFieldAccess: %ImportedDoubleFieldAccess.type = struct_value () [concrete] // CHECK:STDOUT: %Param.elem: type = unbound_element_type %Param, %i32 [concrete] @@ -281,14 +287,14 @@ fn H() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.e8d: = import_ref Main//extend_generic_base, loc10_1, loaded [concrete = constants.%complete_type.09d] -// CHECK:STDOUT: %Main.import_ref.446 = import_ref Main//extend_generic_base, inst43 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.446 = import_ref Main//extend_generic_base, inst44 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.a92: %Param.elem = import_ref Main//extend_generic_base, loc9_8, loaded [concrete = %.be7] // CHECK:STDOUT: %Main.import_ref.5ab: type = import_ref Main//extend_generic_base, loc4_17, loaded [symbolic = @Base.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.b5f: = import_ref Main//extend_generic_base, loc6_1, loaded [symbolic = @Base.%complete_type (constants.%complete_type.433)] -// CHECK:STDOUT: %Main.import_ref.8e0 = import_ref Main//extend_generic_base, inst27 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.8e0 = import_ref Main//extend_generic_base, inst28 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.7f7: @Base.%Base.elem (%Base.elem.9af) = import_ref Main//extend_generic_base, loc5_8, loaded [concrete = %.e66] // CHECK:STDOUT: %Main.import_ref.bd0: = import_ref Main//extend_generic_base, loc14_1, loaded [concrete = constants.%complete_type.b07] -// CHECK:STDOUT: %Main.import_ref.f6c = import_ref Main//extend_generic_base, inst78 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.f6c = import_ref Main//extend_generic_base, inst80 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.d24 = import_ref Main//extend_generic_base, loc13_27, unloaded // CHECK:STDOUT: %Main.import_ref.77a301.2: type = import_ref Main//extend_generic_base, loc13_26, loaded [concrete = constants.%Base.7a8] // CHECK:STDOUT: } @@ -305,10 +311,10 @@ fn H() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %ImportedDoubleFieldAccess.decl: %ImportedDoubleFieldAccess.type = fn_decl @ImportedDoubleFieldAccess [concrete = constants.%ImportedDoubleFieldAccess] { -// CHECK:STDOUT: %d.patt: %Derived = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %Derived = value_param_pattern %d.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %d.patt: %pattern_type.fb9 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.fb9 = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.501 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.501 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -340,7 +346,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(imports.%Main.import_ref.5ab: type) [from "extend_generic_base.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -394,7 +400,8 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] @@ -425,7 +432,7 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -435,7 +442,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_9.2 [symbolic = %require_complete (constants.%require_complete)] @@ -498,10 +505,12 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %X.type: type = generic_class_type @X [concrete] // CHECK:STDOUT: %X.generic: %X.type = struct_value () [concrete] // CHECK:STDOUT: %X.75b6d8.1: type = class_type @X, @X(%U) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %U [symbolic] // CHECK:STDOUT: %G.type.56f312.1: type = fn_type @G, @X(%U) [symbolic] // CHECK:STDOUT: %G.b504c4.1: %G.type.56f312.1 = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -509,7 +518,7 @@ fn H() { // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %U [symbolic] // CHECK:STDOUT: %G.specific_fn.169: = specific_function %G.b504c4.1, @G(%U) [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] @@ -526,6 +535,7 @@ fn H() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %C.98a: type = class_type @C, @C(%i32) [concrete] // CHECK:STDOUT: %X.448: type = class_type @X, @X(%i32) [concrete] // CHECK:STDOUT: %G.type.862: type = fn_type @G, @X(%i32) [concrete] @@ -553,12 +563,12 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %X.decl: %X.type = class_decl @X [concrete = constants.%X.generic] { -// CHECK:STDOUT: %U.patt.loc4_14.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_14.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_14.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc4_14.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc4_14.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc8_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -567,7 +577,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @X(%U.loc4_14.1: type) { // CHECK:STDOUT: %U.loc4_14.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc4_14.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc4_14.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_14.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_14.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %G.type: type = fn_type @G, @X(%U.loc4_14.2) [symbolic = %G.type (constants.%G.type.56f312.1)] @@ -575,8 +585,8 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %G.decl: @X.%G.type (%G.type.56f312.1) = fn_decl @G [symbolic = @X.%G (constants.%G.b504c4.1)] { -// CHECK:STDOUT: %return.patt: @G.%U (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @G.%U (%U) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @G.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @G.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, @X.%U.loc4_14.1 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %return.param: ref @G.%U (%U) = out_param call_param0 @@ -595,7 +605,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc8_9.1: type) { // CHECK:STDOUT: %T.loc8_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %X.loc9_19.2: type = class_type @X, @X(%T.loc8_9.2) [symbolic = %X.loc9_19.2 (constants.%X.75b6d8.2)] @@ -626,6 +636,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(@X.%U.loc4_14.1: type) { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -648,7 +659,7 @@ fn H() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %i32 = binding_pattern i +// CHECK:STDOUT: %i.patt: %pattern_type.7ce = binding_pattern i // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %int_32.loc13_18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -679,6 +690,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%U) { // CHECK:STDOUT: %U => constants.%U +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -735,6 +747,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%i32) { // CHECK:STDOUT: %U => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -752,21 +765,24 @@ fn H() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %X.75b6d8.2: type = class_type @X, @X(%T) [symbolic] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %C.elem.3f4: type = unbound_element_type %C.f2e, %X.75b6d8.2 [symbolic] // CHECK:STDOUT: %struct_type.base.f5f: type = struct_type {.base: %X.75b6d8.2} [symbolic] // CHECK:STDOUT: %complete_type.768: = complete_type_witness %struct_type.base.f5f [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %G.type.56f312.1: type = fn_type @G, @X(%U) [symbolic] // CHECK:STDOUT: %G.b504c4.1: %G.type.56f312.1 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %U [symbolic] // CHECK:STDOUT: %require_complete.441: = require_complete_type %X.75b6d8.2 [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %U [symbolic] // CHECK:STDOUT: %G.specific_fn.169: = specific_function %G.b504c4.1, @G(%U) [symbolic] @@ -793,11 +809,11 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//extend_generic_symbolic_base, loc4_14, loaded [symbolic = @X.%U (constants.%U)] // CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//extend_generic_symbolic_base, loc6_1, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Main.import_ref.e8e = import_ref Main//extend_generic_symbolic_base, inst27 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.e8e = import_ref Main//extend_generic_symbolic_base, inst28 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.b8a: @X.%G.type (%G.type.56f312.1) = import_ref Main//extend_generic_symbolic_base, loc5_15, loaded [symbolic = @X.%G (constants.%G.b504c4.1)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//extend_generic_symbolic_base, loc8_9, loaded [symbolic = @C.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.93f: = import_ref Main//extend_generic_symbolic_base, loc10_1, loaded [symbolic = @C.%complete_type (constants.%complete_type.768)] -// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//extend_generic_symbolic_base, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//extend_generic_symbolic_base, inst70 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.65d = import_ref Main//extend_generic_symbolic_base, loc9_20, unloaded // CHECK:STDOUT: %Main.import_ref.561eb2.2: type = import_ref Main//extend_generic_symbolic_base, loc9_19, loaded [symbolic = @C.%X (constants.%X.75b6d8.2)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//extend_generic_symbolic_base, loc4_14, loaded [symbolic = @X.%U (constants.%U)] @@ -818,7 +834,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.5ab3ec.2: type) [from "extend_generic_symbolic_base.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %X: type = class_type @X, @X(%T) [symbolic = %X (constants.%X.75b6d8.2)] @@ -841,7 +857,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @X(imports.%Main.import_ref.5ab3ec.1: type) [from "extend_generic_symbolic_base.carbon"] { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %G.type: type = fn_type @G, @X(%U) [symbolic = %G.type (constants.%G.type.56f312.1)] @@ -859,7 +875,7 @@ fn H() { // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %j.patt: %i32 = binding_pattern j +// CHECK:STDOUT: %j.patt: %pattern_type.7ce = binding_pattern j // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: %C.type = name_ref C, imports.%Main.C [concrete = constants.%C.generic] // CHECK:STDOUT: %int_32.loc7_18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -881,6 +897,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(imports.%Main.import_ref.5ab3ec.3: type) [from "extend_generic_symbolic_base.carbon"] { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -922,6 +939,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%U) { // CHECK:STDOUT: %U => constants.%U +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -958,6 +976,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%i32) { // CHECK:STDOUT: %U => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a diff --git a/toolchain/check/testdata/class/generic/basic.carbon b/toolchain/check/testdata/class/generic/basic.carbon index f1c8e98b7b59..e520242f7a83 100644 --- a/toolchain/check/testdata/class/generic/basic.carbon +++ b/toolchain/check/testdata/class/generic/basic.carbon @@ -27,14 +27,20 @@ class Declaration(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %ptr.955: type = ptr_type %Class [symbolic] +// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %GetAddr.type: type = fn_type @GetAddr, @Class(%T) [symbolic] // CHECK:STDOUT: %GetAddr: %GetAddr.type = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %GetValue.type: type = fn_type @GetValue, @Class(%T) [symbolic] // CHECK:STDOUT: %GetValue: %GetValue.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -63,12 +69,12 @@ class Declaration(T:! type); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc11_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Declaration.decl: %Declaration.type = class_decl @Declaration [concrete = constants.%Declaration.generic] { -// CHECK:STDOUT: %T.patt.loc24_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc24_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_19.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc24_19.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc24_19.2 (constants.%T)] // CHECK:STDOUT: } @@ -76,7 +82,7 @@ class Declaration(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc11_13.1: type) { // CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %GetAddr.type: type = fn_type @GetAddr, @Class(%T.loc11_13.2) [symbolic = %GetAddr.type (constants.%GetAddr.type)] @@ -91,11 +97,11 @@ class Declaration(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %GetAddr.decl: @Class.%GetAddr.type (%GetAddr.type) = fn_decl @GetAddr [symbolic = @Class.%GetAddr (constants.%GetAddr)] { -// CHECK:STDOUT: %self.patt: @GetAddr.%ptr.loc12_29.1 (%ptr.955) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @GetAddr.%ptr.loc12_29.1 (%ptr.955) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc12_14: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %return.patt: @GetAddr.%ptr.loc12_38.1 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @GetAddr.%ptr.loc12_38.1 (%ptr.79f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @GetAddr.%pattern_type.loc12_19 (%pattern_type.9e0) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @GetAddr.%pattern_type.loc12_19 (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc12_14: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %return.patt: @GetAddr.%pattern_type.loc12_34 (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @GetAddr.%pattern_type.loc12_34 (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc11_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %ptr.loc12_38.2: type = ptr_type %T.ref [symbolic = %ptr.loc12_38.1 (constants.%ptr.79f)] @@ -110,10 +116,10 @@ class Declaration(T:! type); // CHECK:STDOUT: %return: ref @GetAddr.%ptr.loc12_38.1 (%ptr.79f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %GetValue.decl: @Class.%GetValue.type (%GetValue.type) = fn_decl @GetValue [symbolic = @Class.%GetValue (constants.%GetValue)] { -// CHECK:STDOUT: %self.patt: @GetValue.%Class (%Class) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @GetValue.%Class (%Class) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @GetValue.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @GetValue.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @GetValue.%pattern_type.loc17_15 (%pattern_type.3c1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @GetValue.%pattern_type.loc17_15 (%pattern_type.3c1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @GetValue.%pattern_type.loc17_29 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @GetValue.%pattern_type.loc17_29 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc11_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @GetValue.%Class (%Class) = value_param call_param0 @@ -142,7 +148,7 @@ class Declaration(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: generic class @Declaration(%T.loc24_19.1: type) { // CHECK:STDOUT: %T.loc24_19.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc24_19.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc24_19.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc24_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_19.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } @@ -151,7 +157,9 @@ class Declaration(T:! type); // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %ptr.loc12_29.1: type = ptr_type %Class [symbolic = %ptr.loc12_29.1 (constants.%ptr.955)] +// CHECK:STDOUT: %pattern_type.loc12_19: type = pattern_type %ptr.loc12_29.1 [symbolic = %pattern_type.loc12_19 (constants.%pattern_type.9e0)] // CHECK:STDOUT: %ptr.loc12_38.1: type = ptr_type %T [symbolic = %ptr.loc12_38.1 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type.loc12_34: type = pattern_type %ptr.loc12_38.1 [symbolic = %pattern_type.loc12_34 (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc12_34: = require_complete_type %ptr.loc12_38.1 [symbolic = %require_complete.loc12_34 (constants.%require_complete.6e5)] @@ -173,6 +181,8 @@ class Declaration(T:! type); // CHECK:STDOUT: generic fn @GetValue(@Class.%T.loc11_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] +// CHECK:STDOUT: %pattern_type.loc17_15: type = pattern_type %Class [symbolic = %pattern_type.loc17_15 (constants.%pattern_type.3c1)] +// CHECK:STDOUT: %pattern_type.loc17_29: type = pattern_type %T [symbolic = %pattern_type.loc17_29 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17: = require_complete_type %Class [symbolic = %require_complete.loc17 (constants.%require_complete.4f8)] @@ -209,7 +219,9 @@ class Declaration(T:! type); // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class => constants.%Class // CHECK:STDOUT: %ptr.loc12_29.1 => constants.%ptr.955 +// CHECK:STDOUT: %pattern_type.loc12_19 => constants.%pattern_type.9e0 // CHECK:STDOUT: %ptr.loc12_38.1 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type.loc12_34 => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@GetAddr.%T) {} @@ -217,6 +229,8 @@ class Declaration(T:! type); // CHECK:STDOUT: specific @GetValue(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class => constants.%Class +// CHECK:STDOUT: %pattern_type.loc17_15 => constants.%pattern_type.3c1 +// CHECK:STDOUT: %pattern_type.loc17_29 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@GetValue.%T) {} diff --git a/toolchain/check/testdata/class/generic/call.carbon b/toolchain/check/testdata/class/generic/call.carbon index 268fb9855cae..fb72dcef3acd 100644 --- a/toolchain/check/testdata/class/generic/call.carbon +++ b/toolchain/check/testdata/class/generic/call.carbon @@ -90,12 +90,14 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.356: %i32 = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt.8cf: %i32 = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.a8e: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class.ab2: type = class_type @Class, @Class(%T, %N.356) [symbolic] @@ -116,11 +118,13 @@ class Outer(T:! type) { // CHECK:STDOUT: %bound_method.a25: = bound_method %int_5.64b, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_5.0f6: %i32 = int_value 5 [concrete] // CHECK:STDOUT: %Class.f29: type = class_type @Class, @Class(%ptr.235, %int_5.0f6) [concrete] +// CHECK:STDOUT: %pattern_type.d51: type = pattern_type %Class.f29 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %Convert.bound.d04: = bound_method %int_0.5c6, %Convert.956 [concrete] // CHECK:STDOUT: %bound_method.b6e: = bound_method %int_0.5c6, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %Class.dd4: type = class_type @Class, @Class(%empty_tuple.type, %int_0.6a9) [concrete] +// CHECK:STDOUT: %pattern_type.c73: type = pattern_type %Class.dd4 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -141,8 +145,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] -// CHECK:STDOUT: %N.patt.loc4_23.1: %i32 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.8cf)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc4_23.1: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.a8e)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { @@ -152,8 +156,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %N.loc4_23.1: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.2 (constants.%N.356)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %Class.f29 = binding_pattern a -// CHECK:STDOUT: %.loc6_1: %Class.f29 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.d51 = binding_pattern a +// CHECK:STDOUT: %.loc6_1: %pattern_type.d51 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Class.f29 = var a // CHECK:STDOUT: %.loc6_21.1: type = splice_block %Class.loc6 [concrete = constants.%Class.f29] { @@ -173,8 +177,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Class.f29 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %Class.dd4 = binding_pattern b -// CHECK:STDOUT: %.loc9_1: %Class.dd4 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.c73 = binding_pattern b +// CHECK:STDOUT: %.loc9_1: %pattern_type.c73 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Class.dd4 = var b // CHECK:STDOUT: %.loc9_19.1: type = splice_block %Class.loc9 [concrete = constants.%Class.dd4] { @@ -196,9 +200,9 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type, %N.loc4_23.1: %i32) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: %N.loc4_23.2: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.2 (constants.%N.356)] -// CHECK:STDOUT: %N.patt.loc4_23.2: %i32 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.8cf)] +// CHECK:STDOUT: %N.patt.loc4_23.2: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.a8e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -216,14 +220,14 @@ class Outer(T:! type) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt // CHECK:STDOUT: %N.loc4_23.2 => constants.%N.356 -// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.8cf +// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.a8e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(constants.%ptr.235, constants.%int_5.0f6) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%ptr.235 // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt // CHECK:STDOUT: %N.loc4_23.2 => constants.%int_5.0f6 -// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.8cf +// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.a8e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -232,7 +236,7 @@ class Outer(T:! type) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%empty_tuple.type // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt // CHECK:STDOUT: %N.loc4_23.2 => constants.%int_0.6a9 -// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.8cf +// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.a8e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -241,11 +245,13 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.356: %i32 = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt.8cf: %i32 = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.a8e: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N.356) [symbolic] @@ -270,8 +276,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] -// CHECK:STDOUT: %N.patt.loc4_23.1: %i32 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.8cf)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc4_23.1: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.a8e)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { @@ -296,9 +302,9 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type, %N.loc4_23.1: %i32) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: %N.loc4_23.2: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.2 (constants.%N.356)] -// CHECK:STDOUT: %N.patt.loc4_23.2: %i32 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.8cf)] +// CHECK:STDOUT: %N.patt.loc4_23.2: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.a8e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -316,18 +322,20 @@ class Outer(T:! type) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt // CHECK:STDOUT: %N.loc4_23.2 => constants.%N.356 -// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.8cf +// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.a8e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_too_many.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.356: %i32 = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt.8cf: %i32 = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.a8e: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N.356) [symbolic] @@ -354,8 +362,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] -// CHECK:STDOUT: %N.patt.loc4_23.1: %i32 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.8cf)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc4_23.1: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.a8e)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { @@ -382,9 +390,9 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type, %N.loc4_23.1: %i32) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: %N.loc4_23.2: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.2 (constants.%N.356)] -// CHECK:STDOUT: %N.patt.loc4_23.2: %i32 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.8cf)] +// CHECK:STDOUT: %N.patt.loc4_23.2: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.a8e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -402,18 +410,20 @@ class Outer(T:! type) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt // CHECK:STDOUT: %N.loc4_23.2 => constants.%N.356 -// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.8cf +// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.a8e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_no_conversion.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.356: %i32 = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt.8cf: %i32 = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.a8e: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T, %N.356) [symbolic] @@ -440,8 +450,8 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] -// CHECK:STDOUT: %N.patt.loc4_23.1: %i32 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.8cf)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc4_23.1: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.a8e)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { @@ -468,9 +478,9 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type, %N.loc4_23.1: %i32) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: %N.loc4_23.2: %i32 = bind_symbolic_name N, 1 [symbolic = %N.loc4_23.2 (constants.%N.356)] -// CHECK:STDOUT: %N.patt.loc4_23.2: %i32 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.8cf)] +// CHECK:STDOUT: %N.patt.loc4_23.2: %pattern_type.7ce = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_23.2 (constants.%N.patt.a8e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -488,30 +498,35 @@ class Outer(T:! type) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt // CHECK:STDOUT: %N.loc4_23.2 => constants.%N.356 -// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.8cf +// CHECK:STDOUT: %N.patt.loc4_23.2 => constants.%N.patt.a8e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- call_in_nested_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.9d6: type = class_type @Outer, @Outer(%T) [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %Inner.type.eae: type = generic_class_type @Inner, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.generic.137: %Inner.type.eae = struct_value () [symbolic] // CHECK:STDOUT: %Inner.c71: type = class_type @Inner, @Inner(%T, %U) [symbolic] +// CHECK:STDOUT: %pattern_type.e86: type = pattern_type %Outer.9d6 [symbolic] // CHECK:STDOUT: %A.type.8d7: type = fn_type @A, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %A.d0e: %A.type.8d7 = struct_value () [symbolic] // CHECK:STDOUT: %Outer.99f: type = class_type @Outer, @Outer(%U) [symbolic] +// CHECK:STDOUT: %pattern_type.089: type = pattern_type %Outer.99f [symbolic] // CHECK:STDOUT: %B.type.880: type = fn_type @B, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %B.c7b: %B.type.880 = struct_value () [symbolic] // CHECK:STDOUT: %Inner.13a: type = class_type @Inner, @Inner(%T, %T) [symbolic] +// CHECK:STDOUT: %pattern_type.a60: type = pattern_type %Inner.13a [symbolic] // CHECK:STDOUT: %C.type.714: type = fn_type @C, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %C.e62: %C.type.714 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.372: type = pattern_type %Inner.c71 [symbolic] // CHECK:STDOUT: %D.type.102: type = fn_type @D, @Inner(%T, %U) [symbolic] // CHECK:STDOUT: %D.d85: %D.type.102 = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -550,7 +565,7 @@ class Outer(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt.loc2_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc2_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc2_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.2 (constants.%T)] // CHECK:STDOUT: } @@ -558,7 +573,7 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc2_13.1: type) { // CHECK:STDOUT: %T.loc2_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc2_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc2_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.type: type = generic_class_type @Inner, @Outer(%T.loc2_13.2) [symbolic = %Inner.type (constants.%Inner.type.eae)] @@ -566,7 +581,7 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: @Outer.%Inner.type (%Inner.type.eae) = class_decl @Inner [symbolic = @Outer.%Inner.generic (constants.%Inner.generic.137)] { -// CHECK:STDOUT: %U.patt.loc3_15.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc3_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc3_15.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc3_15.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc3_15.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc3_15.2 (constants.%U)] // CHECK:STDOUT: } @@ -584,7 +599,7 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Inner(@Outer.%T.loc2_13.1: type, %U.loc3_15.1: type) { // CHECK:STDOUT: %U.loc3_15.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc3_15.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc3_15.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc3_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc3_15.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc3_15.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] @@ -599,8 +614,8 @@ class Outer(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %A.decl: @Inner.%A.type (%A.type.8d7) = fn_decl @A [symbolic = @Inner.%A (constants.%A.d0e)] { -// CHECK:STDOUT: %return.patt: @A.%Outer.loc4_22.1 (%Outer.9d6) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @A.%Outer.loc4_22.1 (%Outer.9d6) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @A.%pattern_type (%pattern_type.e86) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @A.%pattern_type (%pattern_type.e86) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Outer.ref: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc2_13.1 [symbolic = %T (constants.%T)] @@ -609,8 +624,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %return: ref @A.%Outer.loc4_22.1 (%Outer.9d6) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: @Inner.%B.type (%B.type.880) = fn_decl @B [symbolic = @Inner.%B (constants.%B.c7b)] { -// CHECK:STDOUT: %return.patt: @B.%Outer.loc7_22.1 (%Outer.99f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @B.%Outer.loc7_22.1 (%Outer.99f) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @B.%pattern_type (%pattern_type.089) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @B.%pattern_type (%pattern_type.089) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Outer.ref: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] // CHECK:STDOUT: %U.ref: type = name_ref U, @Inner.%U.loc3_15.1 [symbolic = %U (constants.%U)] @@ -619,8 +634,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %return: ref @B.%Outer.loc7_22.1 (%Outer.99f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: @Inner.%C.type (%C.type.714) = fn_decl @C [symbolic = @Inner.%C (constants.%C.e62)] { -// CHECK:STDOUT: %return.patt: @C.%Inner.loc10_22.1 (%Inner.13a) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @C.%Inner.loc10_22.1 (%Inner.13a) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @C.%pattern_type (%pattern_type.a60) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @C.%pattern_type (%pattern_type.a60) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10: @C.%Inner.type (%Inner.type.eae) = specific_constant @Outer.%Inner.decl, @Outer(constants.%T) [symbolic = %Inner.generic (constants.%Inner.generic.137)] // CHECK:STDOUT: %Inner.ref: @C.%Inner.type (%Inner.type.eae) = name_ref Inner, %.loc10 [symbolic = %Inner.generic (constants.%Inner.generic.137)] @@ -630,8 +645,8 @@ class Outer(T:! type) { // CHECK:STDOUT: %return: ref @C.%Inner.loc10_22.1 (%Inner.13a) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: @Inner.%D.type (%D.type.102) = fn_decl @D [symbolic = @Inner.%D (constants.%D.d85)] { -// CHECK:STDOUT: %return.patt: @D.%Inner.loc13_22.1 (%Inner.c71) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @D.%Inner.loc13_22.1 (%Inner.c71) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @D.%pattern_type (%pattern_type.372) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @D.%pattern_type (%pattern_type.372) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13: @D.%Inner.type (%Inner.type.eae) = specific_constant @Outer.%Inner.decl, @Outer(constants.%T) [symbolic = %Inner.generic (constants.%Inner.generic.137)] // CHECK:STDOUT: %Inner.ref: @D.%Inner.type (%Inner.type.eae) = name_ref Inner, %.loc13 [symbolic = %Inner.generic (constants.%Inner.generic.137)] @@ -660,6 +675,7 @@ class Outer(T:! type) { // CHECK:STDOUT: generic fn @A(@Outer.%T.loc2_13.1: type, @Inner.%U.loc3_15.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Outer.loc4_22.1: type = class_type @Outer, @Outer(%T) [symbolic = %Outer.loc4_22.1 (constants.%Outer.9d6)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Outer.loc4_22.1 [symbolic = %pattern_type (constants.%pattern_type.e86)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Outer.loc4_22.1 [symbolic = %require_complete (constants.%require_complete.127)] @@ -677,6 +693,7 @@ class Outer(T:! type) { // CHECK:STDOUT: generic fn @B(@Outer.%T.loc2_13.1: type, @Inner.%U.loc3_15.1: type) { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %Outer.loc7_22.1: type = class_type @Outer, @Outer(%U) [symbolic = %Outer.loc7_22.1 (constants.%Outer.99f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Outer.loc7_22.1 [symbolic = %pattern_type (constants.%pattern_type.089)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Outer.loc7_22.1 [symbolic = %require_complete (constants.%require_complete.964)] @@ -696,6 +713,7 @@ class Outer(T:! type) { // CHECK:STDOUT: %Inner.type: type = generic_class_type @Inner, @Outer(%T) [symbolic = %Inner.type (constants.%Inner.type.eae)] // CHECK:STDOUT: %Inner.generic: @C.%Inner.type (%Inner.type.eae) = struct_value () [symbolic = %Inner.generic (constants.%Inner.generic.137)] // CHECK:STDOUT: %Inner.loc10_22.1: type = class_type @Inner, @Inner(%T, %T) [symbolic = %Inner.loc10_22.1 (constants.%Inner.13a)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Inner.loc10_22.1 [symbolic = %pattern_type (constants.%pattern_type.a60)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Inner.loc10_22.1 [symbolic = %require_complete (constants.%require_complete.7b1)] @@ -716,6 +734,7 @@ class Outer(T:! type) { // CHECK:STDOUT: %Inner.generic: @D.%Inner.type (%Inner.type.eae) = struct_value () [symbolic = %Inner.generic (constants.%Inner.generic.137)] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %Inner.loc13_22.1: type = class_type @Inner, @Inner(%T, %U) [symbolic = %Inner.loc13_22.1 (constants.%Inner.c71)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Inner.loc13_22.1 [symbolic = %pattern_type (constants.%pattern_type.372)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Inner.loc13_22.1 [symbolic = %require_complete (constants.%require_complete.e7e)] @@ -758,6 +777,7 @@ class Outer(T:! type) { // CHECK:STDOUT: specific @A(constants.%T, constants.%U) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Outer.loc4_22.1 => constants.%Outer.9d6 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e86 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(@A.%T) {} @@ -774,6 +794,7 @@ class Outer(T:! type) { // CHECK:STDOUT: specific @B(constants.%T, constants.%U) { // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: %Outer.loc7_22.1 => constants.%Outer.99f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.089 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(@B.%U) {} @@ -799,6 +820,7 @@ class Outer(T:! type) { // CHECK:STDOUT: %Inner.type => constants.%Inner.type.eae // CHECK:STDOUT: %Inner.generic => constants.%Inner.generic.137 // CHECK:STDOUT: %Inner.loc10_22.1 => constants.%Inner.13a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a60 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(@C.%T) {} @@ -811,6 +833,7 @@ class Outer(T:! type) { // CHECK:STDOUT: %Inner.generic => constants.%Inner.generic.137 // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: %Inner.loc13_22.1 => constants.%Inner.c71 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.372 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Outer(@D.%T) {} diff --git a/toolchain/check/testdata/class/generic/complete_in_conversion.carbon b/toolchain/check/testdata/class/generic/complete_in_conversion.carbon index 8aa21ecd2ee5..c9002d6e037a 100644 --- a/toolchain/check/testdata/class/generic/complete_in_conversion.carbon +++ b/toolchain/check/testdata/class/generic/complete_in_conversion.carbon @@ -36,6 +36,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] // CHECK:STDOUT: %Int.type.913: type = fn_type @Int.1 [concrete] // CHECK:STDOUT: %Int.779: %Int.type.913 = struct_value () [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] @@ -44,7 +46,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int.2, @Int.2(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A.dd3: type = class_type @A, @A(%N.51e) [symbolic] @@ -81,9 +84,11 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %A.6fc: type = class_type @A, @A(%int_0.6a9) [concrete] // CHECK:STDOUT: %ptr.b65: type = ptr_type %A.6fc [concrete] +// CHECK:STDOUT: %pattern_type.213: type = pattern_type %ptr.b65 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.e79: type = ptr_type %B [concrete] +// CHECK:STDOUT: %pattern_type.960: type = pattern_type %ptr.e79 [concrete] // CHECK:STDOUT: %A.elem.d81: type = unbound_element_type %A.6fc, %B [concrete] // CHECK:STDOUT: %Convert.bound.0fd: = bound_method %int_0.6a9, %Convert.960 [concrete] // CHECK:STDOUT: %bound_method.4b5: = bound_method %int_0.6a9, %Convert.specific_fn.8a8 [concrete] @@ -110,10 +115,10 @@ fn F(a: A(0)*) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Int.decl: %Int.type.913 = fn_decl @Int.1 [concrete = constants.%Int.779] { -// CHECK:STDOUT: %N.patt: Core.IntLiteral = binding_pattern N -// CHECK:STDOUT: %N.param_patt: Core.IntLiteral = value_param_pattern %N.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = binding_pattern N +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern %N.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %N.param: Core.IntLiteral = value_param call_param0 // CHECK:STDOUT: %.loc2_27.1: type = splice_block %.loc2_27.3 [concrete = Core.IntLiteral] { @@ -129,7 +134,7 @@ fn F(a: A(0)*) { // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %N.patt.loc6_9.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_9.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc6_9.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_9.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -138,8 +143,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %N.loc6_9.1: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc6_9.2 (constants.%N.51e)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %ptr.b65 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.b65 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.213 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.213 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.b65 = value_param call_param0 // CHECK:STDOUT: %.loc15_13: type = splice_block %ptr.loc15 [concrete = constants.%ptr.b65] { @@ -172,7 +177,7 @@ fn F(a: A(0)*) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @A(%N.loc6_9.1: %i32) { // CHECK:STDOUT: %N.loc6_9.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc6_9.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc6_9.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_9.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc6_9.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_9.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %A: type = class_type @A, @A(%N.loc6_9.2) [symbolic = %A (constants.%A.dd3)] @@ -222,7 +227,7 @@ fn F(a: A(0)*) { // CHECK:STDOUT: fn @F(%a.param: %ptr.b65) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %ptr.e79 = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.960 = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %ptr.b65 = name_ref a, %a // CHECK:STDOUT: %.loc20_11: type = splice_block %ptr.loc20 [concrete = constants.%ptr.e79] { @@ -239,14 +244,14 @@ fn F(a: A(0)*) { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%N.51e) { // CHECK:STDOUT: %N.loc6_9.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc6_9.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc6_9.2 => constants.%N.patt.f2c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(%N.loc6_9.2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%int_0.6a9) { // CHECK:STDOUT: %N.loc6_9.2 => constants.%int_0.6a9 -// CHECK:STDOUT: %N.patt.loc6_9.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc6_9.2 => constants.%N.patt.f2c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %A => constants.%A.6fc diff --git a/toolchain/check/testdata/class/generic/field.carbon b/toolchain/check/testdata/class/generic/field.carbon index 58af1d7570b3..7593e04f1d3d 100644 --- a/toolchain/check/testdata/class/generic/field.carbon +++ b/toolchain/check/testdata/class/generic/field.carbon @@ -28,7 +28,8 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class.fe1b2d.1: type = class_type @Class, @Class(%T) [symbolic] @@ -39,6 +40,8 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Class.247: type = class_type @Class, @Class(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.0fa: type = pattern_type %Class.247 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -46,12 +49,16 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: %Class.elem.2d8: type = unbound_element_type %Class.247, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] +// CHECK:STDOUT: %pattern_type.3c18fb.1: type = pattern_type %Class.fe1b2d.1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4f8a42.1: = require_complete_type %Class.fe1b2d.1 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %Class.fe1b2d.2: type = class_type @Class, @Class(%U) [symbolic] +// CHECK:STDOUT: %pattern_type.3c18fb.2: type = pattern_type %Class.fe1b2d.2 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %U [symbolic] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4aeca8.2: = require_complete_type %U [symbolic] @@ -79,15 +86,15 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc11_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %Class.247 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class.247 = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.0fa = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.0fa = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc15_24: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc15_24: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -103,11 +110,11 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt.loc19_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %c.patt: @G.%Class.loc19_26.2 (%Class.fe1b2d.1) = binding_pattern c -// CHECK:STDOUT: %c.param_patt: @G.%Class.loc19_26.2 (%Class.fe1b2d.1) = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: @G.%T.loc19_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @G.%T.loc19_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc19_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %c.patt: @G.%pattern_type.loc19_16 (%pattern_type.3c18fb.1) = binding_pattern c +// CHECK:STDOUT: %c.param_patt: @G.%pattern_type.loc19_16 (%pattern_type.3c18fb.1) = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: @G.%pattern_type.loc19_29 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @G.%pattern_type.loc19_29 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc19_32: type = name_ref T, %T.loc19_6.1 [symbolic = %T.loc19_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc19_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc19_6.2 (constants.%T)] @@ -122,11 +129,11 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: %return: ref @G.%T.loc19_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %U.patt.loc23_6.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc23_6.2 (constants.%U.patt)] -// CHECK:STDOUT: %c.patt: @H.%Class.loc23_26.2 (%Class.fe1b2d.2) = binding_pattern c -// CHECK:STDOUT: %c.param_patt: @H.%Class.loc23_26.2 (%Class.fe1b2d.2) = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: @H.%U.loc23_6.2 (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @H.%U.loc23_6.2 (%U) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %U.patt.loc23_6.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc23_6.2 (constants.%U.patt)] +// CHECK:STDOUT: %c.patt: @H.%pattern_type.loc23_16 (%pattern_type.3c18fb.2) = binding_pattern c +// CHECK:STDOUT: %c.param_patt: @H.%pattern_type.loc23_16 (%pattern_type.3c18fb.2) = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: @H.%pattern_type.loc23_29 (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @H.%pattern_type.loc23_29 (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc23_32: type = name_ref U, %U.loc23_6.1 [symbolic = %U.loc23_6.2 (constants.%U)] // CHECK:STDOUT: %U.loc23_6.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc23_6.2 (constants.%U)] @@ -144,7 +151,7 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc11_13.1: type) { // CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc11_13.2 [symbolic = %require_complete (constants.%require_complete.4aeca8.1)] @@ -178,8 +185,10 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc19_6.1: type) { // CHECK:STDOUT: %T.loc19_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc19_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc19_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc19_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_6.2 (constants.%T.patt)] // CHECK:STDOUT: %Class.loc19_26.2: type = class_type @Class, @Class(%T.loc19_6.2) [symbolic = %Class.loc19_26.2 (constants.%Class.fe1b2d.1)] +// CHECK:STDOUT: %pattern_type.loc19_16: type = pattern_type %Class.loc19_26.2 [symbolic = %pattern_type.loc19_16 (constants.%pattern_type.3c18fb.1)] +// CHECK:STDOUT: %pattern_type.loc19_29: type = pattern_type %T.loc19_6.2 [symbolic = %pattern_type.loc19_29 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc19: = require_complete_type %Class.loc19_26.2 [symbolic = %require_complete.loc19 (constants.%require_complete.4f8a42.1)] @@ -198,8 +207,10 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @H(%U.loc23_6.1: type) { // CHECK:STDOUT: %U.loc23_6.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc23_6.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc23_6.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc23_6.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc23_6.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc23_6.2 (constants.%U.patt)] // CHECK:STDOUT: %Class.loc23_26.2: type = class_type @Class, @Class(%U.loc23_6.2) [symbolic = %Class.loc23_26.2 (constants.%Class.fe1b2d.2)] +// CHECK:STDOUT: %pattern_type.loc23_16: type = pattern_type %Class.loc23_26.2 [symbolic = %pattern_type.loc23_16 (constants.%pattern_type.3c18fb.2)] +// CHECK:STDOUT: %pattern_type.loc23_29: type = pattern_type %U.loc23_6.2 [symbolic = %pattern_type.loc23_29 (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc23_29: = require_complete_type %U.loc23_6.2 [symbolic = %require_complete.loc23_29 (constants.%require_complete.4aeca8.2)] @@ -246,6 +257,8 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: %T.loc19_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc19_6.2 => constants.%T.patt // CHECK:STDOUT: %Class.loc19_26.2 => constants.%Class.fe1b2d.1 +// CHECK:STDOUT: %pattern_type.loc19_16 => constants.%pattern_type.3c18fb.1 +// CHECK:STDOUT: %pattern_type.loc19_29 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@G.%T.loc19_6.2) {} @@ -266,6 +279,8 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: %U.loc23_6.2 => constants.%U // CHECK:STDOUT: %U.patt.loc23_6.2 => constants.%U.patt // CHECK:STDOUT: %Class.loc23_26.2 => constants.%Class.fe1b2d.2 +// CHECK:STDOUT: %pattern_type.loc23_16 => constants.%pattern_type.3c18fb.2 +// CHECK:STDOUT: %pattern_type.loc23_29 => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@H.%U.loc23_6.2) {} diff --git a/toolchain/check/testdata/class/generic/import.carbon b/toolchain/check/testdata/class/generic/import.carbon index ae9c0ad75083..83e212303efc 100644 --- a/toolchain/check/testdata/class/generic/import.carbon +++ b/toolchain/check/testdata/class/generic/import.carbon @@ -89,7 +89,8 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %CompleteClass.type: type = generic_class_type @CompleteClass [concrete] @@ -98,6 +99,7 @@ class Class(U:! type) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %CompleteClass.elem: type = unbound_element_type %CompleteClass.f97, %i32 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.14f: type = fn_type @F.1, @CompleteClass(%T) [symbolic] // CHECK:STDOUT: %F.874: %F.type.14f = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] @@ -116,6 +118,7 @@ class Class(U:! type) { // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %CompleteClass.e9e: type = class_type @CompleteClass, @CompleteClass(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.0b0: type = pattern_type %CompleteClass.e9e [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -138,18 +141,18 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %CompleteClass.decl: %CompleteClass.type = class_decl @CompleteClass [concrete = constants.%CompleteClass.generic] { -// CHECK:STDOUT: %T.patt.loc6_21.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_21.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_21.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_21.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_21.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %return.patt: %CompleteClass.e9e = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %CompleteClass.e9e = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.0b0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.0b0 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %CompleteClass.ref: %CompleteClass.type = name_ref CompleteClass, file.%CompleteClass.decl [concrete = constants.%CompleteClass.generic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -162,14 +165,14 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(%T.loc6_21.1: type) { // CHECK:STDOUT: %T.loc6_21.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_21.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_21.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_21.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_21.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T.loc6_21.2) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] @@ -182,8 +185,8 @@ class Class(U:! type) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc7: @CompleteClass.%CompleteClass.elem (%CompleteClass.elem) = field_decl n, element0 [concrete] // CHECK:STDOUT: %F.decl: @CompleteClass.%F.type (%F.type.14f) = fn_decl @F.1 [symbolic = @CompleteClass.%F (constants.%F.874)] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -248,11 +251,12 @@ class Class(U:! type) { // CHECK:STDOUT: --- foo.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1ad = impl_witness_table (imports.%Main.import_ref.773), @impl.a8d [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] @@ -269,6 +273,7 @@ class Class(U:! type) { // CHECK:STDOUT: %F.type.14f: type = fn_type @F.1, @CompleteClass(%T) [symbolic] // CHECK:STDOUT: %F.874: %F.type.14f = struct_value () [symbolic] // CHECK:STDOUT: %CompleteClass.a06: type = class_type @CompleteClass, @CompleteClass(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.84b: type = pattern_type %CompleteClass.a06 [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: %CompleteClass.elem.426: type = unbound_element_type %CompleteClass.a06, %i32 [concrete] @@ -301,7 +306,7 @@ class Class(U:! type) { // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//foo, loc4_13, loaded [symbolic = @Class.%T.1 (constants.%T)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.eb1: = import_ref Main//foo, loc9_1, loaded [concrete = constants.%complete_type.a68] -// CHECK:STDOUT: %Main.import_ref.3c0 = import_ref Main//foo, inst35 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.3c0 = import_ref Main//foo, inst36 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.051 = import_ref Main//foo, loc7_8, unloaded // CHECK:STDOUT: %Main.import_ref.570 = import_ref Main//foo, loc8_17, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] @@ -318,13 +323,13 @@ class Class(U:! type) { // CHECK:STDOUT: %default.import.loc2_19.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.1 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.1 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T, 0 [symbolic = %T.1 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %return.patt: %CompleteClass.a06 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %CompleteClass.a06 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.84b = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.84b = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %CompleteClass.ref: %CompleteClass.type = name_ref CompleteClass, imports.%Main.CompleteClass [concrete = constants.%CompleteClass.generic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -337,7 +342,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(imports.%Main.import_ref.5ab3ec.1: type) { // CHECK:STDOUT: %T.1: type = bind_symbolic_name T, 0 [symbolic = %T.1 (constants.%T)] -// CHECK:STDOUT: %T.patt.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.1 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.1 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.1 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -362,7 +367,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.5ab3ec.2: type) [from "foo.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] @@ -441,6 +446,7 @@ class Class(U:! type) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %UseMethod.type: type = fn_type @UseMethod [concrete] // CHECK:STDOUT: %UseMethod: %UseMethod.type = struct_value () [concrete] // CHECK:STDOUT: %CompleteClass.type: type = generic_class_type @CompleteClass [concrete] @@ -449,7 +455,8 @@ class Class(U:! type) { // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %CompleteClass.f97: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %CompleteClass.elem.28a: type = unbound_element_type %CompleteClass.f97, %i32 [symbolic] // CHECK:STDOUT: %F.type.14f: type = fn_type @F.1, @CompleteClass(%T) [symbolic] // CHECK:STDOUT: %F.874: %F.type.14f = struct_value () [symbolic] @@ -457,6 +464,7 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass.elem.7fc: type = unbound_element_type %CompleteClass.e9e, %i32 [concrete] // CHECK:STDOUT: %F.type.1bc: type = fn_type @F.1, @CompleteClass(%i32) [concrete] // CHECK:STDOUT: %F.f7c: %F.type.1bc = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.0b0: type = pattern_type %CompleteClass.e9e [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F.f7c, @F.1(%i32) [concrete] @@ -475,7 +483,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.eb1: = import_ref Main//foo, loc9_1, loaded [concrete = constants.%complete_type.54b] -// CHECK:STDOUT: %Main.import_ref.3c0 = import_ref Main//foo, inst35 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.3c0 = import_ref Main//foo, inst36 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.e76: @CompleteClass.%CompleteClass.elem (%CompleteClass.elem.28a) = import_ref Main//foo, loc7_8, loaded [concrete = %.364] // CHECK:STDOUT: %Main.import_ref.a52: @CompleteClass.%F.type (%F.type.14f) = import_ref Main//foo, loc8_17, loaded [symbolic = @CompleteClass.%F (constants.%F.874)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] @@ -493,8 +501,8 @@ class Class(U:! type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %UseMethod.decl: %UseMethod.type = fn_decl @UseMethod [concrete = constants.%UseMethod] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -502,8 +510,8 @@ class Class(U:! type) { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %UseField.decl: %UseField.type = fn_decl @UseField [concrete = constants.%UseField] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc10: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc10: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -514,7 +522,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.5ab3ec.1: type) [from "foo.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] @@ -535,8 +543,8 @@ class Class(U:! type) { // CHECK:STDOUT: fn @UseMethod() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %CompleteClass.e9e = binding_pattern v -// CHECK:STDOUT: %.loc6_3.1: %CompleteClass.e9e = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.0b0 = binding_pattern v +// CHECK:STDOUT: %.loc6_3.1: %pattern_type.0b0 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %CompleteClass.e9e = var v // CHECK:STDOUT: %F.ref.loc6: %F.type.b25 = name_ref F, imports.%Main.F [concrete = constants.%F.c41] @@ -571,8 +579,8 @@ class Class(U:! type) { // CHECK:STDOUT: fn @UseField() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %CompleteClass.e9e = binding_pattern v -// CHECK:STDOUT: %.loc11_3.1: %CompleteClass.e9e = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.0b0 = binding_pattern v +// CHECK:STDOUT: %.loc11_3.1: %pattern_type.0b0 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %CompleteClass.e9e = var v // CHECK:STDOUT: %F.ref: %F.type.b25 = name_ref F, imports.%Main.F [concrete = constants.%F.c41] @@ -636,7 +644,8 @@ class Class(U:! type) { // CHECK:STDOUT: %complete_type.a68: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %CompleteClass.f97: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %CompleteClass.elem.9ef: type = unbound_element_type %CompleteClass.f97, %i32 [symbolic] // CHECK:STDOUT: %F.type.14f: type = fn_type @F.1, @CompleteClass(%T) [symbolic] // CHECK:STDOUT: %F.874: %F.type.14f = struct_value () [symbolic] @@ -645,6 +654,7 @@ class Class(U:! type) { // CHECK:STDOUT: %CompleteClass.elem.d29: type = unbound_element_type %CompleteClass.0fe, %i32 [concrete] // CHECK:STDOUT: %F.type.8cf: type = fn_type @F.1, @CompleteClass(%ptr.9e1) [concrete] // CHECK:STDOUT: %F.012: %F.type.8cf = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.062: type = pattern_type %CompleteClass.0fe [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: %CompleteClass.a06: type = class_type @CompleteClass, @CompleteClass(%i32) [concrete] @@ -665,7 +675,7 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.eb1: = import_ref Main//foo, loc9_1, loaded [concrete = constants.%complete_type.a68] -// CHECK:STDOUT: %Main.import_ref.3c0 = import_ref Main//foo, inst35 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.3c0 = import_ref Main//foo, inst36 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.051 = import_ref Main//foo, loc7_8, unloaded // CHECK:STDOUT: %Main.import_ref.570 = import_ref Main//foo, loc8_17, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//foo, loc6_21, loaded [symbolic = @CompleteClass.%T (constants.%T)] @@ -686,7 +696,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @CompleteClass(imports.%Main.import_ref.5ab3ec.1: type) [from "foo.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %CompleteClass: type = class_type @CompleteClass, @CompleteClass(%T) [symbolic = %CompleteClass (constants.%CompleteClass.f97)] @@ -707,8 +717,8 @@ class Class(U:! type) { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %CompleteClass.0fe = binding_pattern v -// CHECK:STDOUT: %.loc14_3.1: %CompleteClass.0fe = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.062 = binding_pattern v +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.062 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %CompleteClass.0fe = var v // CHECK:STDOUT: %F.ref: %F.type.b25 = name_ref F, imports.%Main.F [concrete = constants.%F.c41] @@ -775,12 +785,13 @@ class Class(U:! type) { // CHECK:STDOUT: --- fail_foo.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %Class.type.cf06d9.1: type = generic_class_type @Class.1 [concrete] // CHECK:STDOUT: %Class.generic.9545f5.1: %Class.type.cf06d9.1 = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type.cf06d9.2: type = generic_class_type @Class.2 [concrete] // CHECK:STDOUT: %Class.generic.9545f5.2: %Class.type.cf06d9.2 = struct_value () [concrete] // CHECK:STDOUT: %Class.fe1b2d.2: type = class_type @Class.2, @Class.2(%U) [symbolic] @@ -809,7 +820,7 @@ class Class(U:! type) { // CHECK:STDOUT: %default.import.loc2_19.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type.cf06d9.2 = class_decl @Class.2 [concrete = constants.%Class.generic.9545f5.2] { -// CHECK:STDOUT: %U.patt.loc12_13.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_13.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc12_13.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_13.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc12_13.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc12_13.2 (constants.%U)] // CHECK:STDOUT: } @@ -817,14 +828,14 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class.1(imports.%Main.import_ref.5ab: type) [from "foo.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class.2(%U.loc12_13.1: type) { // CHECK:STDOUT: %U.loc12_13.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc12_13.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc12_13.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_13.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc12_13.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_13.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/init.carbon b/toolchain/check/testdata/class/generic/init.carbon index ffbb3bc105a3..872ef87209e1 100644 --- a/toolchain/check/testdata/class/generic/init.carbon +++ b/toolchain/check/testdata/class/generic/init.carbon @@ -46,7 +46,8 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class.fe1: type = class_type @Class, @Class(%T) [symbolic] @@ -54,11 +55,14 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %Class.elem.e26: type = unbound_element_type %Class.fe1, %T [symbolic] // CHECK:STDOUT: %struct_type.k.b21: type = struct_type {.k: %T} [symbolic] // CHECK:STDOUT: %complete_type.b9e: = complete_type_witness %struct_type.k.b21 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %InitFromStructGeneric.type: type = fn_type @InitFromStructGeneric [concrete] // CHECK:STDOUT: %InitFromStructGeneric: %InitFromStructGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4f8: = require_complete_type %Class.fe1 [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class.fe1 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %InitFromStructSpecific.type: type = fn_type @InitFromStructSpecific [concrete] // CHECK:STDOUT: %InitFromStructSpecific: %InitFromStructSpecific.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -67,6 +71,7 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %Class.elem.2d8: type = unbound_element_type %Class.247, %i32 [concrete] // CHECK:STDOUT: %struct_type.k.0bf: type = struct_type {.k: %i32} [concrete] // CHECK:STDOUT: %complete_type.954: = complete_type_witness %struct_type.k.0bf [concrete] +// CHECK:STDOUT: %pattern_type.0fa: type = pattern_type %Class.247 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -86,16 +91,16 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %InitFromStructGeneric.decl: %InitFromStructGeneric.type = fn_decl @InitFromStructGeneric [concrete = constants.%InitFromStructGeneric] { -// CHECK:STDOUT: %T.patt.loc8_26.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_26.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @InitFromStructGeneric.%T.loc8_26.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @InitFromStructGeneric.%T.loc8_26.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @InitFromStructGeneric.%T.loc8_26.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @InitFromStructGeneric.%T.loc8_26.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @InitFromStructGeneric.%pattern_type.loc8 (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @InitFromStructGeneric.%pattern_type.loc8 (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @InitFromStructGeneric.%pattern_type.loc8 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @InitFromStructGeneric.%pattern_type.loc8 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_45: type = name_ref T, %T.loc8_26.1 [symbolic = %T.loc8_26.2 (constants.%T)] // CHECK:STDOUT: %T.loc8_26.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_26.2 (constants.%T)] @@ -106,10 +111,10 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %return: ref @InitFromStructGeneric.%T.loc8_26.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InitFromStructSpecific.decl: %InitFromStructSpecific.type = fn_decl @InitFromStructSpecific [concrete = constants.%InitFromStructSpecific] { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %i32 = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.7ce = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc13_38: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc13_38: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -126,7 +131,7 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_13.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -151,20 +156,22 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @InitFromStructGeneric(%T.loc8_26.1: type) { // CHECK:STDOUT: %T.loc8_26.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_26.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_26.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type.loc8: type = pattern_type %T.loc8_26.2 [symbolic = %pattern_type.loc8 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8: = require_complete_type %T.loc8_26.2 [symbolic = %require_complete.loc8 (constants.%require_complete.4ae)] // CHECK:STDOUT: %Class.loc9_17.2: type = class_type @Class, @Class(%T.loc8_26.2) [symbolic = %Class.loc9_17.2 (constants.%Class.fe1)] // CHECK:STDOUT: %require_complete.loc9: = require_complete_type %Class.loc9_17.2 [symbolic = %require_complete.loc9 (constants.%require_complete.4f8)] +// CHECK:STDOUT: %pattern_type.loc9: type = pattern_type %Class.loc9_17.2 [symbolic = %pattern_type.loc9 (constants.%pattern_type.3c1)] // CHECK:STDOUT: %struct_type.k: type = struct_type {.k: @InitFromStructGeneric.%T.loc8_26.2 (%T)} [symbolic = %struct_type.k (constants.%struct_type.k.b21)] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class.loc9_17.2, %T.loc8_26.2 [symbolic = %Class.elem (constants.%Class.elem.e26)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @InitFromStructGeneric.%T.loc8_26.2 (%T)) -> @InitFromStructGeneric.%T.loc8_26.2 (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @InitFromStructGeneric.%Class.loc9_17.2 (%Class.fe1) = binding_pattern v -// CHECK:STDOUT: %.loc9_3.1: @InitFromStructGeneric.%Class.loc9_17.2 (%Class.fe1) = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.3c1) = binding_pattern v +// CHECK:STDOUT: %.loc9_3.1: @InitFromStructGeneric.%pattern_type.loc9 (%pattern_type.3c1) = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @InitFromStructGeneric.%Class.loc9_17.2 (%Class.fe1) = var v // CHECK:STDOUT: %x.ref: @InitFromStructGeneric.%T.loc8_26.2 (%T) = name_ref x, %x @@ -191,8 +198,8 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: fn @InitFromStructSpecific(%x.param: %i32) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %Class.247 = binding_pattern v -// CHECK:STDOUT: %.loc14_3.1: %Class.247 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.0fa = binding_pattern v +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.0fa = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %Class.247 = var v // CHECK:STDOUT: %x.ref: %i32 = name_ref x, %x @@ -233,6 +240,7 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: specific @InitFromStructGeneric(constants.%T) { // CHECK:STDOUT: %T.loc8_26.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_26.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type.loc8 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@InitFromStructGeneric.%T.loc8_26.2) {} @@ -253,17 +261,20 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Adapt.type: type = generic_class_type @Adapt [concrete] // CHECK:STDOUT: %Adapt.generic: %Adapt.type = struct_value () [concrete] // CHECK:STDOUT: %Adapt.2e4: type = class_type @Adapt, @Adapt(%T) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %complete_type.f87: = complete_type_witness %T [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %InitFromAdaptedGeneric.type: type = fn_type @InitFromAdaptedGeneric [concrete] // CHECK:STDOUT: %InitFromAdaptedGeneric: %InitFromAdaptedGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.26c: = require_complete_type %Adapt.2e4 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %InitFromAdaptedSpecific.type: type = fn_type @InitFromAdaptedSpecific [concrete] // CHECK:STDOUT: %InitFromAdaptedSpecific: %InitFromAdaptedSpecific.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -289,16 +300,16 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Adapt.decl: %Adapt.type = class_decl @Adapt [concrete = constants.%Adapt.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %InitFromAdaptedGeneric.decl: %InitFromAdaptedGeneric.type = fn_decl @InitFromAdaptedGeneric [concrete = constants.%InitFromAdaptedGeneric] { -// CHECK:STDOUT: %T.patt.loc8_27.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_27.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @InitFromAdaptedGeneric.%T.loc8_27.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @InitFromAdaptedGeneric.%T.loc8_27.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @InitFromAdaptedGeneric.%T.loc8_27.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @InitFromAdaptedGeneric.%T.loc8_27.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_27.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @InitFromAdaptedGeneric.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_46: type = name_ref T, %T.loc8_27.1 [symbolic = %T.loc8_27.2 (constants.%T)] // CHECK:STDOUT: %T.loc8_27.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_27.2 (constants.%T)] @@ -309,10 +320,10 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %return: ref @InitFromAdaptedGeneric.%T.loc8_27.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InitFromAdaptedSpecific.decl: %InitFromAdaptedSpecific.type = fn_decl @InitFromAdaptedSpecific [concrete = constants.%InitFromAdaptedSpecific] { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %i32 = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.7ce = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12_39: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12_39: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -329,7 +340,7 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Adapt(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_13.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -349,7 +360,8 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @InitFromAdaptedGeneric(%T.loc8_27.1: type) { // CHECK:STDOUT: %T.loc8_27.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_27.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_27.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_27.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc8_27.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8: = require_complete_type %T.loc8_27.2 [symbolic = %require_complete.loc8 (constants.%require_complete.4ae)] @@ -399,6 +411,7 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: specific @InitFromAdaptedGeneric(constants.%T) { // CHECK:STDOUT: %T.loc8_27.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_27.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Adapt(@InitFromAdaptedGeneric.%T.loc8_27.2) {} diff --git a/toolchain/check/testdata/class/generic/member_access.carbon b/toolchain/check/testdata/class/generic/member_access.carbon index d8180e64f652..bc0d1561be23 100644 --- a/toolchain/check/testdata/class/generic/member_access.carbon +++ b/toolchain/check/testdata/class/generic/member_access.carbon @@ -53,16 +53,22 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class.fe1: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %Class.elem.e26: type = unbound_element_type %Class.fe1, %T [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class.fe1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Get.type.fd9: type = fn_type @Get, @Class(%T) [symbolic] // CHECK:STDOUT: %Get.cf9: %Get.type.fd9 = struct_value () [symbolic] // CHECK:STDOUT: %ptr.955: type = ptr_type %Class.fe1 [symbolic] +// CHECK:STDOUT: %pattern_type.9e0: type = pattern_type %ptr.955 [symbolic] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %GetAddr.type.402: type = fn_type @GetAddr, @Class(%T) [symbolic] // CHECK:STDOUT: %GetAddr.102: %GetAddr.type.402 = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.x.2ac: type = struct_type {.x: %T} [symbolic] @@ -73,6 +79,8 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Class.247: type = class_type @Class, @Class(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.0fa: type = pattern_type %Class.247 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %DirectFieldAccess.type: type = fn_type @DirectFieldAccess [concrete] // CHECK:STDOUT: %DirectFieldAccess: %DirectFieldAccess.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -88,9 +96,11 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %MethodCall: %MethodCall.type = struct_value () [concrete] // CHECK:STDOUT: %Get.specific_fn: = specific_function %Get.a40, @Get(%i32) [concrete] // CHECK:STDOUT: %ptr.f7c: type = ptr_type %Class.247 [concrete] +// CHECK:STDOUT: %pattern_type.14a: type = pattern_type %ptr.f7c [concrete] // CHECK:STDOUT: %AddrMethodCall.type: type = fn_type @AddrMethodCall [concrete] // CHECK:STDOUT: %AddrMethodCall: %AddrMethodCall.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %GetAddr.specific_fn: = specific_function %GetAddr.909, @GetAddr(%i32) [concrete] // CHECK:STDOUT: %complete_type.3d0: = complete_type_witness %ptr.235 [concrete] // CHECK:STDOUT: %complete_type.6ee: = complete_type_witness %ptr.f7c [concrete] @@ -114,15 +124,15 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc2_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc2_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc2_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %DirectFieldAccess.decl: %DirectFieldAccess.type = fn_decl @DirectFieldAccess [concrete = constants.%DirectFieldAccess] { -// CHECK:STDOUT: %x.patt: %Class.247 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %Class.247 = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.0fa = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.0fa = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc10_40: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc10_40: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -138,10 +148,10 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MethodCall.decl: %MethodCall.type = fn_decl @MethodCall [concrete = constants.%MethodCall] { -// CHECK:STDOUT: %x.patt: %Class.247 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %Class.247 = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.0fa = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.0fa = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc14_33: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc14_33: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -157,10 +167,10 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AddrMethodCall.decl: %AddrMethodCall.type = fn_decl @AddrMethodCall [concrete = constants.%AddrMethodCall] { -// CHECK:STDOUT: %p.patt: %ptr.f7c = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.f7c = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.14a = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.14a = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc18_38: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc18_38: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -180,7 +190,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc2_13.1: type) { // CHECK:STDOUT: %T.loc2_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc2_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc2_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc2_13.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -197,10 +207,10 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc2_13.1 [symbolic = %T.loc2_13.2 (constants.%T)] // CHECK:STDOUT: %.loc3: @Class.%Class.elem (%Class.elem.e26) = field_decl x, element0 [concrete] // CHECK:STDOUT: %Get.decl: @Class.%Get.type (%Get.type.fd9) = fn_decl @Get [symbolic = @Class.%Get (constants.%Get.cf9)] { -// CHECK:STDOUT: %self.patt: @Get.%Class (%Class.fe1) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Get.%Class (%Class.fe1) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Get.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Get.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Get.%pattern_type.loc5_10 (%pattern_type.3c1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Get.%pattern_type.loc5_10 (%pattern_type.3c1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Get.%pattern_type.loc5_24 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Get.%pattern_type.loc5_24 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc2_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Get.%Class (%Class.fe1) = value_param call_param0 @@ -213,11 +223,11 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %return: ref @Get.%T (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %GetAddr.decl: @Class.%GetAddr.type (%GetAddr.type.402) = fn_decl @GetAddr [symbolic = @Class.%GetAddr (constants.%GetAddr.102)] { -// CHECK:STDOUT: %self.patt: @GetAddr.%ptr.loc7_29.1 (%ptr.955) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @GetAddr.%ptr.loc7_29.1 (%ptr.955) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc7_14: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %return.patt: @GetAddr.%ptr.loc7_38.1 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @GetAddr.%ptr.loc7_38.1 (%ptr.79f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @GetAddr.%pattern_type.loc7_19 (%pattern_type.9e0) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @GetAddr.%pattern_type.loc7_19 (%pattern_type.9e0) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc7_14: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %return.patt: @GetAddr.%pattern_type.loc7_34 (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @GetAddr.%pattern_type.loc7_34 (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc2_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %ptr.loc7_38.2: type = ptr_type %T.ref [symbolic = %ptr.loc7_38.1 (constants.%ptr.79f)] @@ -247,6 +257,8 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: generic fn @Get(@Class.%T.loc2_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class.fe1)] +// CHECK:STDOUT: %pattern_type.loc5_10: type = pattern_type %Class [symbolic = %pattern_type.loc5_10 (constants.%pattern_type.3c1)] +// CHECK:STDOUT: %pattern_type.loc5_24: type = pattern_type %T [symbolic = %pattern_type.loc5_24 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc5_14: = require_complete_type %Class [symbolic = %require_complete.loc5_14 (constants.%require_complete.4f8)] @@ -267,7 +279,9 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class.fe1)] // CHECK:STDOUT: %ptr.loc7_29.1: type = ptr_type %Class [symbolic = %ptr.loc7_29.1 (constants.%ptr.955)] +// CHECK:STDOUT: %pattern_type.loc7_19: type = pattern_type %ptr.loc7_29.1 [symbolic = %pattern_type.loc7_19 (constants.%pattern_type.9e0)] // CHECK:STDOUT: %ptr.loc7_38.1: type = ptr_type %T [symbolic = %ptr.loc7_38.1 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type.loc7_34: type = pattern_type %ptr.loc7_38.1 [symbolic = %pattern_type.loc7_34 (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_34: = require_complete_type %ptr.loc7_38.1 [symbolic = %require_complete.loc7_34 (constants.%require_complete.6e5)] @@ -346,6 +360,8 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: specific @Get(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class => constants.%Class.fe1 +// CHECK:STDOUT: %pattern_type.loc5_10 => constants.%pattern_type.3c1 +// CHECK:STDOUT: %pattern_type.loc5_24 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@Get.%T) {} @@ -354,7 +370,9 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class => constants.%Class.fe1 // CHECK:STDOUT: %ptr.loc7_29.1 => constants.%ptr.955 +// CHECK:STDOUT: %pattern_type.loc7_19 => constants.%pattern_type.9e0 // CHECK:STDOUT: %ptr.loc7_38.1 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type.loc7_34 => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@GetAddr.%T) {} @@ -380,6 +398,8 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: specific @Get(constants.%i32) { // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: %Class => constants.%Class.247 +// CHECK:STDOUT: %pattern_type.loc5_10 => constants.%pattern_type.0fa +// CHECK:STDOUT: %pattern_type.loc5_24 => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc5_14 => constants.%complete_type.1ec @@ -391,7 +411,9 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: %Class => constants.%Class.247 // CHECK:STDOUT: %ptr.loc7_29.1 => constants.%ptr.f7c +// CHECK:STDOUT: %pattern_type.loc7_19 => constants.%pattern_type.14a // CHECK:STDOUT: %ptr.loc7_38.1 => constants.%ptr.235 +// CHECK:STDOUT: %pattern_type.loc7_34 => constants.%pattern_type.fe8 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_34 => constants.%complete_type.3d0 @@ -404,10 +426,12 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class [symbolic] // CHECK:STDOUT: %Make.type: type = fn_type @Make, @Class(%T) [symbolic] // CHECK:STDOUT: %Make: %Make.type = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -446,14 +470,14 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %StaticMemberFunctionCall.decl: %StaticMemberFunctionCall.type = fn_decl @StaticMemberFunctionCall [concrete = constants.%StaticMemberFunctionCall] { -// CHECK:STDOUT: %T.patt.loc8_29.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_29.2 (constants.%T.patt)] -// CHECK:STDOUT: %return.patt: @StaticMemberFunctionCall.%Class.loc8_49.2 (%Class) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @StaticMemberFunctionCall.%Class.loc8_49.2 (%Class) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc8_29.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_29.2 (constants.%T.patt)] +// CHECK:STDOUT: %return.patt: @StaticMemberFunctionCall.%pattern_type (%pattern_type.3c1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @StaticMemberFunctionCall.%pattern_type (%pattern_type.3c1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref.loc8: %Class.type = name_ref Class, file.%Class.decl [concrete = constants.%Class.generic] // CHECK:STDOUT: %T.ref.loc8: type = name_ref T, %T.loc8_29.1 [symbolic = %T.loc8_29.2 (constants.%T)] @@ -466,7 +490,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Make.type: type = fn_type @Make, @Class(%T.loc4_13.2) [symbolic = %Make.type (constants.%Make.type)] @@ -474,8 +498,8 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Make.decl: @Class.%Make.type (%Make.type) = fn_decl @Make [symbolic = @Class.%Make (constants.%Make)] { -// CHECK:STDOUT: %return.patt: @Make.%Class.loc5_23.1 (%Class) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Make.%Class.loc5_23.1 (%Class) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Make.%pattern_type (%pattern_type.3c1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Make.%pattern_type (%pattern_type.3c1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: %Class.type = name_ref Class, file.%Class.decl [concrete = constants.%Class.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc4_13.1 [symbolic = %T (constants.%T)] @@ -498,6 +522,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: generic fn @Make(@Class.%T.loc4_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class.loc5_23.1: type = class_type @Class, @Class(%T) [symbolic = %Class.loc5_23.1 (constants.%Class)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Class.loc5_23.1 [symbolic = %pattern_type (constants.%pattern_type.3c1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Class.loc5_23.1 [symbolic = %require_complete (constants.%require_complete.4f8)] @@ -514,8 +539,9 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @StaticMemberFunctionCall(%T.loc8_29.1: type) { // CHECK:STDOUT: %T.loc8_29.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_29.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_29.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_29.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_29.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_29.2 (constants.%T.patt)] // CHECK:STDOUT: %Class.loc8_49.2: type = class_type @Class, @Class(%T.loc8_29.2) [symbolic = %Class.loc8_49.2 (constants.%Class)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Class.loc8_49.2 [symbolic = %pattern_type (constants.%pattern_type.3c1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_18: = require_complete_type %Class.loc8_49.2 [symbolic = %require_complete.loc16_18 (constants.%require_complete.4f8)] @@ -557,6 +583,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: specific @Make(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class.loc5_23.1 => constants.%Class +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3c1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4f8 @@ -571,6 +598,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %T.loc8_29.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_29.2 => constants.%T.patt // CHECK:STDOUT: %Class.loc8_49.2 => constants.%Class +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3c1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@StaticMemberFunctionCall.%T.loc8_29.2) {} diff --git a/toolchain/check/testdata/class/generic/member_inline.carbon b/toolchain/check/testdata/class/generic/member_inline.carbon index 9304f5614e9b..34c031eddc65 100644 --- a/toolchain/check/testdata/class/generic/member_inline.carbon +++ b/toolchain/check/testdata/class/generic/member_inline.carbon @@ -43,12 +43,15 @@ class C(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @Class(%T) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G, @Class(%T) [symbolic] // CHECK:STDOUT: %G: %G.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -72,7 +75,7 @@ class C(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } @@ -80,7 +83,7 @@ class C(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.type: type = fn_type @F, @Class(%T.loc4_13.2) [symbolic = %F.type (constants.%F.type)] @@ -95,10 +98,10 @@ class C(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @Class.%F.type (%F.type) = fn_decl @F [symbolic = @Class.%F (constants.%F)] { -// CHECK:STDOUT: %n.patt: @F.%T (%T) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.%T (%T) = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.%pattern_type (%pattern_type.7dc) = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc5_17: type = name_ref T, @Class.%T.loc4_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %n.param: @F.%T (%T) = value_param call_param0 @@ -108,10 +111,10 @@ class C(T:! type) { // CHECK:STDOUT: %return: ref @F.%T (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: @Class.%G.type (%G.type) = fn_decl @G [symbolic = @Class.%G (constants.%G)] { -// CHECK:STDOUT: %self.patt: @G.%Class (%Class) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.%Class (%Class) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @G.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @G.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @G.%pattern_type.loc9_8 (%pattern_type.3c1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.%pattern_type.loc9_8 (%pattern_type.3c1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @G.%pattern_type.loc9_22 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @G.%pattern_type.loc9_22 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc4_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @G.%Class (%Class) = value_param call_param0 @@ -140,6 +143,7 @@ class C(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(@Class.%T.loc4_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -154,6 +158,8 @@ class C(T:! type) { // CHECK:STDOUT: generic fn @G(@Class.%T.loc4_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] +// CHECK:STDOUT: %pattern_type.loc9_8: type = pattern_type %Class [symbolic = %pattern_type.loc9_8 (constants.%pattern_type.3c1)] +// CHECK:STDOUT: %pattern_type.loc9_22: type = pattern_type %T [symbolic = %pattern_type.loc9_22 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9: = require_complete_type %Class [symbolic = %require_complete.loc9 (constants.%require_complete.4f8)] @@ -188,11 +194,14 @@ class C(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class => constants.%Class +// CHECK:STDOUT: %pattern_type.loc9_8 => constants.%pattern_type.3c1 +// CHECK:STDOUT: %pattern_type.loc9_22 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@G.%T) {} @@ -203,7 +212,8 @@ class C(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic] @@ -229,7 +239,7 @@ class C(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -237,7 +247,7 @@ class C(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.type: type = fn_type @F, @C(%T.loc4_9.2) [symbolic = %F.type (constants.%F.type)] diff --git a/toolchain/check/testdata/class/generic/member_lookup.carbon b/toolchain/check/testdata/class/generic/member_lookup.carbon index 336a0bdcc82c..c033babd5ec5 100644 --- a/toolchain/check/testdata/class/generic/member_lookup.carbon +++ b/toolchain/check/testdata/class/generic/member_lookup.carbon @@ -74,7 +74,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Base.type: type = generic_class_type @Base [concrete] // CHECK:STDOUT: %Base.generic: %Base.type = struct_value () [concrete] // CHECK:STDOUT: %Base.370: type = class_type @Base, @Base(%T) [symbolic] @@ -90,6 +91,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %Derived.elem.6d2: type = unbound_element_type %Derived.85c, %T [symbolic] // CHECK:STDOUT: %struct_type.base.d.37c: type = struct_type {.base: %Base.370, .d: %T} [symbolic] // CHECK:STDOUT: %complete_type.8ad: = complete_type_witness %struct_type.base.d.37c [symbolic] +// CHECK:STDOUT: %pattern_type.423: type = pattern_type %Derived.85c [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %AccessDerived.type: type = fn_type @AccessDerived [concrete] // CHECK:STDOUT: %AccessDerived: %AccessDerived.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.5f4: = require_complete_type %Derived.85c [symbolic] @@ -98,6 +101,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Derived.115: type = class_type @Derived, @Derived(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.9c5: type = pattern_type %Derived.115 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessConcrete.type: type = fn_type @AccessConcrete [concrete] // CHECK:STDOUT: %AccessConcrete: %AccessConcrete.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -131,21 +136,21 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Base.decl: %Base.type = class_decl @Base [concrete = constants.%Base.generic] { -// CHECK:STDOUT: %T.patt.loc4_17.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_17.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.decl: %Derived.type = class_decl @Derived [concrete = constants.%Derived.generic] { -// CHECK:STDOUT: %T.patt.loc8_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %AccessDerived.decl: %AccessDerived.type = fn_decl @AccessDerived [concrete = constants.%AccessDerived] { -// CHECK:STDOUT: %T.patt.loc13_18.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_18.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @AccessDerived.%Derived.loc13_40.2 (%Derived.85c) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @AccessDerived.%Derived.loc13_40.2 (%Derived.85c) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @AccessDerived.%T.loc13_18.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @AccessDerived.%T.loc13_18.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc13_18.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @AccessDerived.%pattern_type.loc13_28 (%pattern_type.423) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @AccessDerived.%pattern_type.loc13_28 (%pattern_type.423) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @AccessDerived.%pattern_type.loc13_43 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @AccessDerived.%pattern_type.loc13_43 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13_46: type = name_ref T, %T.loc13_18.1 [symbolic = %T.loc13_18.2 (constants.%T)] // CHECK:STDOUT: %T.loc13_18.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_18.2 (constants.%T)] @@ -160,11 +165,11 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %return: ref @AccessDerived.%T.loc13_18.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessBase.decl: %AccessBase.type = fn_decl @AccessBase [concrete = constants.%AccessBase] { -// CHECK:STDOUT: %T.patt.loc17_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @AccessBase.%Derived.loc17_37.2 (%Derived.85c) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @AccessBase.%Derived.loc17_37.2 (%Derived.85c) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @AccessBase.%T.loc17_15.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @AccessBase.%T.loc17_15.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc17_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @AccessBase.%pattern_type.loc17_25 (%pattern_type.423) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @AccessBase.%pattern_type.loc17_25 (%pattern_type.423) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @AccessBase.%pattern_type.loc17_40 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @AccessBase.%pattern_type.loc17_40 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc17_43: type = name_ref T, %T.loc17_15.1 [symbolic = %T.loc17_15.2 (constants.%T)] // CHECK:STDOUT: %T.loc17_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc17_15.2 (constants.%T)] @@ -179,10 +184,10 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %return: ref @AccessBase.%T.loc17_15.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessConcrete.decl: %AccessConcrete.type = fn_decl @AccessConcrete [concrete = constants.%AccessConcrete] { -// CHECK:STDOUT: %x.patt: %Derived.115 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %Derived.115 = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.9c5 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.9c5 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc21_39: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc21_39: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -201,7 +206,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_17.1: type) { // CHECK:STDOUT: %T.loc4_17.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_17.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_17.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -226,7 +231,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Derived(%T.loc8_15.1: type) { // CHECK:STDOUT: %T.loc8_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Base.loc9_22.2: type = class_type @Base, @Base(%T.loc8_15.2) [symbolic = %Base.loc9_22.2 (constants.%Base.370)] @@ -262,8 +267,10 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessDerived(%T.loc13_18.1: type) { // CHECK:STDOUT: %T.loc13_18.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_18.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc13_18.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc13_18.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_18.2 (constants.%T.patt)] // CHECK:STDOUT: %Derived.loc13_40.2: type = class_type @Derived, @Derived(%T.loc13_18.2) [symbolic = %Derived.loc13_40.2 (constants.%Derived.85c)] +// CHECK:STDOUT: %pattern_type.loc13_28: type = pattern_type %Derived.loc13_40.2 [symbolic = %pattern_type.loc13_28 (constants.%pattern_type.423)] +// CHECK:STDOUT: %pattern_type.loc13_43: type = pattern_type %T.loc13_18.2 [symbolic = %pattern_type.loc13_43 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13: = require_complete_type %Derived.loc13_40.2 [symbolic = %require_complete.loc13 (constants.%require_complete.5f4)] @@ -282,8 +289,10 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessBase(%T.loc17_15.1: type) { // CHECK:STDOUT: %T.loc17_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc17_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc17_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc17_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_15.2 (constants.%T.patt)] // CHECK:STDOUT: %Derived.loc17_37.2: type = class_type @Derived, @Derived(%T.loc17_15.2) [symbolic = %Derived.loc17_37.2 (constants.%Derived.85c)] +// CHECK:STDOUT: %pattern_type.loc17_25: type = pattern_type %Derived.loc17_37.2 [symbolic = %pattern_type.loc17_25 (constants.%pattern_type.423)] +// CHECK:STDOUT: %pattern_type.loc17_40: type = pattern_type %T.loc17_15.2 [symbolic = %pattern_type.loc17_40 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17: = require_complete_type %Derived.loc17_37.2 [symbolic = %require_complete.loc17 (constants.%require_complete.5f4)] @@ -352,6 +361,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %T.loc13_18.2 => constants.%T // CHECK:STDOUT: %T.patt.loc13_18.2 => constants.%T.patt // CHECK:STDOUT: %Derived.loc13_40.2 => constants.%Derived.85c +// CHECK:STDOUT: %pattern_type.loc13_28 => constants.%pattern_type.423 +// CHECK:STDOUT: %pattern_type.loc13_43 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Derived(@AccessDerived.%T.loc13_18.2) {} @@ -360,6 +371,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %T.loc17_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc17_15.2 => constants.%T.patt // CHECK:STDOUT: %Derived.loc17_37.2 => constants.%Derived.85c +// CHECK:STDOUT: %pattern_type.loc17_25 => constants.%pattern_type.423 +// CHECK:STDOUT: %pattern_type.loc17_40 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Derived(@AccessBase.%T.loc17_15.2) {} @@ -397,7 +410,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Base.type: type = generic_class_type @Base [concrete] // CHECK:STDOUT: %Base.generic: %Base.type = struct_value () [concrete] // CHECK:STDOUT: %Base.370: type = class_type @Base, @Base(%T) [symbolic] @@ -413,14 +427,19 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %Derived.elem.6d2: type = unbound_element_type %Derived.85c, %T [symbolic] // CHECK:STDOUT: %struct_type.base.d.37c: type = struct_type {.base: %Base.370, .d: %T} [symbolic] // CHECK:STDOUT: %complete_type.8ad: = complete_type_witness %struct_type.base.d.37c [symbolic] +// CHECK:STDOUT: %pattern_type.9f7: type = pattern_type %Base.370 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %AccessMissingBase.type: type = fn_type @AccessMissingBase [concrete] // CHECK:STDOUT: %AccessMissingBase: %AccessMissingBase.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.423: type = pattern_type %Derived.85c [symbolic] // CHECK:STDOUT: %AccessMissingDerived.type: type = fn_type @AccessMissingDerived [concrete] // CHECK:STDOUT: %AccessMissingDerived: %AccessMissingDerived.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.5f4: = require_complete_type %Derived.85c [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Derived.115: type = class_type @Derived, @Derived(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.9c5: type = pattern_type %Derived.115 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMissingConcrete.type: type = fn_type @AccessMissingConcrete [concrete] // CHECK:STDOUT: %AccessMissingConcrete: %AccessMissingConcrete.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -454,21 +473,21 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Base.decl: %Base.type = class_decl @Base [concrete = constants.%Base.generic] { -// CHECK:STDOUT: %T.patt.loc4_17.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_17.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Derived.decl: %Derived.type = class_decl @Derived [concrete = constants.%Derived.generic] { -// CHECK:STDOUT: %T.patt.loc8_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMissingBase.decl: %AccessMissingBase.type = fn_decl @AccessMissingBase [concrete = constants.%AccessMissingBase] { -// CHECK:STDOUT: %T.patt.loc13_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_22.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @AccessMissingBase.%Base.loc13_41.2 (%Base.370) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @AccessMissingBase.%Base.loc13_41.2 (%Base.370) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @AccessMissingBase.%T.loc13_22.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @AccessMissingBase.%T.loc13_22.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @AccessMissingBase.%pattern_type.loc13_32 (%pattern_type.9f7) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @AccessMissingBase.%pattern_type.loc13_32 (%pattern_type.9f7) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @AccessMissingBase.%pattern_type.loc13_44 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @AccessMissingBase.%pattern_type.loc13_44 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13_47: type = name_ref T, %T.loc13_22.1 [symbolic = %T.loc13_22.2 (constants.%T)] // CHECK:STDOUT: %T.loc13_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_22.2 (constants.%T)] @@ -483,11 +502,11 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %return: ref @AccessMissingBase.%T.loc13_22.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMissingDerived.decl: %AccessMissingDerived.type = fn_decl @AccessMissingDerived [concrete = constants.%AccessMissingDerived] { -// CHECK:STDOUT: %T.patt.loc21_25.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_25.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @AccessMissingDerived.%Derived.loc21_47.2 (%Derived.85c) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @AccessMissingDerived.%Derived.loc21_47.2 (%Derived.85c) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @AccessMissingDerived.%T.loc21_25.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @AccessMissingDerived.%T.loc21_25.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc21_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @AccessMissingDerived.%pattern_type.loc21_35 (%pattern_type.423) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @AccessMissingDerived.%pattern_type.loc21_35 (%pattern_type.423) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @AccessMissingDerived.%pattern_type.loc21_50 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @AccessMissingDerived.%pattern_type.loc21_50 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc21_53: type = name_ref T, %T.loc21_25.1 [symbolic = %T.loc21_25.2 (constants.%T)] // CHECK:STDOUT: %T.loc21_25.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_25.2 (constants.%T)] @@ -502,10 +521,10 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %return: ref @AccessMissingDerived.%T.loc21_25.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMissingConcrete.decl: %AccessMissingConcrete.type = fn_decl @AccessMissingConcrete [concrete = constants.%AccessMissingConcrete] { -// CHECK:STDOUT: %x.patt: %Derived.115 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %Derived.115 = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.9c5 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.9c5 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc29_46: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc29_46: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -524,7 +543,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc4_17.1: type) { // CHECK:STDOUT: %T.loc4_17.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_17.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_17.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -550,7 +569,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Derived(%T.loc8_15.1: type) { // CHECK:STDOUT: %T.loc8_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Base.loc9_22.2: type = class_type @Base, @Base(%T.loc8_15.2) [symbolic = %Base.loc9_22.2 (constants.%Base.370)] @@ -586,8 +605,10 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessMissingBase(%T.loc13_22.1: type) { // CHECK:STDOUT: %T.loc13_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc13_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_22.2 (constants.%T.patt)] // CHECK:STDOUT: %Base.loc13_41.2: type = class_type @Base, @Base(%T.loc13_22.2) [symbolic = %Base.loc13_41.2 (constants.%Base.370)] +// CHECK:STDOUT: %pattern_type.loc13_32: type = pattern_type %Base.loc13_41.2 [symbolic = %pattern_type.loc13_32 (constants.%pattern_type.9f7)] +// CHECK:STDOUT: %pattern_type.loc13_44: type = pattern_type %T.loc13_22.2 [symbolic = %pattern_type.loc13_44 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Base.loc13_41.2 [symbolic = %require_complete (constants.%require_complete.97d)] @@ -602,8 +623,10 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessMissingDerived(%T.loc21_25.1: type) { // CHECK:STDOUT: %T.loc21_25.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_25.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_25.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_25.2 (constants.%T.patt)] // CHECK:STDOUT: %Derived.loc21_47.2: type = class_type @Derived, @Derived(%T.loc21_25.2) [symbolic = %Derived.loc21_47.2 (constants.%Derived.85c)] +// CHECK:STDOUT: %pattern_type.loc21_35: type = pattern_type %Derived.loc21_47.2 [symbolic = %pattern_type.loc21_35 (constants.%pattern_type.423)] +// CHECK:STDOUT: %pattern_type.loc21_50: type = pattern_type %T.loc21_25.2 [symbolic = %pattern_type.loc21_50 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc21: = require_complete_type %Derived.loc21_47.2 [symbolic = %require_complete.loc21 (constants.%require_complete.5f4)] @@ -662,6 +685,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %T.loc13_22.2 => constants.%T // CHECK:STDOUT: %T.patt.loc13_22.2 => constants.%T.patt // CHECK:STDOUT: %Base.loc13_41.2 => constants.%Base.370 +// CHECK:STDOUT: %pattern_type.loc13_32 => constants.%pattern_type.9f7 +// CHECK:STDOUT: %pattern_type.loc13_44 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Base(@AccessMissingBase.%T.loc13_22.2) {} @@ -670,6 +695,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %T.loc21_25.2 => constants.%T // CHECK:STDOUT: %T.patt.loc21_25.2 => constants.%T.patt // CHECK:STDOUT: %Derived.loc21_47.2 => constants.%Derived.85c +// CHECK:STDOUT: %pattern_type.loc21_35 => constants.%pattern_type.423 +// CHECK:STDOUT: %pattern_type.loc21_50 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Derived(@AccessMissingDerived.%T.loc21_25.2) {} diff --git a/toolchain/check/testdata/class/generic/member_out_of_line.carbon b/toolchain/check/testdata/class/generic/member_out_of_line.carbon index ecedccd1752a..30e464a5a1b9 100644 --- a/toolchain/check/testdata/class/generic/member_out_of_line.carbon +++ b/toolchain/check/testdata/class/generic/member_out_of_line.carbon @@ -97,7 +97,7 @@ class Generic(T:! type) { fn WrongType(); } -// CHECK:STDERR: fail_mismatched_wrong_arg_type.carbon:[[@LINE+7]]:12: error: type `()` of parameter 1 in redeclaration differs from previous parameter type `type` [RedeclParamDiffersType] +// CHECK:STDERR: fail_mismatched_wrong_arg_type.carbon:[[@LINE+7]]:12: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: fn Generic(T:! ()).WrongType() {} // CHECK:STDERR: ^ // CHECK:STDERR: fail_mismatched_wrong_arg_type.carbon:[[@LINE-7]]:15: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -110,12 +110,15 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @Class(%T) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G, @Class(%T) [symbolic] // CHECK:STDOUT: %G: %G.type = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -139,15 +142,15 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: @Class.%F.type (%F.type) = fn_decl @F [symbolic = constants.%F] { -// CHECK:STDOUT: %n.patt: @F.%T.loc5 (%T) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.%T.loc5 (%T) = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc5 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc5 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.%pattern_type (%pattern_type.7dc) = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc10: type = bind_symbolic_name T, 0 [symbolic = @Class.%T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: %T.ref.loc10_31: type = name_ref T, %T.loc10 [symbolic = %T.loc5 (constants.%T)] @@ -158,10 +161,10 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %return.loc10: ref @F.%T.loc5 (%T) = return_slot %return.param.loc10 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: @Class.%G.type (%G.type) = fn_decl @G [symbolic = constants.%G] { -// CHECK:STDOUT: %self.patt: @G.%Class (%Class) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.%Class (%Class) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @G.%T.loc6 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @G.%T.loc6 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @G.%pattern_type.loc6_8 (%pattern_type.3c1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.%pattern_type.loc6_8 (%pattern_type.3c1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @G.%pattern_type.loc6_22 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @G.%pattern_type.loc6_22 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc14: type = bind_symbolic_name T, 0 [symbolic = @Class.%T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: %T.ref.loc14: type = name_ref T, %T.loc14 [symbolic = %T.loc6 (constants.%T)] @@ -178,7 +181,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.type: type = fn_type @F, @Class(%T.loc4_13.2) [symbolic = %F.type (constants.%F.type)] @@ -193,10 +196,10 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @Class.%F.type (%F.type) = fn_decl @F [symbolic = @Class.%F (constants.%F)] { -// CHECK:STDOUT: %n.patt: @F.%T.loc5 (%T) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.%T.loc5 (%T) = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc5 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc5 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.%pattern_type (%pattern_type.7dc) = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc5_17: type = name_ref T, @Class.%T.loc4_13.1 [symbolic = %T.loc5 (constants.%T)] // CHECK:STDOUT: %n.param.loc5: @F.%T.loc5 (%T) = value_param call_param0 @@ -206,10 +209,10 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %return.loc5: ref @F.%T.loc5 (%T) = return_slot %return.param.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: @Class.%G.type (%G.type) = fn_decl @G [symbolic = @Class.%G (constants.%G)] { -// CHECK:STDOUT: %self.patt: @G.%Class (%Class) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.%Class (%Class) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @G.%T.loc6 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @G.%T.loc6 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @G.%pattern_type.loc6_8 (%pattern_type.3c1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.%pattern_type.loc6_8 (%pattern_type.3c1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @G.%pattern_type.loc6_22 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @G.%pattern_type.loc6_22 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6: type = name_ref T, @Class.%T.loc4_13.1 [symbolic = %T.loc6 (constants.%T)] // CHECK:STDOUT: %self.param.loc6: @G.%Class (%Class) = value_param call_param0 @@ -238,6 +241,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(@Class.%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc5: type = bind_symbolic_name T, 0 [symbolic = %T.loc5 (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc5 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc5 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -252,6 +256,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: generic fn @G(@Class.%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc6: type = bind_symbolic_name T, 0 [symbolic = %T.loc6 (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc6) [symbolic = %Class (constants.%Class)] +// CHECK:STDOUT: %pattern_type.loc6_8: type = pattern_type %Class [symbolic = %pattern_type.loc6_8 (constants.%pattern_type.3c1)] +// CHECK:STDOUT: %pattern_type.loc6_22: type = pattern_type %T.loc6 [symbolic = %pattern_type.loc6_22 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc14: = require_complete_type %Class [symbolic = %require_complete.loc14 (constants.%require_complete.4f8)] @@ -286,11 +292,14 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc5 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T) { // CHECK:STDOUT: %T.loc6 => constants.%T // CHECK:STDOUT: %Class => constants.%Class +// CHECK:STDOUT: %pattern_type.loc6_8 => constants.%pattern_type.3c1 +// CHECK:STDOUT: %pattern_type.loc6_22 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@G.%T.loc6) {} @@ -301,15 +310,18 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A: type = class_type @A, @A(%T) [symbolic] // CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt: %T = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.7dc = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %B.type: type = generic_class_type @B, @A(%T) [symbolic] // CHECK:STDOUT: %B.generic: %B.type = struct_value () [symbolic] // CHECK:STDOUT: %B: type = class_type @B, @B(%T, %N) [symbolic] +// CHECK:STDOUT: %pattern_type.13e: type = pattern_type %B [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @B(%T, %N) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -332,15 +344,15 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: @B.%F.type (%F.type) = fn_decl @F [symbolic = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%B (%B) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%B (%B) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %a.patt: @F.%T.loc6 (%T) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%T.loc6 (%T) = value_param_pattern %a.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.%pattern_type.loc6_10 (%pattern_type.13e) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type.loc6_10 (%pattern_type.13e) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc6_22 (%pattern_type.7dc) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc6_22 (%pattern_type.7dc) = value_param_pattern %a.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc10: type = bind_symbolic_name T, 0 [symbolic = @A.%T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: %T.ref.loc10_22: type = name_ref T, %T.loc10 [symbolic = @B.%T (constants.%T)] @@ -359,7 +371,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @A(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %B.type: type = generic_class_type @B, @A(%T.loc4_9.2) [symbolic = %B.type (constants.%B.type)] @@ -367,7 +379,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %B.decl: @A.%B.type (%B.type) = class_decl @B [symbolic = @A.%B.generic (constants.%B.generic)] { -// CHECK:STDOUT: %N.patt.loc5_11.1: @B.%T (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc5_11.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc5_11.1: @B.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc5_11.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @A.%T.loc4_9.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %N.loc5_11.1: @B.%T (%T) = bind_symbolic_name N, 1 [symbolic = %N.loc5_11.2 (constants.%N)] @@ -386,7 +398,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: generic class @B(@A.%T.loc4_9.1: type, %N.loc5_11.1: @B.%T (%T)) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %N.loc5_11.2: @B.%T (%T) = bind_symbolic_name N, 1 [symbolic = %N.loc5_11.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc5_11.2: @B.%T (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc5_11.2 (constants.%N.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %N.patt.loc5_11.2: @B.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc5_11.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.type: type = fn_type @F, @B(%T, %N.loc5_11.2) [symbolic = %F.type (constants.%F.type)] @@ -394,10 +407,10 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @B.%F.type (%F.type) = fn_decl @F [symbolic = @B.%F (constants.%F)] { -// CHECK:STDOUT: %self.patt: @F.%B (%B) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%B (%B) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %a.patt: @F.%T.loc6 (%T) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%T.loc6 (%T) = value_param_pattern %a.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.%pattern_type.loc6_10 (%pattern_type.13e) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type.loc6_10 (%pattern_type.13e) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc6_22 (%pattern_type.7dc) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc6_22 (%pattern_type.7dc) = value_param_pattern %a.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc6: @F.%B (%B) = value_param call_param0 // CHECK:STDOUT: %.loc6_16.1: type = splice_block %Self.ref.loc6 [symbolic = %B (constants.%B)] { @@ -424,6 +437,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %T.loc6: type = bind_symbolic_name T, 0 [symbolic = %T.loc6 (constants.%T)] // CHECK:STDOUT: %N.loc6: @F.%T.loc6 (%T) = bind_symbolic_name N, 1 [symbolic = %N.loc6 (constants.%N)] // CHECK:STDOUT: %B: type = class_type @B, @B(%T.loc6, %N.loc6) [symbolic = %B (constants.%B)] +// CHECK:STDOUT: %pattern_type.loc6_10: type = pattern_type %B [symbolic = %pattern_type.loc6_10 (constants.%pattern_type.13e)] +// CHECK:STDOUT: %pattern_type.loc6_22: type = pattern_type %T.loc6 [symbolic = %pattern_type.loc6_22 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10_31: = require_complete_type %B [symbolic = %require_complete.loc10_31 (constants.%require_complete.fca)] @@ -447,6 +462,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: specific @B(constants.%T, constants.%N) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %N.loc5_11.2 => constants.%N +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: %N.patt.loc5_11.2 => constants.%N.patt // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -458,6 +474,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %T.loc6 => constants.%T // CHECK:STDOUT: %N.loc6 => constants.%N // CHECK:STDOUT: %B => constants.%B +// CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.13e +// CHECK:STDOUT: %pattern_type.loc6_22 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @B(@F.%T.loc6, @F.%N.loc6) {} @@ -475,7 +493,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -514,7 +533,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(%T.loc15_15.1: type) { // CHECK:STDOUT: %T.loc15_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -533,7 +552,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type = struct_value () [concrete] // CHECK:STDOUT: %Generic: type = class_type @Generic, @Generic(%T) [symbolic] @@ -559,7 +579,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type = class_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -568,7 +588,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @Generic(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %TooFew.type: type = fn_type @TooFew.1, @Generic(%T.loc4_15.2) [symbolic = %TooFew.type (constants.%TooFew.type.dac)] @@ -608,7 +628,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type = struct_value () [concrete] // CHECK:STDOUT: %Generic: type = class_type @Generic, @Generic(%T) [symbolic] @@ -617,7 +638,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %TooMany.type.c84: type = fn_type @TooMany.2 [concrete] // CHECK:STDOUT: %TooMany.1dc: %TooMany.type.c84 = struct_value () [concrete] // CHECK:STDOUT: } @@ -636,7 +657,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type = class_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -648,7 +669,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @Generic(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %TooMany.type: type = fn_type @TooMany.1, @Generic(%T.loc4_15.2) [symbolic = %TooMany.type (constants.%TooMany.type.cc8)] @@ -672,9 +693,9 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TooMany.2(%T.loc15_12.1: type, %U.loc15_22.1: type) { // CHECK:STDOUT: %T.loc15_12.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_12.2 (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %U.loc15_22.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc15_22.2 (constants.%U)] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt (constants.%U.patt)] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 1 [symbolic = %U.patt (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -704,7 +725,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type = struct_value () [concrete] @@ -714,7 +736,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T.7a6: %empty_tuple.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e60: %empty_tuple.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %T.patt.c75: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %WrongType.type.edf: type = fn_type @WrongType.2 [concrete] // CHECK:STDOUT: %WrongType.131: %WrongType.type.edf = struct_value () [concrete] // CHECK:STDOUT: } @@ -733,7 +756,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type = class_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T.8b3)] // CHECK:STDOUT: } @@ -748,7 +771,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @Generic(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %WrongType.type: type = fn_type @WrongType.1, @Generic(%T.loc4_15.2) [symbolic = %WrongType.type (constants.%WrongType.type.c41)] @@ -772,7 +795,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WrongType.2(%T.loc15_12.1: %empty_tuple.type) { // CHECK:STDOUT: %T.loc15_12.2: %empty_tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc15_12.2 (constants.%T.7a6)] -// CHECK:STDOUT: %T.patt: %empty_tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.e60)] +// CHECK:STDOUT: %T.patt: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.c75)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -784,7 +807,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T.8b3) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WrongType.1(constants.%T.8b3) {} @@ -793,6 +816,6 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: // CHECK:STDOUT: specific @WrongType.2(constants.%T.7a6) { // CHECK:STDOUT: %T.loc15_12.2 => constants.%T.7a6 -// CHECK:STDOUT: %T.patt => constants.%T.patt.e60 +// CHECK:STDOUT: %T.patt => constants.%T.patt.c75 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/member_type.carbon b/toolchain/check/testdata/class/generic/member_type.carbon index 35faf0ff16f5..2679593310d3 100644 --- a/toolchain/check/testdata/class/generic/member_type.carbon +++ b/toolchain/check/testdata/class/generic/member_type.carbon @@ -56,7 +56,8 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.9d6: type = class_type @Outer, @Outer(%T) [symbolic] @@ -65,6 +66,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.elem.310: type = unbound_element_type %Inner.51b, %T [symbolic] // CHECK:STDOUT: %struct_type.n.848: type = struct_type {.n: %T} [symbolic] // CHECK:STDOUT: %complete_type.84b: = complete_type_witness %struct_type.n.848 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.253: type = pattern_type %Inner.51b [symbolic] // CHECK:STDOUT: %F.type.2ee: type = fn_type @F, @Outer(%T) [symbolic] // CHECK:STDOUT: %F.384: %F.type.2ee = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -72,6 +75,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %require_complete.561: = require_complete_type %Inner.51b [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -83,6 +87,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.elem.6c2: type = unbound_element_type %Inner.721, %i32 [concrete] // CHECK:STDOUT: %struct_type.n.033: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n.033 [concrete] +// CHECK:STDOUT: %pattern_type.c22: type = pattern_type %Inner.721 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F.c88, @F(%i32) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -116,13 +121,13 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -133,7 +138,7 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T.loc4_13.2) [symbolic = %Inner (constants.%Inner.51b)] @@ -143,10 +148,10 @@ fn Test() -> i32 { // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: type = class_decl @Inner [symbolic = @Outer.%Inner (constants.%Inner.51b)] {} {} // CHECK:STDOUT: %F.decl: @Outer.%F.type (%F.type.2ee) = fn_decl @F [symbolic = @Outer.%F (constants.%F.384)] { -// CHECK:STDOUT: %n.patt: @F.%T (%T) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.%T (%T) = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%Inner (%Inner.51b) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%Inner (%Inner.51b) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: @F.%pattern_type.loc9_8 (%pattern_type.7dcd0a.1) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.%pattern_type.loc9_8 (%pattern_type.7dcd0a.1) = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc9_14 (%pattern_type.253) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc9_14 (%pattern_type.253) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_17: type = specific_constant @Outer.%Inner.decl, @Outer(constants.%T) [symbolic = %Inner (constants.%Inner.51b)] // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, %.loc9_17 [symbolic = %Inner (constants.%Inner.51b)] @@ -193,7 +198,9 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(@Outer.%T.loc4_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type.loc9_8: type = pattern_type %T [symbolic = %pattern_type.loc9_8 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%T) [symbolic = %Inner (constants.%Inner.51b)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Inner [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.253)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_14: = require_complete_type %Inner [symbolic = %require_complete.loc9_14 (constants.%require_complete.561)] @@ -215,8 +222,8 @@ fn Test() -> i32 { // CHECK:STDOUT: fn @Test() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Inner.721 = binding_pattern c -// CHECK:STDOUT: %.loc13_3.1: %Inner.721 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c22 = binding_pattern c +// CHECK:STDOUT: %.loc13_3.1: %pattern_type.c22 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Inner.721 = var c // CHECK:STDOUT: %Outer.ref.loc13_29: %Outer.type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer.generic] @@ -277,7 +284,9 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type.loc9_8 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: %Inner => constants.%Inner.51b +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.253 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(@F.%T) {} @@ -308,7 +317,9 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%i32) { // CHECK:STDOUT: %T => constants.%i32 +// CHECK:STDOUT: %pattern_type.loc9_8 => constants.%pattern_type.7ce // CHECK:STDOUT: %Inner => constants.%Inner.721 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.c22 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_14 => constants.%complete_type.54b @@ -320,13 +331,16 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.9d6: type = class_type @Outer, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.type.392: type = facet_type <@Inner, @Inner(%T)> [symbolic] // CHECK:STDOUT: %Self.770: %Inner.type.392 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.ea1: type = facet_access_type %Self.770 [symbolic] +// CHECK:STDOUT: %pattern_type.81e: type = pattern_type %Self.as_type.ea1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.0f3: type = fn_type @F.1, @Inner(%T) [symbolic] // CHECK:STDOUT: %F.db9: %F.type.0f3 = struct_value () [symbolic] // CHECK:STDOUT: %Inner.assoc_type.115: type = assoc_entity_type @Inner, @Inner(%T) [symbolic] @@ -334,6 +348,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %C.390: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %require_complete.8fa: = require_complete_type %Inner.type.392 [symbolic] // CHECK:STDOUT: %Inner.impl_witness.b15: = impl_witness @C.%Inner.impl_witness_table, @impl.eed(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.e59: type = pattern_type %C.390 [symbolic] // CHECK:STDOUT: %F.type.77b: type = fn_type @F.2, @impl.eed(%T) [symbolic] // CHECK:STDOUT: %F.ed9: %F.type.77b = struct_value () [symbolic] // CHECK:STDOUT: %Inner.facet.9a3: %Inner.type.392 = facet_value %C.390, (%Inner.impl_witness.b15) [symbolic] @@ -358,6 +373,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.assoc_type.215: type = assoc_entity_type @Inner, @Inner(%i32) [concrete] // CHECK:STDOUT: %assoc0.e80: %Inner.assoc_type.215 = assoc_entity element0, @Inner.%F.decl [concrete] // CHECK:STDOUT: %Inner.impl_witness.1dc: = impl_witness @D.%Inner.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.a78: type = fn_type @F.3 [concrete] // CHECK:STDOUT: %F.a24: %F.type.a78 = struct_value () [concrete] // CHECK:STDOUT: %Inner.facet.edc: %Inner.type.52d = facet_value %D, (%Inner.impl_witness.1dc) [concrete] @@ -365,6 +382,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.de9: type = pattern_type %C.70f [concrete] // CHECK:STDOUT: %C.val: %C.70f = struct_value () [concrete] // CHECK:STDOUT: %complete_type.9fa: = complete_type_witness %Inner.type.52d [concrete] // CHECK:STDOUT: %Inner.impl_witness.47d: = impl_witness @C.%Inner.impl_witness_table, @impl.eed(%i32) [concrete] @@ -392,14 +410,14 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc22: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc22: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -421,10 +439,10 @@ fn Test() -> i32 { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @Inner.%Inner.type (%Inner.type.392) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.770)] // CHECK:STDOUT: %F.decl: @Inner.%F.type (%F.type.0f3) = fn_decl @F.1 [symbolic = @Inner.%F (constants.%F.db9)] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc6_16.1 (%Self.as_type.ea1) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc6_16.1 (%Self.as_type.ea1) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type.loc6_10 (%pattern_type.81e) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type.loc6_10 (%pattern_type.81e) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type.loc6_24 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type.loc6_24 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc4_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc6_16.1 (%Self.as_type.ea1) = value_param call_param0 @@ -461,10 +479,10 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: impl: %Self.ref as %Inner.ref { // CHECK:STDOUT: %F.decl: @impl.eed.%F.type (%F.type.77b) = fn_decl @F.2 [symbolic = @impl.eed.%F (constants.%F.ed9)] { -// CHECK:STDOUT: %self.patt: @F.2.%C (%C.390) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%C (%C.390) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type.loc11_12 (%pattern_type.e59) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type.loc11_12 (%pattern_type.e59) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type.loc11_23 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type.loc11_23 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc4_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @F.2.%C (%C.390) = value_param call_param0 @@ -488,10 +506,10 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.a83: %Self.ref as %Inner.ref { // CHECK:STDOUT: %F.decl: %F.type.a78 = fn_decl @F.3 [concrete = constants.%F.a24] { -// CHECK:STDOUT: %self.patt: %D = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %D = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.510 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.510 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -510,7 +528,7 @@ fn Test() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.type: type = facet_type <@Inner, @Inner(%T.loc4_13.2)> [symbolic = %Inner.type (constants.%Inner.type.392)] @@ -581,6 +599,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.type: type = facet_type <@Inner, @Inner(%T)> [symbolic = %Inner.type (constants.%Inner.type.392)] // CHECK:STDOUT: %Self: @F.1.%Inner.type (%Inner.type.392) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.770)] // CHECK:STDOUT: %Self.as_type.loc6_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_16.1 (constants.%Self.as_type.ea1)] +// CHECK:STDOUT: %pattern_type.loc6_10: type = pattern_type %Self.as_type.loc6_16.1 [symbolic = %pattern_type.loc6_10 (constants.%pattern_type.81e)] +// CHECK:STDOUT: %pattern_type.loc6_24: type = pattern_type %T [symbolic = %pattern_type.loc6_24 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc6_16.1 (%Self.as_type.ea1)) -> @F.1.%T (%T); // CHECK:STDOUT: } @@ -588,6 +608,8 @@ fn Test() -> i32 { // CHECK:STDOUT: generic fn @F.2(@Outer.%T.loc4_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.390)] +// CHECK:STDOUT: %pattern_type.loc11_12: type = pattern_type %C [symbolic = %pattern_type.loc11_12 (constants.%pattern_type.e59)] +// CHECK:STDOUT: %pattern_type.loc11_23: type = pattern_type %T [symbolic = %pattern_type.loc11_23 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc11_23: = require_complete_type %T [symbolic = %require_complete.loc11_23 (constants.%require_complete.4ae)] @@ -626,8 +648,8 @@ fn Test() -> i32 { // CHECK:STDOUT: fn @Test() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C.70f = binding_pattern c -// CHECK:STDOUT: %.loc23_3.1: %C.70f = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.de9 = binding_pattern c +// CHECK:STDOUT: %.loc23_3.1: %pattern_type.de9 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.70f = var c // CHECK:STDOUT: %.loc23_26.1: %empty_struct_type = struct_literal () @@ -688,6 +710,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.type => constants.%Inner.type.392 // CHECK:STDOUT: %Self => constants.%Self.770 // CHECK:STDOUT: %Self.as_type.loc6_16.1 => constants.%Self.as_type.ea1 +// CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.81e +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(@F.1.%T) {} @@ -719,6 +743,8 @@ fn Test() -> i32 { // CHECK:STDOUT: specific @F.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %C => constants.%C.390 +// CHECK:STDOUT: %pattern_type.loc11_12 => constants.%pattern_type.e59 +// CHECK:STDOUT: %pattern_type.loc11_23 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(@F.2.%T) {} @@ -728,6 +754,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.type => constants.%Inner.type.392 // CHECK:STDOUT: %Self => constants.%Inner.facet.9a3 // CHECK:STDOUT: %Self.as_type.loc6_16.1 => constants.%C.390 +// CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.e59 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(@Outer.%T.loc4_13.2) {} @@ -739,6 +767,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.type => constants.%Inner.type.392 // CHECK:STDOUT: %Self => constants.%Inner.facet.c18 // CHECK:STDOUT: %Self.as_type.loc6_16.1 => constants.%C.390 +// CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.e59 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(@F.2.%T) {} @@ -774,6 +804,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.type => constants.%Inner.type.52d // CHECK:STDOUT: %Self => constants.%Inner.facet.edc // CHECK:STDOUT: %Self.as_type.loc6_16.1 => constants.%D +// CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.510 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.eed(constants.%i32) { @@ -791,6 +823,8 @@ fn Test() -> i32 { // CHECK:STDOUT: specific @F.2(constants.%i32) { // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: %C => constants.%C.70f +// CHECK:STDOUT: %pattern_type.loc11_12 => constants.%pattern_type.de9 +// CHECK:STDOUT: %pattern_type.loc11_23 => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc11_23 => constants.%complete_type.f8a @@ -812,5 +846,7 @@ fn Test() -> i32 { // CHECK:STDOUT: %Inner.type => constants.%Inner.type.52d // CHECK:STDOUT: %Self => constants.%Inner.facet.840 // CHECK:STDOUT: %Self.as_type.loc6_16.1 => constants.%C.70f +// CHECK:STDOUT: %pattern_type.loc6_10 => constants.%pattern_type.de9 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/method_deduce.carbon b/toolchain/check/testdata/class/generic/method_deduce.carbon index a8b870519f16..3680bf52c45a 100644 --- a/toolchain/check/testdata/class/generic/method_deduce.carbon +++ b/toolchain/check/testdata/class/generic/method_deduce.carbon @@ -32,16 +32,19 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class.fe1: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.30b: type = tuple_type (%T, %U) [symbolic] +// CHECK:STDOUT: %pattern_type.65c: type = pattern_type %tuple.type.30b [symbolic] // CHECK:STDOUT: %Get.type.fd9: type = fn_type @Get, @Class(%T) [symbolic] // CHECK:STDOUT: %Get.cf9: %Get.type.fd9 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %GetNoDeduce.type.766: type = fn_type @GetNoDeduce, @Class(%T) [symbolic] // CHECK:STDOUT: %GetNoDeduce.c9a: %GetNoDeduce.type.766 = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.fe1: = require_complete_type %tuple.type.30b [symbolic] @@ -50,7 +53,9 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %require_complete.b54: = require_complete_type %U [symbolic] // CHECK:STDOUT: %GetNoDeduce.specific_fn.536: = specific_function %GetNoDeduce.c9a, @GetNoDeduce(%T, %U) [symbolic] // CHECK:STDOUT: %Class.480: type = class_type @Class, @Class(%A) [concrete] +// CHECK:STDOUT: %pattern_type.827: type = pattern_type %Class.480 [concrete] // CHECK:STDOUT: %tuple.type.cc6: type = tuple_type (%A, %B) [concrete] +// CHECK:STDOUT: %pattern_type.edc: type = pattern_type %tuple.type.cc6 [concrete] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %Get.type.501: type = fn_type @Get, @Class(%A) [concrete] @@ -60,6 +65,7 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %Get.specific_fn.213: = specific_function %Get.f37, @Get(%A, %B) [concrete] // CHECK:STDOUT: %CallGenericMethodWithNonDeducedParam.type: type = fn_type @CallGenericMethodWithNonDeducedParam [concrete] // CHECK:STDOUT: %CallGenericMethodWithNonDeducedParam: %CallGenericMethodWithNonDeducedParam.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %GetNoDeduce.specific_fn.438: = specific_function %GetNoDeduce.162, @GetNoDeduce(%A, %B) [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: %complete_type.56a: = complete_type_witness %tuple.type.cc6 [concrete] @@ -85,15 +91,15 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc14_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc14_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %c.patt: %Class.480 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class.480 = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type.cc6 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.cc6 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.827 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.827 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.edc = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.edc = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc19_39: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %B.ref.loc19: type = name_ref B, file.%B.decl [concrete = constants.%B] @@ -110,10 +116,10 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %return: ref %tuple.type.cc6 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericMethodWithNonDeducedParam.decl: %CallGenericMethodWithNonDeducedParam.type = fn_decl @CallGenericMethodWithNonDeducedParam [concrete = constants.%CallGenericMethodWithNonDeducedParam] { -// CHECK:STDOUT: %c.patt: %Class.480 = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class.480 = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type.cc6 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.cc6 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.827 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.827 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.edc = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.edc = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc23_58: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %B.ref.loc23: type = name_ref B, file.%B.decl [concrete = constants.%B] @@ -151,7 +157,7 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc14_13.1: type) { // CHECK:STDOUT: %T.loc14_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc14_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Get.type: type = fn_type @Get, @Class(%T.loc14_13.2) [symbolic = %Get.type (constants.%Get.type.fd9)] @@ -161,9 +167,9 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Get.decl: @Class.%Get.type (%Get.type.fd9) = fn_decl @Get [symbolic = @Class.%Get (constants.%Get.cf9)] { -// CHECK:STDOUT: %U.patt.loc15_10.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_10.2 (constants.%U.patt)] -// CHECK:STDOUT: %return.patt: @Get.%tuple.type (%tuple.type.30b) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Get.%tuple.type (%tuple.type.30b) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc15_10.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_10.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.patt: @Get.%pattern_type (%pattern_type.65c) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Get.%pattern_type (%pattern_type.65c) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc14_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %U.ref.loc15_27: type = name_ref U, %U.loc15_10.2 [symbolic = %U.loc15_10.1 (constants.%U)] @@ -174,11 +180,11 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %return: ref @Get.%tuple.type (%tuple.type.30b) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %GetNoDeduce.decl: @Class.%GetNoDeduce.type (%GetNoDeduce.type.766) = fn_decl @GetNoDeduce [symbolic = @Class.%GetNoDeduce (constants.%GetNoDeduce.c9a)] { -// CHECK:STDOUT: %x.patt: @GetNoDeduce.%T (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @GetNoDeduce.%T (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %U.patt.loc16_24.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc16_24.2 (constants.%U.patt)] -// CHECK:STDOUT: %return.patt: @GetNoDeduce.%tuple.type (%tuple.type.30b) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @GetNoDeduce.%tuple.type (%tuple.type.30b) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: @GetNoDeduce.%pattern_type.loc16_18 (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @GetNoDeduce.%pattern_type.loc16_18 (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc16_24.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc16_24.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.patt: @GetNoDeduce.%pattern_type.loc16_34 (%pattern_type.65c) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @GetNoDeduce.%pattern_type.loc16_34 (%pattern_type.65c) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc16_38: type = name_ref T, @Class.%T.loc14_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %U.ref.loc16_41: type = name_ref U, %U.loc16_24.2 [symbolic = %U.loc16_24.1 (constants.%U)] @@ -205,9 +211,10 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Get(@Class.%T.loc14_13.1: type, %U.loc15_10.2: type) { // CHECK:STDOUT: %U.loc15_10.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc15_10.1 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc15_10.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_10.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc15_10.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_10.2 (constants.%U.patt)] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T, %U.loc15_10.1) [symbolic = %tuple.type (constants.%tuple.type.30b)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [symbolic = %pattern_type (constants.%pattern_type.65c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15_20: = require_complete_type %tuple.type [symbolic = %require_complete.loc15_20 (constants.%require_complete.fe1)] @@ -242,9 +249,11 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @GetNoDeduce(@Class.%T.loc14_13.1: type, %U.loc16_24.2: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type.loc16_18: type = pattern_type %T [symbolic = %pattern_type.loc16_18 (constants.%pattern_type.7dc)] // CHECK:STDOUT: %U.loc16_24.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc16_24.1 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc16_24.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc16_24.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc16_24.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc16_24.2 (constants.%U.patt)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T, %U.loc16_24.1) [symbolic = %tuple.type (constants.%tuple.type.30b)] +// CHECK:STDOUT: %pattern_type.loc16_34: type = pattern_type %tuple.type [symbolic = %pattern_type.loc16_34 (constants.%pattern_type.65c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_19: = require_complete_type %T [symbolic = %require_complete.loc16_19 (constants.%require_complete.4ae)] @@ -324,6 +333,7 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %U.patt.loc15_10.2 => constants.%U.patt // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %tuple.type => constants.%tuple.type.30b +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.65c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15_20 => constants.%require_complete.fe1 @@ -336,9 +346,11 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: // CHECK:STDOUT: specific @GetNoDeduce(constants.%T, constants.%U) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type.loc16_18 => constants.%pattern_type.7dc // CHECK:STDOUT: %U.loc16_24.1 => constants.%U // CHECK:STDOUT: %U.patt.loc16_24.2 => constants.%U.patt // CHECK:STDOUT: %tuple.type => constants.%tuple.type.30b +// CHECK:STDOUT: %pattern_type.loc16_34 => constants.%pattern_type.65c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_19 => constants.%require_complete.4ae @@ -375,6 +387,7 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: %U.patt.loc15_10.2 => constants.%U.patt // CHECK:STDOUT: %T => constants.%A // CHECK:STDOUT: %tuple.type => constants.%tuple.type.cc6 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.edc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15_20 => constants.%complete_type.56a @@ -387,9 +400,11 @@ fn CallGenericMethodWithNonDeducedParam(c: Class(A)) -> (A, B) { // CHECK:STDOUT: // CHECK:STDOUT: specific @GetNoDeduce(constants.%A, constants.%B) { // CHECK:STDOUT: %T => constants.%A +// CHECK:STDOUT: %pattern_type.loc16_18 => constants.%pattern_type.c10 // CHECK:STDOUT: %U.loc16_24.1 => constants.%B // CHECK:STDOUT: %U.patt.loc16_24.2 => constants.%U.patt // CHECK:STDOUT: %tuple.type => constants.%tuple.type.cc6 +// CHECK:STDOUT: %pattern_type.loc16_34 => constants.%pattern_type.edc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_19 => constants.%complete_type.357 diff --git a/toolchain/check/testdata/class/generic/redeclare.carbon b/toolchain/check/testdata/class/generic/redeclare.carbon index 08ef4f582989..8d50db09d8cc 100644 --- a/toolchain/check/testdata/class/generic/redeclare.carbon +++ b/toolchain/check/testdata/class/generic/redeclare.carbon @@ -64,7 +64,7 @@ class C(T:! type, U:! i32) {} library "[[@TEST_NAME]]"; class D(T:! type); -// CHECK:STDERR: fail_mismatch_param_type.carbon:[[@LINE+7]]:9: error: type `i32` of parameter 1 in redeclaration differs from previous parameter type `type` [RedeclParamDiffersType] +// CHECK:STDERR: fail_mismatch_param_type.carbon:[[@LINE+7]]:9: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: class D(T:! i32) {} // CHECK:STDERR: ^ // CHECK:STDERR: fail_mismatch_param_type.carbon:[[@LINE-4]]:9: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -91,7 +91,8 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type = struct_value () [concrete] // CHECK:STDOUT: %Generic: type = class_type @Generic, @Generic(%T) [symbolic] @@ -113,12 +114,12 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl.loc4: %Generic.type = class_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt.loc6: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl.loc6: %Generic.type = class_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt.loc6: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -126,7 +127,7 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @Generic(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -150,7 +151,8 @@ class E(U:! type) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %A.466: type = class_type @A.1 [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A.2 [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A.130: type = class_type @A.2, @A.2(%T) [symbolic] @@ -173,7 +175,7 @@ class E(U:! type) {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl.loc4: type = class_decl @A.1 [concrete = constants.%A.466] {} {} // CHECK:STDOUT: %A.decl.loc12: %A.type = class_decl @A.2 [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt.loc12_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_9.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc12_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -183,7 +185,7 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @A.2(%T.loc12_9.1: type) { // CHECK:STDOUT: %T.loc12_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_9.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -208,13 +210,16 @@ class E(U:! type) {} // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %B.type.844c0f.1: type = generic_class_type @B.1 [concrete] // CHECK:STDOUT: %B.generic.ba299b.1: %B.type.844c0f.1 = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %N.f22: %T = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt.51c: %T = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt.7fd: %pattern_type.7dc = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %B.type.844c0f.2: type = generic_class_type @B.2 [concrete] // CHECK:STDOUT: %B.generic.ba299b.2: %B.type.844c0f.2 = struct_value () [concrete] // CHECK:STDOUT: %B.828: type = class_type @B.2, @B.2(%T, %N.f22) [symbolic] @@ -237,7 +242,7 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %B.decl.loc4: %B.type.844c0f.1 = class_decl @B.1 [concrete = constants.%B.generic.ba299b.1] { -// CHECK:STDOUT: %N.patt.loc4_9.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_9.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc4_9.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_9.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -246,8 +251,8 @@ class E(U:! type) {} // CHECK:STDOUT: %N.loc4_9.1: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_9.2 (constants.%N.51e)] // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl.loc12: %B.type.844c0f.2 = class_decl @B.2 [concrete = constants.%B.generic.ba299b.2] { -// CHECK:STDOUT: %T.patt.loc12_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] -// CHECK:STDOUT: %N.patt.loc12_19.1: @B.2.%T.loc12_9.2 (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc12_19.2 (constants.%N.patt.51c)] +// CHECK:STDOUT: %T.patt.loc12_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc12_19.1: @B.2.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc12_19.2 (constants.%N.patt.7fd)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc12_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_9.2 (constants.%T)] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc12_9.1 [symbolic = %T.loc12_9.2 (constants.%T)] @@ -257,16 +262,17 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @B.1(%N.loc4_9.1: %i32) { // CHECK:STDOUT: %N.loc4_9.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_9.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc4_9.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_9.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc4_9.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_9.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @B.2(%T.loc12_9.1: type, %N.loc12_19.1: @B.2.%T.loc12_9.2 (%T)) { // CHECK:STDOUT: %T.loc12_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] // CHECK:STDOUT: %N.loc12_19.2: @B.2.%T.loc12_9.2 (%T) = bind_symbolic_name N, 1 [symbolic = %N.loc12_19.2 (constants.%N.f22)] -// CHECK:STDOUT: %N.patt.loc12_19.2: @B.2.%T.loc12_9.2 (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc12_19.2 (constants.%N.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc12_9.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %N.patt.loc12_19.2: @B.2.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc12_19.2 (constants.%N.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -282,27 +288,30 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @B.1(constants.%N.51e) { // CHECK:STDOUT: %N.loc4_9.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc4_9.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc4_9.2 => constants.%N.patt.f2c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @B.2(constants.%T, constants.%N.f22) { // CHECK:STDOUT: %T.loc12_9.2 => constants.%T // CHECK:STDOUT: %T.patt.loc12_9.2 => constants.%T.patt // CHECK:STDOUT: %N.loc12_19.2 => constants.%N.f22 -// CHECK:STDOUT: %N.patt.loc12_19.2 => constants.%N.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc +// CHECK:STDOUT: %N.patt.loc12_19.2 => constants.%N.patt.7fd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_param_count.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type.e6e560.1: type = generic_class_type @C.1 [concrete] // CHECK:STDOUT: %C.generic.965b12.1: %C.type.e6e560.1 = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %U: %i32 = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: %i32 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.7ce = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %C.type.e6e560.2: type = generic_class_type @C.2 [concrete] // CHECK:STDOUT: %C.generic.965b12.2: %C.type.e6e560.2 = struct_value () [concrete] // CHECK:STDOUT: %C.9d5: type = class_type @C.2, @C.2(%T, %U) [symbolic] @@ -325,13 +334,13 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl.loc4: %C.type.e6e560.1 = class_decl @C.1 [concrete = constants.%C.generic.965b12.1] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc12: %C.type.e6e560.2 = class_decl @C.2 [concrete = constants.%C.generic.965b12.2] { -// CHECK:STDOUT: %T.patt.loc12_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc12_19.1: %i32 = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_19.2 (constants.%U.patt)] +// CHECK:STDOUT: %T.patt.loc12_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc12_19.1: %pattern_type.7ce = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_19.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc12_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_9.2 (constants.%T)] // CHECK:STDOUT: %.loc12: type = splice_block %i32 [concrete = constants.%i32] { @@ -344,16 +353,16 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @C.1(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C.2(%T.loc12_9.1: type, %U.loc12_19.1: %i32) { // CHECK:STDOUT: %T.loc12_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc12_19.2: %i32 = bind_symbolic_name U, 1 [symbolic = %U.loc12_19.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc12_19.2: %i32 = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_19.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc12_19.2: %pattern_type.7ce = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_19.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -383,13 +392,15 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %D.type.bbd080.1: type = generic_class_type @D.1 [concrete] // CHECK:STDOUT: %D.generic.4e2319.1: %D.type.bbd080.1 = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %T.51e: %i32 = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.8e2: %i32 = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %T.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %D.type.bbd080.2: type = generic_class_type @D.2 [concrete] // CHECK:STDOUT: %D.generic.4e2319.2: %D.type.bbd080.2 = struct_value () [concrete] // CHECK:STDOUT: %D.022: type = class_type @D.2, @D.2(%T.51e) [symbolic] @@ -412,12 +423,12 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %D.decl.loc4: %D.type.bbd080.1 = class_decl @D.1 [concrete = constants.%D.generic.4e2319.1] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc12: %D.type.bbd080.2 = class_decl @D.2 [concrete = constants.%D.generic.4e2319.2] { -// CHECK:STDOUT: %T.patt.loc12_9.1: %i32 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt.8e2)] +// CHECK:STDOUT: %T.patt.loc12_9.1: %pattern_type.7ce = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt.f2c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -429,14 +440,14 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @D.1(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @D.2(%T.loc12_9.1: %i32) { // CHECK:STDOUT: %T.loc12_9.2: %i32 = bind_symbolic_name T, 0 [symbolic = %T.loc12_9.2 (constants.%T.51e)] -// CHECK:STDOUT: %T.patt.loc12_9.2: %i32 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt.8e2)] +// CHECK:STDOUT: %T.patt.loc12_9.2: %pattern_type.7ce = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_9.2 (constants.%T.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -452,23 +463,24 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @D.1(constants.%T.8b3) { // CHECK:STDOUT: %T.loc4_9.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc4_9.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_9.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @D.2(constants.%T.51e) { // CHECK:STDOUT: %T.loc12_9.2 => constants.%T.51e -// CHECK:STDOUT: %T.patt.loc12_9.2 => constants.%T.patt.8e2 +// CHECK:STDOUT: %T.patt.loc12_9.2 => constants.%T.patt.f2c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_mismatch_param_name.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %E.type.b0f8dc.1: type = generic_class_type @E.1 [concrete] // CHECK:STDOUT: %E.generic.f281ba.1: %E.type.b0f8dc.1 = struct_value () [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %E.type.b0f8dc.2: type = generic_class_type @E.2 [concrete] // CHECK:STDOUT: %E.generic.f281ba.2: %E.type.b0f8dc.2 = struct_value () [concrete] // CHECK:STDOUT: %E.ec9c10.2: type = class_type @E.2, @E.2(%U) [symbolic] @@ -490,12 +502,12 @@ class E(U:! type) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %E.decl.loc4: %E.type.b0f8dc.1 = class_decl @E.1 [concrete = constants.%E.generic.f281ba.1] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %E.decl.loc12: %E.type.b0f8dc.2 = class_decl @E.2 [concrete = constants.%E.generic.f281ba.2] { -// CHECK:STDOUT: %U.patt.loc12_9.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_9.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc12_9.1: %pattern_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_9.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc12_9.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc12_9.2 (constants.%U)] // CHECK:STDOUT: } @@ -503,14 +515,14 @@ class E(U:! type) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @E.1(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @E.2(%U.loc12_9.1: type) { // CHECK:STDOUT: %U.loc12_9.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc12_9.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc12_9.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_9.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc12_9.2: %pattern_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_9.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/self.carbon b/toolchain/check/testdata/class/generic/self.carbon index 336641260885..d0cd48f33a5c 100644 --- a/toolchain/check/testdata/class/generic/self.carbon +++ b/toolchain/check/testdata/class/generic/self.carbon @@ -23,10 +23,12 @@ class Class(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class [symbolic] // CHECK:STDOUT: %MakeSelf.type: type = fn_type @MakeSelf, @Class(%T) [symbolic] // CHECK:STDOUT: %MakeSelf: %MakeSelf.type = struct_value () [symbolic] // CHECK:STDOUT: %MakeClass.type: type = fn_type @MakeClass, @Class(%T) [symbolic] @@ -55,7 +57,7 @@ class Class(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc11_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: } @@ -63,7 +65,7 @@ class Class(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc11_13.1: type) { // CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %MakeSelf.type: type = fn_type @MakeSelf, @Class(%T.loc11_13.2) [symbolic = %MakeSelf.type (constants.%MakeSelf.type)] @@ -75,8 +77,8 @@ class Class(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %MakeSelf.decl: @Class.%MakeSelf.type (%MakeSelf.type) = fn_decl @MakeSelf [symbolic = @Class.%MakeSelf (constants.%MakeSelf)] { -// CHECK:STDOUT: %return.patt: @MakeSelf.%Class (%Class) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @MakeSelf.%Class (%Class) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @MakeSelf.%pattern_type (%pattern_type.3c1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @MakeSelf.%pattern_type (%pattern_type.3c1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_20: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class (constants.%Class)] // CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc14_20 [symbolic = %Class (constants.%Class)] @@ -84,8 +86,8 @@ class Class(T:! type) { // CHECK:STDOUT: %return: ref @MakeSelf.%Class (%Class) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeClass.decl: @Class.%MakeClass.type (%MakeClass.type) = fn_decl @MakeClass [symbolic = @Class.%MakeClass (constants.%MakeClass)] { -// CHECK:STDOUT: %return.patt: @MakeClass.%Class.loc15_28.1 (%Class) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @MakeClass.%Class.loc15_28.1 (%Class) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @MakeClass.%pattern_type (%pattern_type.3c1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @MakeClass.%pattern_type (%pattern_type.3c1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: %Class.type = name_ref Class, file.%Class.decl [concrete = constants.%Class.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, @Class.%T.loc11_13.1 [symbolic = %T (constants.%T)] @@ -111,6 +113,7 @@ class Class(T:! type) { // CHECK:STDOUT: generic fn @MakeSelf(@Class.%T.loc11_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Class [symbolic = %pattern_type (constants.%pattern_type.3c1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Class [symbolic = %require_complete (constants.%require_complete)] @@ -128,6 +131,7 @@ class Class(T:! type) { // CHECK:STDOUT: generic fn @MakeClass(@Class.%T.loc11_13.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class.loc15_28.1: type = class_type @Class, @Class(%T) [symbolic = %Class.loc15_28.1 (constants.%Class)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Class.loc15_28.1 [symbolic = %pattern_type (constants.%pattern_type.3c1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Class.loc15_28.1 [symbolic = %require_complete (constants.%require_complete)] @@ -147,6 +151,7 @@ class Class(T:! type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Class.loc17_19.2: type = class_type @Class, @Class(%T) [symbolic = %Class.loc17_19.2 (constants.%Class)] // CHECK:STDOUT: %require_complete: = require_complete_type %Class.loc17_19.2 [symbolic = %require_complete (constants.%require_complete)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Class.loc17_19.2 [symbolic = %pattern_type (constants.%pattern_type.3c1)] // CHECK:STDOUT: %MakeSelf.type: type = fn_type @MakeSelf, @Class(%T) [symbolic = %MakeSelf.type (constants.%MakeSelf.type)] // CHECK:STDOUT: %MakeSelf: @F.%MakeSelf.type (%MakeSelf.type) = struct_value () [symbolic = %MakeSelf (constants.%MakeSelf)] // CHECK:STDOUT: %MakeSelf.specific_fn.loc17_23.2: = specific_function %MakeSelf, @MakeSelf(%T) [symbolic = %MakeSelf.specific_fn.loc17_23.2 (constants.%MakeSelf.specific_fn)] @@ -157,8 +162,8 @@ class Class(T:! type) { // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: @F.%Class.loc17_19.2 (%Class) = binding_pattern c -// CHECK:STDOUT: %.loc17_5.1: @F.%Class.loc17_19.2 (%Class) = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: @F.%pattern_type (%pattern_type.3c1) = binding_pattern c +// CHECK:STDOUT: %.loc17_5.1: @F.%pattern_type (%pattern_type.3c1) = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref @F.%Class.loc17_19.2 (%Class) = var c // CHECK:STDOUT: %.loc17_23: @F.%MakeSelf.type (%MakeSelf.type) = specific_constant @Class.%MakeSelf.decl, @Class(constants.%T) [symbolic = %MakeSelf (constants.%MakeSelf)] @@ -174,8 +179,8 @@ class Class(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref @F.%Class.loc17_19.2 (%Class) = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: @F.%Class.loc17_19.2 (%Class) = binding_pattern s -// CHECK:STDOUT: %.loc18_5.1: @F.%Class.loc17_19.2 (%Class) = var_pattern %s.patt +// CHECK:STDOUT: %s.patt: @F.%pattern_type (%pattern_type.3c1) = binding_pattern s +// CHECK:STDOUT: %.loc18_5.1: @F.%pattern_type (%pattern_type.3c1) = var_pattern %s.patt // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref @F.%Class.loc17_19.2 (%Class) = var s // CHECK:STDOUT: %.loc18_19: @F.%MakeClass.type (%MakeClass.type) = specific_constant @Class.%MakeClass.decl, @Class(constants.%T) [symbolic = %MakeClass (constants.%MakeClass)] @@ -209,6 +214,7 @@ class Class(T:! type) { // CHECK:STDOUT: specific @MakeSelf(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class => constants.%Class +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3c1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -220,6 +226,7 @@ class Class(T:! type) { // CHECK:STDOUT: specific @MakeClass(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Class.loc15_28.1 => constants.%Class +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3c1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete diff --git a/toolchain/check/testdata/class/generic/stringify.carbon b/toolchain/check/testdata/class/generic/stringify.carbon index 410648aee98a..153b0a0ce675 100644 --- a/toolchain/check/testdata/class/generic/stringify.carbon +++ b/toolchain/check/testdata/class/generic/stringify.carbon @@ -97,6 +97,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %EmptyParams.type: type = generic_class_type @EmptyParams [concrete] // CHECK:STDOUT: %EmptyParams.generic: %EmptyParams.type = struct_value () [concrete] // CHECK:STDOUT: %EmptyParams: type = class_type @EmptyParams [concrete] +// CHECK:STDOUT: %pattern_type.32d: type = pattern_type %NoParams [concrete] +// CHECK:STDOUT: %pattern_type.71c: type = pattern_type %EmptyParams [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -119,15 +121,15 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %NoParams.decl: type = class_decl @NoParams [concrete = constants.%NoParams] {} {} // CHECK:STDOUT: %EmptyParams.decl: %EmptyParams.type = class_decl @EmptyParams [concrete = constants.%EmptyParams.generic] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %NoParams = binding_pattern v -// CHECK:STDOUT: %.loc7: %NoParams = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.32d = binding_pattern v +// CHECK:STDOUT: %.loc7: %pattern_type.32d = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %NoParams = var v // CHECK:STDOUT: %NoParams.ref: type = name_ref NoParams, %NoParams.decl [concrete = constants.%NoParams] // CHECK:STDOUT: %v: ref %NoParams = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %EmptyParams = binding_pattern w -// CHECK:STDOUT: %.loc15_1: %EmptyParams = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.71c = binding_pattern w +// CHECK:STDOUT: %.loc15_1: %pattern_type.71c = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %EmptyParams = var w // CHECK:STDOUT: %.loc15_20: type = splice_block %EmptyParams [concrete = constants.%EmptyParams] { @@ -167,12 +169,13 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.9d6: type = class_type @Outer, @Outer(%T) [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %Inner.type.eae: type = generic_class_type @Inner, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.generic.137: %Inner.type.eae = struct_value () [symbolic] // CHECK:STDOUT: %Inner.c71: type = class_type @Inner, @Inner(%T, %U) [symbolic] @@ -182,11 +185,13 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %Outer.614: type = class_type @Outer, @Outer(%ptr.c28) [concrete] // CHECK:STDOUT: %Inner.type.5d2: type = generic_class_type @Inner, @Outer(%ptr.c28) [concrete] // CHECK:STDOUT: %Inner.generic.8e6: %Inner.type.5d2 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.828: type = pattern_type %Outer.614 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %ptr.1bb: type = ptr_type %struct_type.a [concrete] // CHECK:STDOUT: %Inner.277: type = class_type @Inner, @Inner(%ptr.c28, %ptr.1bb) [concrete] +// CHECK:STDOUT: %pattern_type.5fa: type = pattern_type %Inner.277 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -207,13 +212,13 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %Outer.614 = binding_pattern v -// CHECK:STDOUT: %.loc9_1: %Outer.614 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.828 = binding_pattern v +// CHECK:STDOUT: %.loc9_1: %pattern_type.828 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %Outer.614 = var v // CHECK:STDOUT: %.loc9_17: type = splice_block %Outer.loc9 [concrete = constants.%Outer.614] { @@ -225,8 +230,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %Outer.614 = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %Inner.277 = binding_pattern w -// CHECK:STDOUT: %.loc19_1: %Inner.277 = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.5fa = binding_pattern w +// CHECK:STDOUT: %.loc19_1: %pattern_type.5fa = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %Inner.277 = var w // CHECK:STDOUT: %.loc19_35: type = splice_block %Inner [concrete = constants.%Inner.277] { @@ -248,7 +253,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.type: type = generic_class_type @Inner, @Outer(%T.loc4_13.2) [symbolic = %Inner.type (constants.%Inner.type.eae)] @@ -256,7 +261,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: @Outer.%Inner.type (%Inner.type.eae) = class_decl @Inner [symbolic = @Outer.%Inner.generic (constants.%Inner.generic.137)] { -// CHECK:STDOUT: %U.patt.loc5_15.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc5_15.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc5_15.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc5_15.2 (constants.%U)] // CHECK:STDOUT: } @@ -272,7 +277,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: generic class @Inner(@Outer.%T.loc4_13.1: type, %U.loc5_15.1: type) { // CHECK:STDOUT: %U.loc5_15.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc5_15.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc5_15.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc5_15.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -329,7 +334,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.506: type = class_type @C, @C(%N.51e) [symbolic] @@ -349,6 +355,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %bound_method: = bound_method %int_123.fff, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_123.f7f: %i32 = int_value 123 [concrete] // CHECK:STDOUT: %C.4c3: type = class_type @C, @C(%int_123.f7f) [concrete] +// CHECK:STDOUT: %pattern_type.1b4: type = pattern_type %C.4c3 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -368,7 +375,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %N.patt.loc4_9.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_9.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc4_9.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_9.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -377,8 +384,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %N.loc4_9.1: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_9.2 (constants.%N.51e)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %C.4c3 = binding_pattern v -// CHECK:STDOUT: %.loc13_1: %C.4c3 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.1b4 = binding_pattern v +// CHECK:STDOUT: %.loc13_1: %pattern_type.1b4 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %C.4c3 = var v // CHECK:STDOUT: %.loc13_13.1: type = splice_block %C [concrete = constants.%C.4c3] { @@ -398,7 +405,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%N.loc4_9.1: %i32) { // CHECK:STDOUT: %N.loc4_9.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_9.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc4_9.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_9.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc4_9.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_9.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -422,12 +429,12 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%N.51e) { // CHECK:STDOUT: %N.loc4_9.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc4_9.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc4_9.2 => constants.%N.patt.f2c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_123.f7f) { // CHECK:STDOUT: %N.loc4_9.2 => constants.%int_123.f7f -// CHECK:STDOUT: %N.patt.loc4_9.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc4_9.2 => constants.%N.patt.f2c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -442,7 +449,8 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %F: %D = bind_symbolic_name F, 0 [symbolic] -// CHECK:STDOUT: %F.patt: %D = symbolic_binding_pattern F, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] +// CHECK:STDOUT: %F.patt: %pattern_type.510 = symbolic_binding_pattern F, 0 [symbolic] // CHECK:STDOUT: %E.type: type = generic_class_type @E [concrete] // CHECK:STDOUT: %E.generic: %E.type = struct_value () [concrete] // CHECK:STDOUT: %E: type = class_type @E, @E(%F) [symbolic] @@ -497,7 +505,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %E.decl: %E.type = class_decl @E [concrete = constants.%E.generic] { -// CHECK:STDOUT: %F.patt.loc9_9.1: %D = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc9_9.2 (constants.%F.patt)] +// CHECK:STDOUT: %F.patt.loc9_9.1: %pattern_type.510 = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc9_9.2 (constants.%F.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %F.loc9_9.1: %D = bind_symbolic_name F, 0 [symbolic = %F.loc9_9.2 (constants.%F)] @@ -556,7 +564,7 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: // CHECK:STDOUT: generic class @E(%F.loc9_9.1: %D) { // CHECK:STDOUT: %F.loc9_9.2: %D = bind_symbolic_name F, 0 [symbolic = %F.loc9_9.2 (constants.%F)] -// CHECK:STDOUT: %F.patt.loc9_9.2: %D = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc9_9.2 (constants.%F.patt)] +// CHECK:STDOUT: %F.patt.loc9_9.2: %pattern_type.510 = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc9_9.2 (constants.%F.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic_method.carbon b/toolchain/check/testdata/class/generic_method.carbon index d03d9b241bd2..a0e012299400 100644 --- a/toolchain/check/testdata/class/generic_method.carbon +++ b/toolchain/check/testdata/class/generic_method.carbon @@ -19,12 +19,15 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %T [symbolic] +// CHECK:STDOUT: %pattern_type.3c1: type = pattern_type %Class [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @Class(%T) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T} [symbolic] @@ -46,15 +49,15 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %T.patt.loc11_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: @Class.%F.type (%F.type) = fn_decl @F [symbolic = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Class (%Class) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Class (%Class) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %n.patt: @F.%T.loc13 (%T) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.%T.loc13 (%T) = value_param_pattern %n.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.%pattern_type.loc13_8 (%pattern_type.3c1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type.loc13_8 (%pattern_type.3c1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %n.patt: @F.%pattern_type.loc13_20 (%pattern_type.7dc) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.%pattern_type.loc13_20 (%pattern_type.7dc) = value_param_pattern %n.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc16: type = bind_symbolic_name T, 0 [symbolic = @Class.%T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: %self.param.loc16: @F.%Class (%Class) = value_param call_param0 @@ -71,7 +74,7 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%T.loc11_13.1: type) { // CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc11_13.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -86,10 +89,10 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_13.1 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: %.loc12: @Class.%Class.elem (%Class.elem) = field_decl a, element0 [concrete] // CHECK:STDOUT: %F.decl: @Class.%F.type (%F.type) = fn_decl @F [symbolic = @Class.%F (constants.%F)] { -// CHECK:STDOUT: %self.patt: @F.%Class (%Class) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Class (%Class) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %n.patt: @F.%T.loc13 (%T) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.%T.loc13 (%T) = value_param_pattern %n.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.%pattern_type.loc13_8 (%pattern_type.3c1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type.loc13_8 (%pattern_type.3c1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %n.patt: @F.%pattern_type.loc13_20 (%pattern_type.7dc) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.%pattern_type.loc13_20 (%pattern_type.7dc) = value_param_pattern %n.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc13: @F.%Class (%Class) = value_param call_param0 // CHECK:STDOUT: %.loc13_14.1: type = splice_block %Self.ref.loc13 [symbolic = %Class (constants.%Class)] { @@ -116,6 +119,8 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: generic fn @F(@Class.%T.loc11_13.1: type) { // CHECK:STDOUT: %T.loc13: type = bind_symbolic_name T, 0 [symbolic = %T.loc13 (constants.%T)] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T.loc13) [symbolic = %Class (constants.%Class)] +// CHECK:STDOUT: %pattern_type.loc13_8: type = pattern_type %Class [symbolic = %pattern_type.loc13_8 (constants.%pattern_type.3c1)] +// CHECK:STDOUT: %pattern_type.loc13_20: type = pattern_type %T.loc13 [symbolic = %pattern_type.loc13_20 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_26: = require_complete_type %Class [symbolic = %require_complete.loc16_26 (constants.%require_complete.4f8)] @@ -144,6 +149,8 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc13 => constants.%T // CHECK:STDOUT: %Class => constants.%Class +// CHECK:STDOUT: %pattern_type.loc13_8 => constants.%pattern_type.3c1 +// CHECK:STDOUT: %pattern_type.loc13_20 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Class(@F.%T.loc13) {} diff --git a/toolchain/check/testdata/class/import.carbon b/toolchain/check/testdata/class/import.carbon index df26d6fba8b1..b1699b98817c 100644 --- a/toolchain/check/testdata/class/import.carbon +++ b/toolchain/check/testdata/class/import.carbon @@ -62,9 +62,12 @@ fn Run() { // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %ForwardDeclared: type = class_type @ForwardDeclared [concrete] +// CHECK:STDOUT: %pattern_type.1b8: type = pattern_type %ForwardDeclared [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %ForwardDeclared [concrete] +// CHECK:STDOUT: %pattern_type.ebb: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] @@ -118,17 +121,17 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: class @ForwardDeclared { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %ForwardDeclared = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ForwardDeclared = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.1b8 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.1b8 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ForwardDeclared = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%ForwardDeclared [concrete = constants.%ForwardDeclared] // CHECK:STDOUT: %self: %ForwardDeclared = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %ptr = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc15_8: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.ebb = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.ebb = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc15_8: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc15_23: type = splice_block %ptr [concrete = constants.%ptr] { @@ -162,12 +165,14 @@ fn Run() { // CHECK:STDOUT: %Empty: type = class_type @Empty [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.2f0: type = pattern_type %Empty [concrete] // CHECK:STDOUT: %Empty.val: %Empty = struct_value () [concrete] // CHECK:STDOUT: %Field: type = class_type @Field [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.x.767: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.c07: = complete_type_witness %struct_type.x.767 [concrete] +// CHECK:STDOUT: %pattern_type.f46: type = pattern_type %Field [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.x.c96: type = struct_type {.x: Core.IntLiteral} [concrete] // CHECK:STDOUT: %ImplicitAs.type.9ba: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -189,14 +194,17 @@ fn Run() { // CHECK:STDOUT: %bound_method.c74: = bound_method %int_2.ecc, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.d0d: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %ForwardDeclared.7b34f2.1: type = class_type @ForwardDeclared.1 [concrete] +// CHECK:STDOUT: %pattern_type.1b8: type = pattern_type %ForwardDeclared.7b34f2.1 [concrete] // CHECK:STDOUT: %ForwardDeclared.val: %ForwardDeclared.7b34f2.1 = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.6cf: type = ptr_type %ForwardDeclared.7b34f2.1 [concrete] +// CHECK:STDOUT: %pattern_type.ebb: type = pattern_type %ptr.6cf [concrete] // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] // CHECK:STDOUT: %ptr.c62: type = ptr_type %Incomplete [concrete] +// CHECK:STDOUT: %pattern_type.275: type = pattern_type %ptr.c62 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -215,11 +223,11 @@ fn Run() { // CHECK:STDOUT: %Main.import_ref.845 = import_ref Main//a, inst24 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.4d2: %Field.elem = import_ref Main//a, loc8_8, loaded [concrete = %.d33] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//a, loc16_1, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Main.import_ref.39e731.1 = import_ref Main//a, inst60 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.39e731.1 = import_ref Main//a, inst61 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.760: %F.type = import_ref Main//a, loc14_21, loaded [concrete = constants.%F] // CHECK:STDOUT: %Main.import_ref.26e: %G.type = import_ref Main//a, loc15_27, loaded [concrete = constants.%G] // CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//a, loc16_1, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Main.import_ref.39e731.2 = import_ref Main//a, inst60 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.39e731.2 = import_ref Main//a, inst61 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.42a = import_ref Main//a, loc14_21, unloaded // CHECK:STDOUT: %Main.import_ref.67a = import_ref Main//a, loc15_27, unloaded // CHECK:STDOUT: } @@ -276,8 +284,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %Empty = binding_pattern a -// CHECK:STDOUT: %.loc7_3.1: %Empty = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.2f0 = binding_pattern a +// CHECK:STDOUT: %.loc7_3.1: %pattern_type.2f0 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Empty = var a // CHECK:STDOUT: %.loc7_19.1: %empty_struct_type = struct_literal () @@ -287,8 +295,8 @@ fn Run() { // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, imports.%Main.Empty [concrete = constants.%Empty] // CHECK:STDOUT: %a: ref %Empty = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %Field = binding_pattern b -// CHECK:STDOUT: %.loc9_3.1: %Field = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.f46 = binding_pattern b +// CHECK:STDOUT: %.loc9_3.1: %pattern_type.f46 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Field = var b // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -318,8 +326,8 @@ fn Run() { // CHECK:STDOUT: %.loc10_7: init %i32 = converted %int_2, %int.convert_checked.loc10 [concrete = constants.%int_2.d0d] // CHECK:STDOUT: assign %.loc10_4, %.loc10_7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %ForwardDeclared.7b34f2.1 = binding_pattern c -// CHECK:STDOUT: %.loc12_3.1: %ForwardDeclared.7b34f2.1 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.1b8 = binding_pattern c +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.1b8 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %ForwardDeclared.7b34f2.1 = var c // CHECK:STDOUT: %.loc12_29.1: %empty_struct_type = struct_literal () @@ -339,8 +347,8 @@ fn Run() { // CHECK:STDOUT: %addr.loc14: %ptr.6cf = addr_of %c.ref.loc14 // CHECK:STDOUT: %G.call: init %empty_tuple.type = call %G.bound(%addr.loc14) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %ptr.6cf = binding_pattern d -// CHECK:STDOUT: %.loc16_3: %ptr.6cf = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.ebb = binding_pattern d +// CHECK:STDOUT: %.loc16_3: %pattern_type.ebb = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %ptr.6cf = var d // CHECK:STDOUT: %c.ref.loc16: ref %ForwardDeclared.7b34f2.1 = name_ref c, %c @@ -352,8 +360,8 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %ptr.6cf = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %ptr.c62 = binding_pattern e -// CHECK:STDOUT: %.loc18_3: %ptr.c62 = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.275 = binding_pattern e +// CHECK:STDOUT: %.loc18_3: %pattern_type.275 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %ptr.c62 = var e // CHECK:STDOUT: %.loc18_20: type = splice_block %ptr.loc18 [concrete = constants.%ptr.c62] { diff --git a/toolchain/check/testdata/class/import_base.carbon b/toolchain/check/testdata/class/import_base.carbon index 17a24a22db27..954f08dc9196 100644 --- a/toolchain/check/testdata/class/import_base.carbon +++ b/toolchain/check/testdata/class/import_base.carbon @@ -40,6 +40,7 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] +// CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Unused.type: type = fn_type @Unused [concrete] @@ -76,16 +77,16 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Base = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] // CHECK:STDOUT: %self: %Base = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Unused.decl: %Unused.type = fn_decl @Unused [concrete = constants.%Unused] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Base = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] @@ -141,6 +142,7 @@ fn Run() { // CHECK:STDOUT: %complete_type.90f: = complete_type_witness %struct_type.x.unused.7d5 [concrete] // CHECK:STDOUT: %struct_type.base.b1e: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base.b1e [concrete] +// CHECK:STDOUT: %pattern_type.1bd: type = pattern_type %Child [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.x.unused.c45: type = struct_type {.x: Core.IntLiteral, .unused: Core.IntLiteral} [concrete] @@ -186,7 +188,7 @@ fn Run() { // CHECK:STDOUT: %Main.import_ref.e67: %Base.elem = import_ref Main//a, loc8_8, loaded [concrete = %.720] // CHECK:STDOUT: %Main.import_ref.2e4 = import_ref Main//a, loc9_13, unloaded // CHECK:STDOUT: %Main.import_ref.c5f: = import_ref Main//a, loc14_1, loaded [concrete = constants.%complete_type.15c] -// CHECK:STDOUT: %Main.import_ref.9a9 = import_ref Main//a, inst73 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.9a9 = import_ref Main//a, inst75 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.7e5 = import_ref Main//a, loc13_20, unloaded // CHECK:STDOUT: %Main.import_ref.a21640.2: type = import_ref Main//a, loc13_16, loaded [concrete = constants.%Base] // CHECK:STDOUT: } @@ -228,8 +230,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %Child = binding_pattern a -// CHECK:STDOUT: %.loc7_3.1: %Child = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.1bd = binding_pattern a +// CHECK:STDOUT: %.loc7_3.1: %pattern_type.1bd = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Child = var a // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/class/import_indirect.carbon b/toolchain/check/testdata/class/import_indirect.carbon index 5aea0a93cd5e..4becbe7f1148 100644 --- a/toolchain/check/testdata/class/import_indirect.carbon +++ b/toolchain/check/testdata/class/import_indirect.carbon @@ -139,8 +139,10 @@ var ptr: E* = &val; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -166,15 +168,15 @@ var ptr: E* = &val; // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_val.patt: %C = binding_pattern b_val -// CHECK:STDOUT: %.loc8: %C = var_pattern %b_val.patt +// CHECK:STDOUT: %b_val.patt: %pattern_type.c48 = binding_pattern b_val +// CHECK:STDOUT: %.loc8: %pattern_type.c48 = var_pattern %b_val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b_val.var: ref %C = var b_val // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %b_val: ref %C = bind_name b_val, %b_val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_ptr.patt: %ptr.019 = binding_pattern b_ptr -// CHECK:STDOUT: %.loc9_1: %ptr.019 = var_pattern %b_ptr.patt +// CHECK:STDOUT: %b_ptr.patt: %pattern_type.44a = binding_pattern b_ptr +// CHECK:STDOUT: %.loc9_1: %pattern_type.44a = var_pattern %b_ptr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b_ptr.var: ref %ptr.019 = var b_ptr // CHECK:STDOUT: %.loc9_13: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -209,8 +211,10 @@ var ptr: E* = &val; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -236,15 +240,15 @@ var ptr: E* = &val; // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %E: type = bind_alias E, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_val.patt: %C = binding_pattern c_val -// CHECK:STDOUT: %.loc8: %C = var_pattern %c_val.patt +// CHECK:STDOUT: %c_val.patt: %pattern_type.c48 = binding_pattern c_val +// CHECK:STDOUT: %.loc8: %pattern_type.c48 = var_pattern %c_val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c_val.var: ref %C = var c_val // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c_val: ref %C = bind_name c_val, %c_val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_ptr.patt: %ptr.019 = binding_pattern c_ptr -// CHECK:STDOUT: %.loc9_1: %ptr.019 = var_pattern %c_ptr.patt +// CHECK:STDOUT: %c_ptr.patt: %pattern_type.44a = binding_pattern c_ptr +// CHECK:STDOUT: %.loc9_1: %pattern_type.44a = var_pattern %c_ptr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c_ptr.var: ref %ptr.019 = var c_ptr // CHECK:STDOUT: %.loc9_13: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -279,8 +283,10 @@ var ptr: E* = &val; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -309,15 +315,15 @@ var ptr: E* = &val; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %val.patt: %C = binding_pattern val -// CHECK:STDOUT: %.loc7: %C = var_pattern %val.patt +// CHECK:STDOUT: %val.patt: %pattern_type.c48 = binding_pattern val +// CHECK:STDOUT: %.loc7: %pattern_type.c48 = var_pattern %val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %val.var: ref %C = var val // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %val: ref %C = bind_name val, %val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ptr.patt: %ptr.019 = binding_pattern ptr -// CHECK:STDOUT: %.loc8_1: %ptr.019 = var_pattern %ptr.patt +// CHECK:STDOUT: %ptr.patt: %pattern_type.44a = binding_pattern ptr +// CHECK:STDOUT: %.loc8_1: %pattern_type.44a = var_pattern %ptr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.var: ref %ptr.019 = var ptr // CHECK:STDOUT: %.loc8_11: type = splice_block %ptr.loc8_11 [concrete = constants.%ptr.019] { @@ -352,8 +358,10 @@ var ptr: E* = &val; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -382,15 +390,15 @@ var ptr: E* = &val; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %val.patt: %C = binding_pattern val -// CHECK:STDOUT: %.loc7: %C = var_pattern %val.patt +// CHECK:STDOUT: %val.patt: %pattern_type.c48 = binding_pattern val +// CHECK:STDOUT: %.loc7: %pattern_type.c48 = var_pattern %val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %val.var: ref %C = var val // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %val: ref %C = bind_name val, %val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ptr.patt: %ptr.019 = binding_pattern ptr -// CHECK:STDOUT: %.loc8_1: %ptr.019 = var_pattern %ptr.patt +// CHECK:STDOUT: %ptr.patt: %pattern_type.44a = binding_pattern ptr +// CHECK:STDOUT: %.loc8_1: %pattern_type.44a = var_pattern %ptr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.var: ref %ptr.019 = var ptr // CHECK:STDOUT: %.loc8_11: type = splice_block %ptr.loc8_11 [concrete = constants.%ptr.019] { @@ -425,8 +433,10 @@ var ptr: E* = &val; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -459,15 +469,15 @@ var ptr: E* = &val; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %val.patt: %C = binding_pattern val -// CHECK:STDOUT: %.loc7: %C = var_pattern %val.patt +// CHECK:STDOUT: %val.patt: %pattern_type.c48 = binding_pattern val +// CHECK:STDOUT: %.loc7: %pattern_type.c48 = var_pattern %val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %val.var: ref %C = var val // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] // CHECK:STDOUT: %val: ref %C = bind_name val, %val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ptr.patt: %ptr.019 = binding_pattern ptr -// CHECK:STDOUT: %.loc8_1: %ptr.019 = var_pattern %ptr.patt +// CHECK:STDOUT: %ptr.patt: %pattern_type.44a = binding_pattern ptr +// CHECK:STDOUT: %.loc8_1: %pattern_type.44a = var_pattern %ptr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.var: ref %ptr.019 = var ptr // CHECK:STDOUT: %.loc8_11: type = splice_block %ptr.loc8_11 [concrete = constants.%ptr.019] { @@ -502,8 +512,10 @@ var ptr: E* = &val; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -536,15 +548,15 @@ var ptr: E* = &val; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %val.patt: %C = binding_pattern val -// CHECK:STDOUT: %.loc7: %C = var_pattern %val.patt +// CHECK:STDOUT: %val.patt: %pattern_type.c48 = binding_pattern val +// CHECK:STDOUT: %.loc7: %pattern_type.c48 = var_pattern %val.patt // CHECK:STDOUT: } // CHECK:STDOUT: %val.var: ref %C = var val // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] // CHECK:STDOUT: %val: ref %C = bind_name val, %val.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ptr.patt: %ptr.019 = binding_pattern ptr -// CHECK:STDOUT: %.loc8_1: %ptr.019 = var_pattern %ptr.patt +// CHECK:STDOUT: %ptr.patt: %pattern_type.44a = binding_pattern ptr +// CHECK:STDOUT: %.loc8_1: %pattern_type.44a = var_pattern %ptr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %ptr.var: ref %ptr.019 = var ptr // CHECK:STDOUT: %.loc8_11: type = splice_block %ptr.loc8_11 [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/class/import_member_cycle.carbon b/toolchain/check/testdata/class/import_member_cycle.carbon index 2c3938b3b6fc..4be8d07763f6 100644 --- a/toolchain/check/testdata/class/import_member_cycle.carbon +++ b/toolchain/check/testdata/class/import_member_cycle.carbon @@ -75,6 +75,7 @@ fn Run() { // CHECK:STDOUT: %ptr: type = ptr_type %Cycle [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %ptr} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -110,8 +111,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %ptr = binding_pattern a -// CHECK:STDOUT: %.loc7_3: %ptr = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc7_3: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr = var a // CHECK:STDOUT: %.loc7_15: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/class/import_struct_cyle.carbon b/toolchain/check/testdata/class/import_struct_cyle.carbon index c8382a915c7f..e06cb49b6b94 100644 --- a/toolchain/check/testdata/class/import_struct_cyle.carbon +++ b/toolchain/check/testdata/class/import_struct_cyle.carbon @@ -37,6 +37,7 @@ fn Run() { // CHECK:STDOUT: %Cycle: type = class_type @Cycle [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Cycle [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.b [concrete] // CHECK:STDOUT: %Cycle.elem: type = unbound_element_type %Cycle, %struct_type.b [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %struct_type.b} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.c [concrete] @@ -58,8 +59,8 @@ fn Run() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Cycle.decl.loc4: type = class_decl @Cycle [concrete = constants.%Cycle] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %struct_type.b = binding_pattern a -// CHECK:STDOUT: %.loc6_1: %struct_type.b = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %struct_type.b = var a // CHECK:STDOUT: %.loc6_19: type = splice_block %struct_type.b [concrete = constants.%struct_type.b] { diff --git a/toolchain/check/testdata/class/inheritance_access.carbon b/toolchain/check/testdata/class/inheritance_access.carbon index 0a6a4e294b93..7ad7253f1e4d 100644 --- a/toolchain/check/testdata/class/inheritance_access.carbon +++ b/toolchain/check/testdata/class/inheritance_access.carbon @@ -238,8 +238,10 @@ class B { // CHECK:STDOUT: %complete_type.70a: = complete_type_witness %struct_type.x.y [concrete] // CHECK:STDOUT: %Circle: type = class_type @Circle [concrete] // CHECK:STDOUT: %Circle.elem: type = unbound_element_type %Circle, %Shape [concrete] +// CHECK:STDOUT: %pattern_type.ce2: type = pattern_type %Circle [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %GetPosition.type: type = fn_type @GetPosition [concrete] // CHECK:STDOUT: %GetPosition: %GetPosition.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ed: type = struct_type {.base: %Shape} [concrete] @@ -286,10 +288,10 @@ class B { // CHECK:STDOUT: %Shape.ref: type = name_ref Shape, file.%Shape.decl [concrete = constants.%Shape] // CHECK:STDOUT: %.loc10: %Circle.elem = base_decl %Shape.ref, element0 [concrete] // CHECK:STDOUT: %GetPosition.decl: %GetPosition.type = fn_decl @GetPosition [concrete = constants.%GetPosition] { -// CHECK:STDOUT: %self.patt: %Circle = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Circle = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type.d07 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.d07 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.ce2 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.ce2 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.511 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.511 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12_36: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12_36: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -354,12 +356,15 @@ class B { // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %A [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.8c6: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.92a: %F.type.8c6 = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.953: type = struct_type {.base: %A} [concrete] // CHECK:STDOUT: %complete_type.020: = complete_type_witness %struct_type.base.953 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ff: type = struct_type {.base: %B} [concrete] @@ -403,8 +408,8 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc9: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.8c6 = fn_decl @F.2 [concrete = constants.%F.92a] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -427,10 +432,10 @@ class B { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc14: %C.elem = base_decl %B.ref, element0 [concrete] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_26.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc15_26.2: type = converted %.loc15_26.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -475,6 +480,7 @@ class B { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -524,7 +530,7 @@ class B { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_CONSTANT.patt: %i32 = binding_pattern SOME_CONSTANT +// CHECK:STDOUT: %SOME_CONSTANT.patt: %pattern_type.7ce = binding_pattern SOME_CONSTANT // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %.loc5_32: type = splice_block %i32 [concrete = constants.%i32] { @@ -540,8 +546,8 @@ class B { // CHECK:STDOUT: %.loc5_38.2: %i32 = converted %int_5, %.loc5_38.1 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %SOME_CONSTANT: %i32 = bind_name SOME_CONSTANT, %.loc5_38.2 // CHECK:STDOUT: %SomeProtectedFunction.decl: %SomeProtectedFunction.type = fn_decl @SomeProtectedFunction [concrete = constants.%SomeProtectedFunction] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -563,8 +569,8 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc12: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -572,8 +578,8 @@ class B { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -634,6 +640,8 @@ class B { // CHECK:STDOUT: %complete_type.0f9: = complete_type_witness %struct_type.y [concrete] // CHECK:STDOUT: %Square: type = class_type @Square [concrete] // CHECK:STDOUT: %Square.elem: type = unbound_element_type %Square, %Shape [concrete] +// CHECK:STDOUT: %pattern_type.39b: type = pattern_type %Square [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %GetPosition.type: type = fn_type @GetPosition [concrete] // CHECK:STDOUT: %GetPosition: %GetPosition.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.0ed: type = struct_type {.base: %Shape} [concrete] @@ -676,10 +684,10 @@ class B { // CHECK:STDOUT: %Shape.ref: type = name_ref Shape, file.%Shape.decl [concrete = constants.%Shape] // CHECK:STDOUT: %.loc9: %Square.elem = base_decl %Shape.ref, element0 [concrete] // CHECK:STDOUT: %GetPosition.decl: %GetPosition.type = fn_decl @GetPosition [concrete = constants.%GetPosition] { -// CHECK:STDOUT: %self.patt: %Square = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Square = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.39b = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.39b = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -975,6 +983,7 @@ class B { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -995,6 +1004,7 @@ class B { // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %Internal [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %SomeFunc.type: type = fn_type @SomeFunc [concrete] // CHECK:STDOUT: %SomeFunc: %SomeFunc.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.internal.6f5: type = struct_type {.internal: %Internal} [concrete] @@ -1025,7 +1035,7 @@ class B { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_PROTECTED_CONSTANT.patt: %i32 = binding_pattern SOME_PROTECTED_CONSTANT +// CHECK:STDOUT: %SOME_PROTECTED_CONSTANT.patt: %pattern_type.7ce = binding_pattern SOME_PROTECTED_CONSTANT // CHECK:STDOUT: } // CHECK:STDOUT: %int_5.loc5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %.loc5_42: type = splice_block %i32.loc5 [concrete = constants.%i32] { @@ -1041,7 +1051,7 @@ class B { // CHECK:STDOUT: %.loc5_48.2: %i32 = converted %int_5.loc5, %.loc5_48.1 [concrete = constants.%int_5.0f6] // CHECK:STDOUT: %SOME_PROTECTED_CONSTANT: %i32 = bind_name SOME_PROTECTED_CONSTANT, %.loc5_48.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %SOME_PRIVATE_CONSTANT.patt: %i32 = binding_pattern SOME_PRIVATE_CONSTANT +// CHECK:STDOUT: %SOME_PRIVATE_CONSTANT.patt: %pattern_type.7ce = binding_pattern SOME_PRIVATE_CONSTANT // CHECK:STDOUT: } // CHECK:STDOUT: %int_5.loc6: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %.loc6_38: type = splice_block %i32.loc6 [concrete = constants.%i32] { @@ -1068,7 +1078,7 @@ class B { // CHECK:STDOUT: // CHECK:STDOUT: class @Internal { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %INTERNAL_CONSTANT.patt: %i32 = binding_pattern INTERNAL_CONSTANT +// CHECK:STDOUT: %INTERNAL_CONSTANT.patt: %pattern_type.7ce = binding_pattern INTERNAL_CONSTANT // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %.loc10_36: type = splice_block %i32 [concrete = constants.%i32] { @@ -1096,8 +1106,8 @@ class B { // CHECK:STDOUT: %Internal.ref: type = name_ref Internal, file.%Internal.decl [concrete = constants.%Internal] // CHECK:STDOUT: %.loc14: %B.elem = field_decl internal, element0 [concrete] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1105,10 +1115,10 @@ class B { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %SomeFunc.decl: %SomeFunc.type = fn_decl @SomeFunc [concrete = constants.%SomeFunc] { -// CHECK:STDOUT: %self.patt: %B = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %B = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.049 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.049 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1161,6 +1171,7 @@ class B { // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %A [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.953: type = struct_type {.base: %A} [concrete] @@ -1204,8 +1215,8 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc9: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %B = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %B = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.049 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.049 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %B = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] @@ -1242,6 +1253,7 @@ class B { // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %A [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.953: type = struct_type {.base: %A} [concrete] @@ -1285,8 +1297,8 @@ class B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc9: %B.elem = base_decl %A.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %B = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %B = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.049 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.049 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %B = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B [concrete = constants.%B] diff --git a/toolchain/check/testdata/class/init.carbon b/toolchain/check/testdata/class/init.carbon index 844d9ffa5253..506bea445323 100644 --- a/toolchain/check/testdata/class/init.carbon +++ b/toolchain/check/testdata/class/init.carbon @@ -32,6 +32,9 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: %Class.elem.0c0: type = unbound_element_type %Class, %ptr.e71 [concrete] // CHECK:STDOUT: %struct_type.n.next: type = struct_type {.n: %i32, .next: %ptr.e71} [concrete] // CHECK:STDOUT: %complete_type.78f: = complete_type_witness %struct_type.n.next [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %MakeReorder.type: type = fn_type @MakeReorder [concrete] @@ -57,12 +60,12 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %next.patt: %ptr.e71 = binding_pattern next -// CHECK:STDOUT: %next.param_patt: %ptr.e71 = value_param_pattern %next.patt, call_param1 -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %next.patt: %pattern_type.796 = binding_pattern next +// CHECK:STDOUT: %next.param_patt: %pattern_type.796 = value_param_pattern %next.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref.loc16_34: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 @@ -81,12 +84,12 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeReorder.decl: %MakeReorder.type = fn_decl @MakeReorder [concrete = constants.%MakeReorder] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %next.patt: %ptr.e71 = binding_pattern next -// CHECK:STDOUT: %next.param_patt: %ptr.e71 = value_param_pattern %next.patt, call_param1 -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %next.patt: %pattern_type.796 = binding_pattern next +// CHECK:STDOUT: %next.param_patt: %pattern_type.796 = value_param_pattern %next.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref.loc20_41: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 diff --git a/toolchain/check/testdata/class/init_as.carbon b/toolchain/check/testdata/class/init_as.carbon index 3c8cff57f762..36fc897484b5 100644 --- a/toolchain/check/testdata/class/init_as.carbon +++ b/toolchain/check/testdata/class/init_as.carbon @@ -26,6 +26,7 @@ fn F() -> i32 { // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -67,8 +68,8 @@ fn F() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/init_nested.carbon b/toolchain/check/testdata/class/init_nested.carbon index c37925b754e8..aa2712993eca 100644 --- a/toolchain/check/testdata/class/init_nested.carbon +++ b/toolchain/check/testdata/class/init_nested.carbon @@ -33,12 +33,14 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %Inner.elem: type = unbound_element_type %Inner, %i32 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b [concrete] +// CHECK:STDOUT: %pattern_type.a31: type = pattern_type %Inner [concrete] // CHECK:STDOUT: %MakeInner.type: type = fn_type @MakeInner [concrete] // CHECK:STDOUT: %MakeInner: %MakeInner.type = struct_value () [concrete] // CHECK:STDOUT: %Outer: type = class_type @Outer [concrete] // CHECK:STDOUT: %Outer.elem: type = unbound_element_type %Outer, %Inner [concrete] // CHECK:STDOUT: %struct_type.c.d.dce: type = struct_type {.c: %Inner, .d: %Inner} [concrete] // CHECK:STDOUT: %complete_type.8b6: = complete_type_witness %struct_type.c.d.dce [concrete] +// CHECK:STDOUT: %pattern_type.e74: type = pattern_type %Outer [concrete] // CHECK:STDOUT: %MakeOuter.type: type = fn_type @MakeOuter [concrete] // CHECK:STDOUT: %MakeOuter: %MakeOuter.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -62,8 +64,8 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Inner.decl: type = class_decl @Inner [concrete = constants.%Inner] {} {} // CHECK:STDOUT: %MakeInner.decl: %MakeInner.type = fn_decl @MakeInner [concrete = constants.%MakeInner] { -// CHECK:STDOUT: %return.patt: %Inner = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Inner = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a31 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a31 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, file.%Inner.decl [concrete = constants.%Inner] // CHECK:STDOUT: %return.param: ref %Inner = out_param call_param0 @@ -71,8 +73,8 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: } // CHECK:STDOUT: %Outer.decl: type = class_decl @Outer [concrete = constants.%Outer] {} {} // CHECK:STDOUT: %MakeOuter.decl: %MakeOuter.type = fn_decl @MakeOuter [concrete = constants.%MakeOuter] { -// CHECK:STDOUT: %return.patt: %Outer = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Outer = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.e74 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.e74 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %return.param: ref %Outer = out_param call_param0 diff --git a/toolchain/check/testdata/class/local.carbon b/toolchain/check/testdata/class/local.carbon index 174f4afcea0d..f1da4f185eff 100644 --- a/toolchain/check/testdata/class/local.carbon +++ b/toolchain/check/testdata/class/local.carbon @@ -29,11 +29,13 @@ class A { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %pattern_type.971: type = pattern_type %B [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %i32 [concrete] @@ -76,8 +78,8 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: class @A { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -95,8 +97,8 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: class @B { // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %B = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %B = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.971 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.971 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc14: type = name_ref Self, constants.%B [concrete = constants.%B] // CHECK:STDOUT: %return.param: ref %B = out_param call_param0 @@ -132,8 +134,8 @@ class A { // CHECK:STDOUT: fn @Make() -> %return.param: %B { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %B = binding_pattern b -// CHECK:STDOUT: %.loc15_18.1: %B = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.971 = binding_pattern b +// CHECK:STDOUT: %.loc15_18.1: %pattern_type.971 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc15_39.1: %struct_type.n.44a = struct_literal (%int_1) diff --git a/toolchain/check/testdata/class/method.carbon b/toolchain/check/testdata/class/method.carbon index 250de5975489..40226a9ae2a6 100644 --- a/toolchain/check/testdata/class/method.carbon +++ b/toolchain/check/testdata/class/method.carbon @@ -62,11 +62,15 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] @@ -133,10 +137,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc20: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -147,10 +151,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return.loc20: ref %i32 = return_slot %return.param.loc20 // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.761 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -161,10 +165,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallAlias.decl: %CallAlias.type = fn_decl @CallAlias [concrete = constants.%CallAlias] { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %Class = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.761 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -175,8 +179,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallOnConstBoundMethod.decl: %CallOnConstBoundMethod.type = fn_decl @CallOnConstBoundMethod [concrete = constants.%CallOnConstBoundMethod] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -184,8 +188,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallWithAddr.decl: %CallWithAddr.type = fn_decl @CallWithAddr [concrete = constants.%CallWithAddr] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -193,10 +197,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallFThroughPointer.decl: %CallFThroughPointer.type = fn_decl @CallFThroughPointer [concrete = constants.%CallFThroughPointer] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -210,10 +214,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGThroughPointer.decl: %CallGThroughPointer.type = fn_decl @CallGThroughPointer [concrete = constants.%CallGThroughPointer] { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.e71 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.796 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -227,16 +231,16 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %return.param: ref %Class = out_param call_param0 // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallFOnInitializingExpr.decl: %CallFOnInitializingExpr.type = fn_decl @CallFOnInitializingExpr [concrete = constants.%CallFOnInitializingExpr] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -244,8 +248,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGOnInitializingExpr.decl: %CallGOnInitializingExpr.type = fn_decl @CallGOnInitializingExpr [concrete = constants.%CallGOnInitializingExpr] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -256,10 +260,10 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -270,11 +274,11 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return.loc12: ref %i32 = return_slot %return.param.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %ptr.e71 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.e71 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc13_8: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc13_8: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -366,8 +370,8 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: fn @CallWithAddr() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %.loc39: %Class = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %.loc39: %pattern_type.761 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var c // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/min_prelude/destroy_calls.carbon b/toolchain/check/testdata/class/min_prelude/destroy_calls.carbon index 05af490148da..5c484d7a28cf 100644 --- a/toolchain/check/testdata/class/min_prelude/destroy_calls.carbon +++ b/toolchain/check/testdata/class/min_prelude/destroy_calls.carbon @@ -109,6 +109,7 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %NoAddr: type = class_type @NoAddr [concrete] +// CHECK:STDOUT: %pattern_type.88f: type = pattern_type %NoAddr [concrete] // CHECK:STDOUT: %Make.type.bc9: type = fn_type @Make.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Make.1be: %Make.type.bc9 = struct_value () [concrete] @@ -117,14 +118,19 @@ fn G() { F({}); } // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ExplicitReturn: type = class_type @ExplicitReturn [concrete] +// CHECK:STDOUT: %pattern_type.611: type = pattern_type %ExplicitReturn [concrete] // CHECK:STDOUT: %Make.type.378: type = fn_type @Make.2 [concrete] // CHECK:STDOUT: %Make.960: %Make.type.378 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %destroy.type.dfa: type = fn_type @destroy.2 [concrete] // CHECK:STDOUT: %destroy.539: %destroy.type.dfa = struct_value () [concrete] // CHECK:STDOUT: %WithAddr: type = class_type @WithAddr [concrete] +// CHECK:STDOUT: %pattern_type.f93: type = pattern_type %WithAddr [concrete] // CHECK:STDOUT: %Make.type.e14: type = fn_type @Make.3 [concrete] // CHECK:STDOUT: %Make.b0a: %Make.type.e14 = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %WithAddr [concrete] +// CHECK:STDOUT: %pattern_type.4a0: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %destroy.type.02f: type = fn_type @destroy.3 [concrete] // CHECK:STDOUT: %destroy.8d0: %destroy.type.02f = struct_value () [concrete] // CHECK:STDOUT: } @@ -150,16 +156,16 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: class @NoAddr { // CHECK:STDOUT: %Make.decl: %Make.type.bc9 = fn_decl @Make.1 [concrete = constants.%Make.1be] { -// CHECK:STDOUT: %return.patt: %NoAddr = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %NoAddr = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.88f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.88f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %NoAddr.ref: type = name_ref NoAddr, file.%NoAddr.decl [concrete = constants.%NoAddr] // CHECK:STDOUT: %return.param: ref %NoAddr = out_param call_param0 // CHECK:STDOUT: %return: ref %NoAddr = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %destroy.decl: %destroy.type.bc5 = fn_decl @destroy.1 [concrete = constants.%destroy.60f] { -// CHECK:STDOUT: %self.patt: %NoAddr = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %NoAddr = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.88f = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.88f = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %NoAddr = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%NoAddr [concrete = constants.%NoAddr] @@ -178,18 +184,18 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: class @ExplicitReturn { // CHECK:STDOUT: %Make.decl: %Make.type.378 = fn_decl @Make.2 [concrete = constants.%Make.960] { -// CHECK:STDOUT: %return.patt: %ExplicitReturn = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ExplicitReturn = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.611 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.611 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %ExplicitReturn.ref: type = name_ref ExplicitReturn, file.%ExplicitReturn.decl [concrete = constants.%ExplicitReturn] // CHECK:STDOUT: %return.param: ref %ExplicitReturn = out_param call_param0 // CHECK:STDOUT: %return: ref %ExplicitReturn = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %destroy.decl: %destroy.type.dfa = fn_decl @destroy.2 [concrete = constants.%destroy.539] { -// CHECK:STDOUT: %self.patt: %ExplicitReturn = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ExplicitReturn = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.611 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.611 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_32.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc11_32.2: type = converted %.loc11_32.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -212,17 +218,17 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: class @WithAddr { // CHECK:STDOUT: %Make.decl: %Make.type.e14 = fn_decl @Make.3 [concrete = constants.%Make.b0a] { -// CHECK:STDOUT: %return.patt: %WithAddr = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %WithAddr = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.f93 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.f93 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %WithAddr.ref: type = name_ref WithAddr, file.%WithAddr.decl [concrete = constants.%WithAddr] // CHECK:STDOUT: %return.param: ref %WithAddr = out_param call_param0 // CHECK:STDOUT: %return: ref %WithAddr = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %destroy.decl: %destroy.type.02f = fn_decl @destroy.3 [concrete = constants.%destroy.8d0] { -// CHECK:STDOUT: %self.patt: %ptr = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc16_14: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.4a0 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.4a0 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc16_14: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc16_29: type = splice_block %ptr [concrete = constants.%ptr] { @@ -263,12 +269,15 @@ fn G() { F({}); } // CHECK:STDOUT: %NoAddr: type = class_type @NoAddr [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.88f: type = pattern_type %NoAddr [concrete] // CHECK:STDOUT: %destroy.type.bc5: type = fn_type @destroy.1 [concrete] // CHECK:STDOUT: %destroy.60f: %destroy.type.bc5 = struct_value () [concrete] // CHECK:STDOUT: %ExplicitReturn: type = class_type @ExplicitReturn [concrete] +// CHECK:STDOUT: %pattern_type.611: type = pattern_type %ExplicitReturn [concrete] // CHECK:STDOUT: %destroy.type.dfa: type = fn_type @destroy.2 [concrete] // CHECK:STDOUT: %destroy.539: %destroy.type.dfa = struct_value () [concrete] // CHECK:STDOUT: %WithAddr: type = class_type @WithAddr [concrete] +// CHECK:STDOUT: %pattern_type.f93: type = pattern_type %WithAddr [concrete] // CHECK:STDOUT: %destroy.type.02f: type = fn_type @destroy.3 [concrete] // CHECK:STDOUT: %destroy.8d0: %destroy.type.02f = struct_value () [concrete] // CHECK:STDOUT: %ptr.b4e: type = ptr_type %WithAddr [concrete] @@ -286,11 +295,11 @@ fn G() { F({}); } // CHECK:STDOUT: %Main.import_ref.b5b = import_ref Main//types, loc5_22, unloaded // CHECK:STDOUT: %Main.import_ref.7fe: %destroy.type.bc5 = import_ref Main//types, loc6_27, loaded [concrete = constants.%destroy.60f] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//types, loc12_1, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.ee7 = import_ref Main//types, inst41 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.ee7 = import_ref Main//types, inst42 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.b14 = import_ref Main//types, loc10_30, unloaded // CHECK:STDOUT: %Main.import_ref.83a: %destroy.type.dfa = import_ref Main//types, loc11_33, loaded [concrete = constants.%destroy.539] // CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//types, loc17_1, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.95d = import_ref Main//types, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.95d = import_ref Main//types, inst70 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.1cb = import_ref Main//types, loc15_24, unloaded // CHECK:STDOUT: %Main.import_ref.54e: %destroy.type.02f = import_ref Main//types, loc16_33, loaded [concrete = constants.%destroy.8d0] // CHECK:STDOUT: } @@ -338,8 +347,8 @@ fn G() { F({}); } // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %no_addr.patt: %NoAddr = binding_pattern no_addr -// CHECK:STDOUT: %.loc6_3.1: %NoAddr = var_pattern %no_addr.patt +// CHECK:STDOUT: %no_addr.patt: %pattern_type.88f = binding_pattern no_addr +// CHECK:STDOUT: %.loc6_3.1: %pattern_type.88f = var_pattern %no_addr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %no_addr.var: ref %NoAddr = var no_addr // CHECK:STDOUT: %destroy.ref.1: %destroy.type.bc5 = name_ref destroy, imports.%Main.import_ref.7fe [concrete = constants.%destroy.60f] @@ -347,8 +356,8 @@ fn G() { F({}); } // CHECK:STDOUT: %NoAddr.ref: type = name_ref NoAddr, imports.%Main.NoAddr [concrete = constants.%NoAddr] // CHECK:STDOUT: %no_addr: ref %NoAddr = bind_name no_addr, %no_addr.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %explicit_return.patt: %ExplicitReturn = binding_pattern explicit_return -// CHECK:STDOUT: %.loc7_3.1: %ExplicitReturn = var_pattern %explicit_return.patt +// CHECK:STDOUT: %explicit_return.patt: %pattern_type.611 = binding_pattern explicit_return +// CHECK:STDOUT: %.loc7_3.1: %pattern_type.611 = var_pattern %explicit_return.patt // CHECK:STDOUT: } // CHECK:STDOUT: %explicit_return.var: ref %ExplicitReturn = var explicit_return // CHECK:STDOUT: %destroy.ref.2: %destroy.type.dfa = name_ref destroy, imports.%Main.import_ref.83a [concrete = constants.%destroy.539] @@ -356,8 +365,8 @@ fn G() { F({}); } // CHECK:STDOUT: %ExplicitReturn.ref: type = name_ref ExplicitReturn, imports.%Main.ExplicitReturn [concrete = constants.%ExplicitReturn] // CHECK:STDOUT: %explicit_return: ref %ExplicitReturn = bind_name explicit_return, %explicit_return.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %with_addr.patt: %WithAddr = binding_pattern with_addr -// CHECK:STDOUT: %.loc8: %WithAddr = var_pattern %with_addr.patt +// CHECK:STDOUT: %with_addr.patt: %pattern_type.f93 = binding_pattern with_addr +// CHECK:STDOUT: %.loc8: %pattern_type.f93 = var_pattern %with_addr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %with_addr.var: ref %WithAddr = var with_addr // CHECK:STDOUT: %destroy.ref.3: %destroy.type.02f = name_ref destroy, imports.%Main.import_ref.54e [concrete = constants.%destroy.8d0] @@ -388,12 +397,15 @@ fn G() { F({}); } // CHECK:STDOUT: %NoAddr: type = class_type @NoAddr [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.88f: type = pattern_type %NoAddr [concrete] // CHECK:STDOUT: %destroy.type.bc5: type = fn_type @destroy.1 [concrete] // CHECK:STDOUT: %destroy.60f: %destroy.type.bc5 = struct_value () [concrete] // CHECK:STDOUT: %ExplicitReturn: type = class_type @ExplicitReturn [concrete] +// CHECK:STDOUT: %pattern_type.611: type = pattern_type %ExplicitReturn [concrete] // CHECK:STDOUT: %destroy.type.dfa: type = fn_type @destroy.2 [concrete] // CHECK:STDOUT: %destroy.539: %destroy.type.dfa = struct_value () [concrete] // CHECK:STDOUT: %WithAddr: type = class_type @WithAddr [concrete] +// CHECK:STDOUT: %pattern_type.f93: type = pattern_type %WithAddr [concrete] // CHECK:STDOUT: %destroy.type.02f: type = fn_type @destroy.3 [concrete] // CHECK:STDOUT: %destroy.8d0: %destroy.type.02f = struct_value () [concrete] // CHECK:STDOUT: %ptr.b4e: type = ptr_type %WithAddr [concrete] @@ -412,11 +424,11 @@ fn G() { F({}); } // CHECK:STDOUT: %Main.import_ref.b5b = import_ref Main//types, loc5_22, unloaded // CHECK:STDOUT: %Main.import_ref.7fe: %destroy.type.bc5 = import_ref Main//types, loc6_27, loaded [concrete = constants.%destroy.60f] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//types, loc12_1, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.ee7 = import_ref Main//types, inst41 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.ee7 = import_ref Main//types, inst42 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.b14 = import_ref Main//types, loc10_30, unloaded // CHECK:STDOUT: %Main.import_ref.83a: %destroy.type.dfa = import_ref Main//types, loc11_33, loaded [concrete = constants.%destroy.539] // CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//types, loc17_1, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.95d = import_ref Main//types, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.95d = import_ref Main//types, inst70 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.1cb = import_ref Main//types, loc15_24, unloaded // CHECK:STDOUT: %Main.import_ref.54e: %destroy.type.02f = import_ref Main//types, loc16_33, loaded [concrete = constants.%destroy.8d0] // CHECK:STDOUT: } @@ -464,8 +476,8 @@ fn G() { F({}); } // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %no_addr.patt: %NoAddr = binding_pattern no_addr -// CHECK:STDOUT: %.loc6_3.1: %NoAddr = var_pattern %no_addr.patt +// CHECK:STDOUT: %no_addr.patt: %pattern_type.88f = binding_pattern no_addr +// CHECK:STDOUT: %.loc6_3.1: %pattern_type.88f = var_pattern %no_addr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %no_addr.var: ref %NoAddr = var no_addr // CHECK:STDOUT: %destroy.ref.1: %destroy.type.bc5 = name_ref destroy, imports.%Main.import_ref.7fe [concrete = constants.%destroy.60f] @@ -473,8 +485,8 @@ fn G() { F({}); } // CHECK:STDOUT: %NoAddr.ref.loc6: type = name_ref NoAddr, imports.%Main.NoAddr [concrete = constants.%NoAddr] // CHECK:STDOUT: %no_addr: ref %NoAddr = bind_name no_addr, %no_addr.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %explicit_return.patt: %ExplicitReturn = binding_pattern explicit_return -// CHECK:STDOUT: %.loc7_3.1: %ExplicitReturn = var_pattern %explicit_return.patt +// CHECK:STDOUT: %explicit_return.patt: %pattern_type.611 = binding_pattern explicit_return +// CHECK:STDOUT: %.loc7_3.1: %pattern_type.611 = var_pattern %explicit_return.patt // CHECK:STDOUT: } // CHECK:STDOUT: %explicit_return.var: ref %ExplicitReturn = var explicit_return // CHECK:STDOUT: %destroy.ref.2: %destroy.type.dfa = name_ref destroy, imports.%Main.import_ref.83a [concrete = constants.%destroy.539] @@ -482,8 +494,8 @@ fn G() { F({}); } // CHECK:STDOUT: %ExplicitReturn.ref: type = name_ref ExplicitReturn, imports.%Main.ExplicitReturn [concrete = constants.%ExplicitReturn] // CHECK:STDOUT: %explicit_return: ref %ExplicitReturn = bind_name explicit_return, %explicit_return.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %with_addr.patt: %WithAddr = binding_pattern with_addr -// CHECK:STDOUT: %.loc8: %WithAddr = var_pattern %with_addr.patt +// CHECK:STDOUT: %with_addr.patt: %pattern_type.f93 = binding_pattern with_addr +// CHECK:STDOUT: %.loc8: %pattern_type.f93 = var_pattern %with_addr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %with_addr.var: ref %WithAddr = var with_addr // CHECK:STDOUT: %destroy.ref.3: %destroy.type.02f = name_ref destroy, imports.%Main.import_ref.54e [concrete = constants.%destroy.8d0] @@ -495,8 +507,8 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %in_scope.patt: %NoAddr = binding_pattern in_scope -// CHECK:STDOUT: %.loc10_5.1: %NoAddr = var_pattern %in_scope.patt +// CHECK:STDOUT: %in_scope.patt: %pattern_type.88f = binding_pattern in_scope +// CHECK:STDOUT: %.loc10_5.1: %pattern_type.88f = var_pattern %in_scope.patt // CHECK:STDOUT: } // CHECK:STDOUT: %in_scope.var: ref %NoAddr = var in_scope // CHECK:STDOUT: %destroy.ref.4: %destroy.type.bc5 = name_ref destroy, imports.%Main.import_ref.7fe [concrete = constants.%destroy.60f] @@ -561,11 +573,11 @@ fn G() { F({}); } // CHECK:STDOUT: %Main.import_ref.784: %Make.type.bc9 = import_ref Main//types, loc5_22, loaded [concrete = constants.%Make.1be] // CHECK:STDOUT: %Main.import_ref.7fe: %destroy.type.bc5 = import_ref Main//types, loc6_27, loaded [concrete = constants.%destroy.60f] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//types, loc12_1, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.ee7 = import_ref Main//types, inst41 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.ee7 = import_ref Main//types, inst42 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.8e0: %Make.type.378 = import_ref Main//types, loc10_30, loaded [concrete = constants.%Make.960] // CHECK:STDOUT: %Main.import_ref.83a: %destroy.type.dfa = import_ref Main//types, loc11_33, loaded [concrete = constants.%destroy.539] // CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//types, loc17_1, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.95d = import_ref Main//types, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.95d = import_ref Main//types, inst70 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.974: %Make.type.e14 = import_ref Main//types, loc15_24, loaded [concrete = constants.%Make.b0a] // CHECK:STDOUT: %Main.import_ref.54e: %destroy.type.02f = import_ref Main//types, loc16_33, loaded [concrete = constants.%destroy.8d0] // CHECK:STDOUT: } @@ -664,10 +676,13 @@ fn G() { F({}); } // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Args: type = class_type @Args [concrete] +// CHECK:STDOUT: %pattern_type.a81: type = pattern_type %Args [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %destroy.type.ba0: type = fn_type @destroy.2 [concrete] // CHECK:STDOUT: %destroy.723: %destroy.type.ba0 = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.9f4: type = pattern_type %NoSelf [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -702,10 +717,10 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: class @Args { // CHECK:STDOUT: %destroy.decl: %destroy.type.ba0 = fn_decl @destroy.2 [concrete = constants.%destroy.723] { -// CHECK:STDOUT: %self.patt: %Args = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Args = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.a81 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.a81 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern %x.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Args = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Args [concrete = constants.%Args] @@ -733,16 +748,16 @@ fn G() { F({}); } // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %NoSelf = binding_pattern a -// CHECK:STDOUT: %.loc21: %NoSelf = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.9f4 = binding_pattern a +// CHECK:STDOUT: %.loc21: %pattern_type.9f4 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %NoSelf = var a // CHECK:STDOUT: %destroy.ref.1: %destroy.type.d69 = name_ref destroy, @NoSelf.%destroy.decl [concrete = constants.%destroy.ab7] // CHECK:STDOUT: %NoSelf.ref: type = name_ref NoSelf, file.%NoSelf.decl [concrete = constants.%NoSelf] // CHECK:STDOUT: %a: ref %NoSelf = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %Args = binding_pattern b -// CHECK:STDOUT: %.loc22_3.1: %Args = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.a81 = binding_pattern b +// CHECK:STDOUT: %.loc22_3.1: %pattern_type.a81 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %Args = var b // CHECK:STDOUT: %destroy.ref.2: %destroy.type.ba0 = name_ref destroy, @Args.%destroy.decl [concrete = constants.%destroy.723] @@ -759,7 +774,8 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -769,10 +785,12 @@ fn G() { F({}); } // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %C.f2e [template] +// CHECK:STDOUT: %pattern_type.e5e: type = pattern_type %C.f2e [template] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%empty_struct_type) [concrete] // CHECK:STDOUT: %C.7a7: type = class_type @C, @C(%empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.99a: type = pattern_type %C.7a7 [concrete] // CHECK:STDOUT: %inst.as_compatible: = inst_value [concrete] { // CHECK:STDOUT: %.6f0: ref %C.7a7 = as_compatible @F.%v.var // CHECK:STDOUT: } @@ -796,12 +814,12 @@ fn G() { F({}); } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc4_18.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_18.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_18.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_18.1: type = bind_symbolic_name T, 0, template [template = %T.loc4_18.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_15.1: type = bind_symbolic_name T, 0, template [template = %T.loc6_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -810,7 +828,7 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_18.1: type) { // CHECK:STDOUT: %T.loc4_18.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_18.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_18.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_18.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_18.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -826,11 +844,12 @@ fn G() { F({}); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_15.1: type) { // CHECK:STDOUT: %T.loc6_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc6_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %C.loc7_13.2: type = class_type @C, @C(%T.loc6_15.2) [template = %C.loc7_13.2 (constants.%C.f2e)] // CHECK:STDOUT: %require_complete: = require_complete_type %C.loc7_13.2 [template = %require_complete (constants.%require_complete)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc7_13.2 [template = %pattern_type (constants.%pattern_type.e5e)] // CHECK:STDOUT: %.3: = refine_type_action %v.var, %C.loc7_13.2 [template] // CHECK:STDOUT: %.4: = access_optional_member_action %.1, destroy [template] // CHECK:STDOUT: %.5: type = type_of_inst %.4 [template] @@ -838,8 +857,8 @@ fn G() { F({}); } // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%C.loc7_13.2 (%C.f2e) = binding_pattern v -// CHECK:STDOUT: %.loc7_3: @F.%C.loc7_13.2 (%C.f2e) = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.e5e) = binding_pattern v +// CHECK:STDOUT: %.loc7_3: @F.%pattern_type (%pattern_type.e5e) = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @F.%C.loc7_13.2 (%C.f2e) = var v // CHECK:STDOUT: %.1: @F.%C.loc7_13.2 (%C.f2e) = splice_inst %.3 @@ -885,6 +904,7 @@ fn G() { F({}); } // CHECK:STDOUT: !definition: // CHECK:STDOUT: %C.loc7_13.2 => constants.%C.7a7 // CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.99a // CHECK:STDOUT: %.3 => constants.%inst.as_compatible // CHECK:STDOUT: %.4 => constants.%inst.splice_block // CHECK:STDOUT: %.5 => diff --git a/toolchain/check/testdata/class/min_prelude/fail_abstract.carbon b/toolchain/check/testdata/class/min_prelude/fail_abstract.carbon index 65b2328bf797..5dd2346f76a1 100644 --- a/toolchain/check/testdata/class/min_prelude/fail_abstract.carbon +++ b/toolchain/check/testdata/class/min_prelude/fail_abstract.carbon @@ -294,6 +294,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -313,8 +314,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %Abstract = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Abstract = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Abstract.ref.loc7: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -334,7 +335,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: fn @F(%a.param: %Abstract) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %Abstract = binding_pattern l +// CHECK:STDOUT: %l.patt: %pattern_type = binding_pattern l // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %Abstract = name_ref a, %a // CHECK:STDOUT: %Abstract.ref.loc8: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -394,6 +395,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: %Param.type: type = fn_type @Param [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Param: %Param.type = struct_value () [concrete] @@ -417,16 +419,16 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %Param.decl: %Param.type = fn_decl @Param [concrete = constants.%Param] { -// CHECK:STDOUT: %a.patt: %Abstract = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Abstract = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %a: %Abstract = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %p.patt: %Abstract = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %Abstract = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -464,6 +466,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Derived.elem.ad9: type = unbound_element_type %Derived, %empty_struct_type [concrete] // CHECK:STDOUT: %struct_type.base.d.c06: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.b4a: = complete_type_witness %struct_type.base.d.c06 [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.d.e0f: type = struct_type {.base: %empty_struct_type, .d: %empty_struct_type} [concrete] @@ -486,8 +489,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %Derived = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Derived = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] // CHECK:STDOUT: %return.param: ref %Derived = out_param call_param0 @@ -541,6 +544,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Derived.elem.ad9: type = unbound_element_type %Derived, %empty_struct_type [concrete] // CHECK:STDOUT: %struct_type.base.d: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.b4a: = complete_type_witness %struct_type.base.d [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: %Return.type: type = fn_type @Return [concrete] // CHECK:STDOUT: %Return: %Return.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -562,10 +566,10 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Return.decl: %Return.type = fn_decl @Return [concrete = constants.%Return] { -// CHECK:STDOUT: %a.patt: %Abstract = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Abstract = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %Abstract = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Abstract = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Abstract.ref.loc13_27: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %a.param: %Abstract = value_param call_param0 @@ -622,6 +626,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Derived.elem.ad9: type = unbound_element_type %Derived, %empty_struct_type [concrete] // CHECK:STDOUT: %struct_type.base.d.c06: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete] // CHECK:STDOUT: %complete_type.b4a: = complete_type_witness %struct_type.base.d.c06 [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %Access.type: type = fn_type @Access [concrete] // CHECK:STDOUT: %Access: %Access.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -643,10 +649,10 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %Access.decl: %Access.type = fn_decl @Access [concrete = constants.%Access] { -// CHECK:STDOUT: %d.patt: %Derived = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %Derived = value_param_pattern %d.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %d.patt: %pattern_type.fb9 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.fb9 = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_27.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc14_27.2: type = converted %.loc14_27.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -706,6 +712,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -737,7 +744,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %Abstract = binding_pattern l +// CHECK:STDOUT: %l.patt: %pattern_type = binding_pattern l // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8: %empty_struct_type = struct_literal () // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] @@ -751,6 +758,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: %ReturnAbstract.type: type = fn_type @ReturnAbstract [concrete] // CHECK:STDOUT: %ReturnAbstract: %ReturnAbstract.type = struct_value () [concrete] // CHECK:STDOUT: %CallReturnAbstract.type: type = fn_type @CallReturnAbstract [concrete] @@ -773,8 +781,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract.decl: type = class_decl @Abstract [concrete = constants.%Abstract] {} {} // CHECK:STDOUT: %ReturnAbstract.decl: %ReturnAbstract.type = fn_decl @ReturnAbstract [concrete = constants.%ReturnAbstract] { -// CHECK:STDOUT: %return.patt: %Abstract = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Abstract = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %return.param: ref %Abstract = out_param call_param0 diff --git a/toolchain/check/testdata/class/min_prelude/fail_abstract_in_tuple.carbon b/toolchain/check/testdata/class/min_prelude/fail_abstract_in_tuple.carbon index c4e13189386f..897fde707d9e 100644 --- a/toolchain/check/testdata/class/min_prelude/fail_abstract_in_tuple.carbon +++ b/toolchain/check/testdata/class/min_prelude/fail_abstract_in_tuple.carbon @@ -236,10 +236,12 @@ fn Var5() { // CHECK:STDOUT: %Abstract3: type = class_type @Abstract3 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.32b: type = pattern_type %Abstract3 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.fa1: type = tuple_type (%Abstract3) [concrete] +// CHECK:STDOUT: %pattern_type.3cf: type = pattern_type %tuple.type.fa1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -257,8 +259,8 @@ fn Var5() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Abstract3.decl: type = class_decl @Abstract3 [concrete = constants.%Abstract3] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %Abstract3 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Abstract3 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.32b = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.32b = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract3 = value_param call_param0 // CHECK:STDOUT: %Abstract3.ref.loc6: type = name_ref Abstract3, file.%Abstract3.decl [concrete = constants.%Abstract3] @@ -278,7 +280,7 @@ fn Var5() { // CHECK:STDOUT: fn @F(%a.param: %Abstract3) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %tuple.type.fa1 = binding_pattern l +// CHECK:STDOUT: %l.patt: %pattern_type.3cf = binding_pattern l // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %Abstract3 = name_ref a, %a // CHECK:STDOUT: %.loc7_28: %tuple.type.fa1 = tuple_literal (%a.ref) diff --git a/toolchain/check/testdata/class/nested.carbon b/toolchain/check/testdata/class/nested.carbon index 9e7752dffe9a..622510a5b238 100644 --- a/toolchain/check/testdata/class/nested.carbon +++ b/toolchain/check/testdata/class/nested.carbon @@ -70,8 +70,12 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Outer.elem.fe9: type = unbound_element_type %Outer, %ptr.36a [concrete] // CHECK:STDOUT: %struct_type.po.qo.pi: type = struct_type {.po: %ptr.5df, .qo: %ptr.5df, .pi: %ptr.36a} [concrete] // CHECK:STDOUT: %complete_type.e99: = complete_type_witness %struct_type.po.qo.pi [concrete] +// CHECK:STDOUT: %pattern_type.e74: type = pattern_type %Outer [concrete] +// CHECK:STDOUT: %pattern_type.906: type = pattern_type %Inner [concrete] +// CHECK:STDOUT: %pattern_type.95c: type = pattern_type %ptr.5df [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.27f: type = pattern_type %ptr.36a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -90,8 +94,8 @@ fn F(a: Outer*) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: type = class_decl @Outer [concrete = constants.%Outer] {} {} // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %a.patt: %ptr.5df = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.5df = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.95c = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.95c = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.5df = value_param call_param0 // CHECK:STDOUT: %.loc41: type = splice_block %ptr.loc41 [concrete = constants.%ptr.5df] { @@ -158,15 +162,15 @@ fn F(a: Outer*) { // CHECK:STDOUT: fn @F.1() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o.patt: %Outer = binding_pattern o -// CHECK:STDOUT: %.loc14: %Outer = var_pattern %o.patt +// CHECK:STDOUT: %o.patt: %pattern_type.e74 = binding_pattern o +// CHECK:STDOUT: %.loc14: %pattern_type.e74 = var_pattern %o.patt // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var o // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = bind_name o, %o.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %Inner = binding_pattern i -// CHECK:STDOUT: %.loc15: %Inner = var_pattern %i.patt +// CHECK:STDOUT: %i.patt: %pattern_type.906 = binding_pattern i +// CHECK:STDOUT: %.loc15: %pattern_type.906 = var_pattern %i.patt // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var i // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] @@ -177,15 +181,15 @@ fn F(a: Outer*) { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o.patt: %Outer = binding_pattern o -// CHECK:STDOUT: %.loc25: %Outer = var_pattern %o.patt +// CHECK:STDOUT: %o.patt: %pattern_type.e74 = binding_pattern o +// CHECK:STDOUT: %.loc25: %pattern_type.e74 = var_pattern %o.patt // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var o // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = bind_name o, %o.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %Inner = binding_pattern i -// CHECK:STDOUT: %.loc26: %Inner = var_pattern %i.patt +// CHECK:STDOUT: %i.patt: %pattern_type.906 = binding_pattern i +// CHECK:STDOUT: %.loc26: %pattern_type.906 = var_pattern %i.patt // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var i // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] @@ -196,15 +200,15 @@ fn F(a: Outer*) { // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o.patt: %Outer = binding_pattern o -// CHECK:STDOUT: %.loc32: %Outer = var_pattern %o.patt +// CHECK:STDOUT: %o.patt: %pattern_type.e74 = binding_pattern o +// CHECK:STDOUT: %.loc32: %pattern_type.e74 = var_pattern %o.patt // CHECK:STDOUT: } // CHECK:STDOUT: %o.var: ref %Outer = var o // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] // CHECK:STDOUT: %o: ref %Outer = bind_name o, %o.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %Inner = binding_pattern i -// CHECK:STDOUT: %.loc33: %Inner = var_pattern %i.patt +// CHECK:STDOUT: %i.patt: %pattern_type.906 = binding_pattern i +// CHECK:STDOUT: %.loc33: %pattern_type.906 = var_pattern %i.patt // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var i // CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] @@ -215,7 +219,7 @@ fn F(a: Outer*) { // CHECK:STDOUT: fn @F.2(%a.param: %ptr.5df) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %ptr.36a = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.27f = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref.loc42: %ptr.5df = name_ref a, %a // CHECK:STDOUT: %.loc42_26: ref %Outer = deref %a.ref.loc42 diff --git a/toolchain/check/testdata/class/nested_name.carbon b/toolchain/check/testdata/class/nested_name.carbon index 5076cbf1482c..19403e9054ac 100644 --- a/toolchain/check/testdata/class/nested_name.carbon +++ b/toolchain/check/testdata/class/nested_name.carbon @@ -34,8 +34,11 @@ fn G(o: Outer) { // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.906: type = pattern_type %Inner [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.e74: type = pattern_type %Outer [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -58,10 +61,10 @@ fn G(o: Outer) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: type = class_decl @Outer [concrete = constants.%Outer] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %oi.patt: %Inner = binding_pattern oi -// CHECK:STDOUT: %oi.param_patt: %Inner = value_param_pattern %oi.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %oi.patt: %pattern_type.906 = binding_pattern oi +// CHECK:STDOUT: %oi.param_patt: %pattern_type.906 = value_param_pattern %oi.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -75,8 +78,8 @@ fn G(o: Outer) { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %o.patt: %Outer = binding_pattern o -// CHECK:STDOUT: %o.param_patt: %Outer = value_param_pattern %o.patt, call_param0 +// CHECK:STDOUT: %o.patt: %pattern_type.e74 = binding_pattern o +// CHECK:STDOUT: %o.param_patt: %pattern_type.e74 = value_param_pattern %o.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %o.param: %Outer = value_param call_param0 // CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] @@ -120,8 +123,8 @@ fn G(o: Outer) { // CHECK:STDOUT: fn @G(%o.param: %Outer) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %Inner = binding_pattern i -// CHECK:STDOUT: %.loc22_3: %Inner = var_pattern %i.patt +// CHECK:STDOUT: %i.patt: %pattern_type.906 = binding_pattern i +// CHECK:STDOUT: %.loc22_3: %pattern_type.906 = var_pattern %i.patt // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %Inner = var i // CHECK:STDOUT: %.loc22_11: type = splice_block %Inner.ref [concrete = constants.%Inner] { diff --git a/toolchain/check/testdata/class/no_prelude/comp_time_field.carbon b/toolchain/check/testdata/class/no_prelude/comp_time_field.carbon index 78a5946ae43b..dedbf9b6db7b 100644 --- a/toolchain/check/testdata/class/no_prelude/comp_time_field.carbon +++ b/toolchain/check/testdata/class/no_prelude/comp_time_field.carbon @@ -54,6 +54,7 @@ var x: Class = {}; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: } @@ -67,12 +68,12 @@ var x: Class = {}; // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %A.patt: type = binding_pattern A +// CHECK:STDOUT: %A.patt: %pattern_type = binding_pattern A // CHECK:STDOUT: } // CHECK:STDOUT: %Class.ref.loc9: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %A: type = bind_name A, %Class.ref.loc9 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %B.patt: type = binding_pattern B +// CHECK:STDOUT: %B.patt: %pattern_type = binding_pattern B // CHECK:STDOUT: } // CHECK:STDOUT: %Class.ref.loc15: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %B: type = bind_name B, %Class.ref.loc15 diff --git a/toolchain/check/testdata/class/no_prelude/export_name.carbon b/toolchain/check/testdata/class/no_prelude/export_name.carbon index 47b7b3d00cb8..57209dfeadb7 100644 --- a/toolchain/check/testdata/class/no_prelude/export_name.carbon +++ b/toolchain/check/testdata/class/no_prelude/export_name.carbon @@ -97,6 +97,7 @@ var c: C = {}; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -113,8 +114,8 @@ var c: C = {}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] diff --git a/toolchain/check/testdata/class/no_prelude/fail_abstract_in_struct.carbon b/toolchain/check/testdata/class/no_prelude/fail_abstract_in_struct.carbon index 002d5ebba34c..86ac7deed288 100644 --- a/toolchain/check/testdata/class/no_prelude/fail_abstract_in_struct.carbon +++ b/toolchain/check/testdata/class/no_prelude/fail_abstract_in_struct.carbon @@ -195,9 +195,11 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: %Abstract3: type = class_type @Abstract3 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.32b: type = pattern_type %Abstract3 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.m3.fe4: type = struct_type {.m3: %Abstract3} [concrete] +// CHECK:STDOUT: %pattern_type.a22: type = pattern_type %struct_type.m3.fe4 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -207,8 +209,8 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: } // CHECK:STDOUT: %Abstract3.decl: type = class_decl @Abstract3 [concrete = constants.%Abstract3] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %Abstract3 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %Abstract3 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.32b = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.32b = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %Abstract3 = value_param call_param0 // CHECK:STDOUT: %Abstract3.ref.loc6: type = name_ref Abstract3, file.%Abstract3.decl [concrete = constants.%Abstract3] @@ -228,7 +230,7 @@ var v5: {.m: Abstract}; // CHECK:STDOUT: fn @F(%a.param: %Abstract3) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %l.patt: %struct_type.m3.fe4 = binding_pattern l +// CHECK:STDOUT: %l.patt: %pattern_type.a22 = binding_pattern l // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %Abstract3 = name_ref a, %a // CHECK:STDOUT: %.loc7_37: %struct_type.m3.fe4 = struct_literal (%a.ref) diff --git a/toolchain/check/testdata/class/no_prelude/generic_vs_params.carbon b/toolchain/check/testdata/class/no_prelude/generic_vs_params.carbon index 26945b0805fb..a40d9c03bd82 100644 --- a/toolchain/check/testdata/class/no_prelude/generic_vs_params.carbon +++ b/toolchain/check/testdata/class/no_prelude/generic_vs_params.carbon @@ -84,7 +84,8 @@ class Foo[T:! type]; // CHECK:STDOUT: %NotGenericButParams.generic: %NotGenericButParams.type = struct_value () [concrete] // CHECK:STDOUT: %NotGenericButParams: type = class_type @NotGenericButParams [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %GenericAndParams.type.c8d: type = generic_class_type @GenericAndParams.1 [concrete] // CHECK:STDOUT: %GenericAndParams.generic.1e4: %GenericAndParams.type.c8d = struct_value () [concrete] // CHECK:STDOUT: %GenericAndParams.2ce: type = class_type @GenericAndParams.1, @GenericAndParams.1(%T) [symbolic] @@ -93,21 +94,26 @@ class Foo[T:! type]; // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %GenericNoParams.fbf: type = class_type @GenericNoParams, @GenericNoParams(%T) [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %GenericAndParams.type.3ce: type = generic_class_type @GenericAndParams.2, @C(%T) [symbolic] // CHECK:STDOUT: %GenericAndParams.generic.54a: %GenericAndParams.type.3ce = struct_value () [symbolic] // CHECK:STDOUT: %GenericAndParams.425: type = class_type @GenericAndParams.2, @GenericAndParams.2(%T, %U) [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] +// CHECK:STDOUT: %pattern_type.71d: type = pattern_type %NotGenericNoParams [concrete] // CHECK:STDOUT: %NotGenericNoParams.val: %NotGenericNoParams = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.4f9: type = pattern_type %NotGenericButParams [concrete] // CHECK:STDOUT: %NotGenericButParams.val: %NotGenericButParams = struct_value () [concrete] // CHECK:STDOUT: %GenericAndParams.2bb: type = class_type @GenericAndParams.1, @GenericAndParams.1(%X) [concrete] +// CHECK:STDOUT: %pattern_type.569: type = pattern_type %GenericAndParams.2bb [concrete] // CHECK:STDOUT: %GenericAndParams.val.0b2: %GenericAndParams.2bb = struct_value () [concrete] // CHECK:STDOUT: %C.fac: type = class_type @C, @C(%X) [concrete] // CHECK:STDOUT: %GenericNoParams.fa1: type = class_type @GenericNoParams, @GenericNoParams(%X) [concrete] // CHECK:STDOUT: %GenericAndParams.type.c20: type = generic_class_type @GenericAndParams.2, @C(%X) [concrete] // CHECK:STDOUT: %GenericAndParams.generic.a55: %GenericAndParams.type.c20 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.518: type = pattern_type %GenericNoParams.fa1 [concrete] // CHECK:STDOUT: %GenericNoParams.val: %GenericNoParams.fa1 = struct_value () [concrete] // CHECK:STDOUT: %GenericAndParams.91f: type = class_type @GenericAndParams.2, @GenericAndParams.2(%X, %X) [concrete] +// CHECK:STDOUT: %pattern_type.806: type = pattern_type %GenericAndParams.91f [concrete] // CHECK:STDOUT: %GenericAndParams.val.99b: %GenericAndParams.91f = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -127,26 +133,26 @@ class Foo[T:! type]; // CHECK:STDOUT: %NotGenericNoParams.decl: type = class_decl @NotGenericNoParams [concrete = constants.%NotGenericNoParams] {} {} // CHECK:STDOUT: %NotGenericButParams.decl: %NotGenericButParams.type = class_decl @NotGenericButParams [concrete = constants.%NotGenericButParams.generic] {} {} // CHECK:STDOUT: %GenericAndParams.decl: %GenericAndParams.type.c8d = class_decl @GenericAndParams.1 [concrete = constants.%GenericAndParams.generic.1e4] { -// CHECK:STDOUT: %T.patt.loc6_24.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_24.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_24.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_24.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_24.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_24.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc8_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %NotGenericNoParams = binding_pattern a -// CHECK:STDOUT: %.loc15: %NotGenericNoParams = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.71d = binding_pattern a +// CHECK:STDOUT: %.loc15: %pattern_type.71d = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %NotGenericNoParams = var a // CHECK:STDOUT: %NotGenericNoParams.ref: type = name_ref NotGenericNoParams, %NotGenericNoParams.decl [concrete = constants.%NotGenericNoParams] // CHECK:STDOUT: %a: ref %NotGenericNoParams = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %NotGenericButParams = binding_pattern b -// CHECK:STDOUT: %.loc16_1: %NotGenericButParams = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.4f9 = binding_pattern b +// CHECK:STDOUT: %.loc16_1: %pattern_type.4f9 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %NotGenericButParams = var b // CHECK:STDOUT: %.loc16_28: type = splice_block %NotGenericButParams [concrete = constants.%NotGenericButParams] { @@ -155,8 +161,8 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %NotGenericButParams = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %GenericAndParams.2bb = binding_pattern c -// CHECK:STDOUT: %.loc17_1: %GenericAndParams.2bb = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.569 = binding_pattern c +// CHECK:STDOUT: %.loc17_1: %pattern_type.569 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %GenericAndParams.2bb = var c // CHECK:STDOUT: %.loc17_26: type = splice_block %GenericAndParams.loc17 [concrete = constants.%GenericAndParams.2bb] { @@ -166,8 +172,8 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %GenericAndParams.2bb = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %GenericNoParams.fa1 = binding_pattern d -// CHECK:STDOUT: %.loc18_1: %GenericNoParams.fa1 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.518 = binding_pattern d +// CHECK:STDOUT: %.loc18_1: %pattern_type.518 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %GenericNoParams.fa1 = var d // CHECK:STDOUT: %.loc18_12.1: type = splice_block %GenericNoParams.ref [concrete = constants.%GenericNoParams.fa1] { @@ -179,8 +185,8 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %GenericNoParams.fa1 = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %GenericAndParams.91f = binding_pattern e -// CHECK:STDOUT: %.loc19_1: %GenericAndParams.91f = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.806 = binding_pattern e +// CHECK:STDOUT: %.loc19_1: %pattern_type.806 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %GenericAndParams.91f = var e // CHECK:STDOUT: %.loc19_31: type = splice_block %GenericAndParams.loc19 [concrete = constants.%GenericAndParams.91f] { @@ -215,7 +221,7 @@ class Foo[T:! type]; // CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericAndParams.1(%T.loc6_24.1: type) { // CHECK:STDOUT: %T.loc6_24.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_24.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_24.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_24.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_24.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_24.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -231,7 +237,7 @@ class Foo[T:! type]; // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc8_9.1: type) { // CHECK:STDOUT: %T.loc8_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %GenericNoParams: type = class_type @GenericNoParams, @GenericNoParams(%T.loc8_9.2) [symbolic = %GenericNoParams (constants.%GenericNoParams.fbf)] @@ -241,7 +247,7 @@ class Foo[T:! type]; // CHECK:STDOUT: class { // CHECK:STDOUT: %GenericNoParams.decl: type = class_decl @GenericNoParams [symbolic = @C.%GenericNoParams (constants.%GenericNoParams.fbf)] {} {} // CHECK:STDOUT: %GenericAndParams.decl: @C.%GenericAndParams.type (%GenericAndParams.type.3ce) = class_decl @GenericAndParams.2 [symbolic = @C.%GenericAndParams.generic (constants.%GenericAndParams.generic.54a)] { -// CHECK:STDOUT: %U.patt.loc10_26.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_26.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc10_26.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_26.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc10_26.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc10_26.2 (constants.%U)] // CHECK:STDOUT: } @@ -271,7 +277,7 @@ class Foo[T:! type]; // CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericAndParams.2(@C.%T.loc8_9.1: type, %U.loc10_26.1: type) { // CHECK:STDOUT: %U.loc10_26.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc10_26.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc10_26.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_26.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc10_26.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_26.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -403,7 +409,8 @@ class Foo[T:! type]; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -415,7 +422,7 @@ class Foo[T:! type]; // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc11_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_6.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] // CHECK:STDOUT: } @@ -432,7 +439,7 @@ class Foo[T:! type]; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc11_6.1: type) { // CHECK:STDOUT: %T.loc11_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_6.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -470,7 +477,8 @@ class Foo[T:! type]; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -480,7 +488,7 @@ class Foo[T:! type]; // CHECK:STDOUT: .Foo = %Foo.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %T.patt.loc8_11.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_11.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_11.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_11.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_11.2 (constants.%T)] // CHECK:STDOUT: } @@ -488,7 +496,7 @@ class Foo[T:! type]; // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%T.loc8_11.1: type) { // CHECK:STDOUT: %T.loc8_11.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_11.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_11.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_11.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_11.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/no_prelude/import_access.carbon b/toolchain/check/testdata/class/no_prelude/import_access.carbon index d6a1b5a7d70d..e4388b6e5f1a 100644 --- a/toolchain/check/testdata/class/no_prelude/import_access.carbon +++ b/toolchain/check/testdata/class/no_prelude/import_access.carbon @@ -206,6 +206,7 @@ private class Redecl {} // CHECK:STDOUT: %Def: type = class_type @Def [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Def [concrete] // CHECK:STDOUT: %Def.val: %Def = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -223,8 +224,8 @@ private class Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Def = binding_pattern c -// CHECK:STDOUT: %.loc4: %Def = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc4: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Def = var c // CHECK:STDOUT: %Def.ref: type = name_ref Def, imports.%Test.Def [concrete = constants.%Def] @@ -319,6 +320,7 @@ private class Redecl {} // CHECK:STDOUT: %ForwardWithDef: type = class_type @ForwardWithDef [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ForwardWithDef [concrete] // CHECK:STDOUT: %ForwardWithDef.val: %ForwardWithDef = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -336,8 +338,8 @@ private class Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %ForwardWithDef = binding_pattern c -// CHECK:STDOUT: %.loc4: %ForwardWithDef = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc4: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %ForwardWithDef = var c // CHECK:STDOUT: %ForwardWithDef.ref: type = name_ref ForwardWithDef, imports.%Test.ForwardWithDef [concrete = constants.%ForwardWithDef] @@ -431,6 +433,7 @@ private class Redecl {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %Forward: type = class_type @Forward [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Forward [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -449,8 +452,8 @@ private class Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %ptr = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %ptr = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc4: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/class/no_prelude/indirect_import_member.carbon b/toolchain/check/testdata/class/no_prelude/indirect_import_member.carbon index ecb9dce05748..9b677342d45c 100644 --- a/toolchain/check/testdata/class/no_prelude/indirect_import_member.carbon +++ b/toolchain/check/testdata/class/no_prelude/indirect_import_member.carbon @@ -253,6 +253,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -274,8 +275,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -308,6 +309,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -329,8 +331,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -363,6 +365,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -384,8 +387,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -418,6 +421,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -443,8 +447,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -486,6 +490,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -511,8 +516,8 @@ var x: () = D.C.F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/class/no_prelude/method_access.carbon b/toolchain/check/testdata/class/no_prelude/method_access.carbon index bb1148cded4e..d439b08906cb 100644 --- a/toolchain/check/testdata/class/no_prelude/method_access.carbon +++ b/toolchain/check/testdata/class/no_prelude/method_access.carbon @@ -27,6 +27,7 @@ fn G(x: X) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %X: type = class_type @X [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %X [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -43,8 +44,8 @@ fn G(x: X) { // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.patt: %X = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %X = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %X = value_param call_param0 // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -54,8 +55,8 @@ fn G(x: X) { // CHECK:STDOUT: // CHECK:STDOUT: class @X { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %X = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %X = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %X = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%X [concrete = constants.%X] diff --git a/toolchain/check/testdata/class/no_prelude/syntactic_merge.carbon b/toolchain/check/testdata/class/no_prelude/syntactic_merge.carbon index b9722eccf930..2b53931fe572 100644 --- a/toolchain/check/testdata/class/no_prelude/syntactic_merge.carbon +++ b/toolchain/check/testdata/class/no_prelude/syntactic_merge.carbon @@ -187,7 +187,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Foo: type = class_type @Foo, @Foo(%a) [symbolic] @@ -207,25 +208,25 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc8: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc8: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc8: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc8: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc8: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc8: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc10: %Bar.type = class_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt.loc11: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc11: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc10: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc10_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc10_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc11: %Bar.type = class_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt.loc11: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc11: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc11: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc11: %C = bind_symbolic_name a, 0 [symbolic = %a.loc10_11.2 (constants.%a)] @@ -243,7 +244,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc7_11.1: %C) { // CHECK:STDOUT: %a.loc7_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -259,7 +260,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Bar(%a.loc10_11.1: %C) { // CHECK:STDOUT: %a.loc10_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc10_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc10: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc10: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -290,7 +291,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Foo: type = class_type @Foo, @Foo(%a) [symbolic] @@ -303,13 +305,13 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc7: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6_17.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_17.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc7: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_17.2 (constants.%a)] @@ -327,7 +329,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc6_17.1: %C) { // CHECK:STDOUT: %a.loc6_17.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_17.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -353,7 +355,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.39e446.1: type = generic_class_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.80461b.1: %Foo.type.39e446.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.39e446.2: type = generic_class_type @Foo.2 [concrete] @@ -368,13 +371,13 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.39e446.1 = class_decl @Foo.1 [concrete = constants.%Foo.generic.80461b.1] { -// CHECK:STDOUT: %a.patt.loc6_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.39e446.2 = class_decl @Foo.2 [concrete = constants.%Foo.generic.80461b.2] { -// CHECK:STDOUT: %a.patt.loc14_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc14_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc14_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc14_11.2 (constants.%a)] @@ -392,14 +395,14 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.1(%a.loc6_11.1: %C) { // CHECK:STDOUT: %a.loc6_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.2(%a.loc14_11.1: %C) { // CHECK:STDOUT: %a.loc14_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc14_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc14_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc14_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -430,7 +433,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Foo: type = class_type @Foo, @Foo(%a) [symbolic] @@ -443,13 +447,13 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc7: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc7: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] @@ -467,7 +471,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc6_11.1: %C) { // CHECK:STDOUT: %a.loc6_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -493,7 +497,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Bar.type: type = generic_class_type @Bar [concrete] @@ -511,13 +516,13 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc7_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = class_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt.loc8_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc8_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc8_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc8_11.2 (constants.%a)] @@ -535,14 +540,14 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc7_11.1: %C) { // CHECK:STDOUT: %a.loc7_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Bar(%a.loc8_11.1: %C) { // CHECK:STDOUT: %a.loc8_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc8_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc8_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc8_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } @@ -564,7 +569,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Foo: type = class_type @Foo, @Foo(%a) [symbolic] @@ -592,13 +598,13 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %default.import.loc2_24.1 = import // CHECK:STDOUT: %default.import.loc2_24.2 = import // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc4: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc4: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %a.loc4: %C = bind_symbolic_name a, 0 [symbolic = %a.1 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = class_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt.loc5: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc5: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] // CHECK:STDOUT: %a.loc5: %C = bind_symbolic_name a, 0 [symbolic = %a.1 (constants.%a)] @@ -614,7 +620,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(imports.%Main.import_ref.f97b44.1: %C) { // CHECK:STDOUT: %a.1: %C = bind_symbolic_name a, 0 [symbolic = %a.1 (constants.%a)] -// CHECK:STDOUT: %a.patt.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -630,7 +636,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Bar(imports.%Main.import_ref.f97b44.2: %C) { // CHECK:STDOUT: %a.1: %C = bind_symbolic_name a, 0 [symbolic = %a.1 (constants.%a)] -// CHECK:STDOUT: %a.patt.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -661,11 +667,12 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.39e446.1: type = generic_class_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.80461b.1: %Foo.type.39e446.1 = struct_value () [concrete] // CHECK:STDOUT: %b: %C = bind_symbolic_name b, 0 [symbolic] -// CHECK:STDOUT: %b.patt: %C = symbolic_binding_pattern b, 0 [symbolic] +// CHECK:STDOUT: %b.patt: %pattern_type = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %Foo.type.39e446.2: type = generic_class_type @Foo.2 [concrete] // CHECK:STDOUT: %Foo.generic.80461b.2: %Foo.type.39e446.2 = struct_value () [concrete] // CHECK:STDOUT: %Foo.67ab7c.2: type = class_type @Foo.2, @Foo.2(%b) [symbolic] @@ -681,13 +688,13 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.39e446.1 = class_decl @Foo.1 [concrete = constants.%Foo.generic.80461b.1] { -// CHECK:STDOUT: %a.patt.loc7_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.39e446.2 = class_decl @Foo.2 [concrete = constants.%Foo.generic.80461b.2] { -// CHECK:STDOUT: %b.patt.loc15_11.1: %C = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_11.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc15_11.1: %pattern_type = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_11.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %b.loc15_11.1: %C = bind_symbolic_name b, 0 [symbolic = %b.loc15_11.2 (constants.%b)] @@ -705,14 +712,14 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.1(%a.loc7_11.1: %C) { // CHECK:STDOUT: %a.loc7_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.2(%b.loc15_11.1: %C) { // CHECK:STDOUT: %b.loc15_11.2: %C = bind_symbolic_name b, 0 [symbolic = %b.loc15_11.2 (constants.%b)] -// CHECK:STDOUT: %b.patt.loc15_11.2: %C = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_11.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc15_11.2: %pattern_type = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_11.2 (constants.%b.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -743,7 +750,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.39e446.1: type = generic_class_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.80461b.1: %Foo.type.39e446.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.39e446.2: type = generic_class_type @Foo.2 [concrete] @@ -761,13 +769,13 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.39e446.1 = class_decl @Foo.1 [concrete = constants.%Foo.generic.80461b.1] { -// CHECK:STDOUT: %a.patt.loc7_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.39e446.2 = class_decl @Foo.2 [concrete = constants.%Foo.generic.80461b.2] { -// CHECK:STDOUT: %a.patt.loc15_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc15_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_11.2 (constants.%a)] @@ -785,14 +793,14 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.1(%a.loc7_11.1: %C) { // CHECK:STDOUT: %a.loc7_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.2(%a.loc15_11.1: %C) { // CHECK:STDOUT: %a.loc15_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc15_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -823,7 +831,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.39e446.1: type = generic_class_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.80461b.1: %Foo.type.39e446.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.39e446.2: type = generic_class_type @Foo.2 [concrete] @@ -841,13 +850,13 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.39e446.1 = class_decl @Foo.1 [concrete = constants.%Foo.generic.80461b.1] { -// CHECK:STDOUT: %a.patt.loc7_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.39e446.2 = class_decl @Foo.2 [concrete = constants.%Foo.generic.80461b.2] { -// CHECK:STDOUT: %a.patt.loc15_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc15_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_11.2 (constants.%a)] @@ -865,14 +874,14 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.1(%a.loc7_11.1: %C) { // CHECK:STDOUT: %a.loc7_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.2(%a.loc15_11.1: %C) { // CHECK:STDOUT: %a.loc15_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc15_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -903,7 +912,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -915,7 +925,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc6_11.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6_11.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] @@ -933,7 +943,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(%a.loc6_11.1: %C) { // CHECK:STDOUT: %a.loc6_11.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6_11.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } @@ -950,7 +960,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_class_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Foo: type = class_type @Foo, @Foo(%a) [symbolic] @@ -974,7 +985,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc6: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc6: %C = bind_symbolic_name a, 0 [symbolic = %a.1 (constants.%a)] @@ -990,7 +1001,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo(imports.%Main.import_ref.f97: %C) { // CHECK:STDOUT: %a.1: %C = bind_symbolic_name a, 0 [symbolic = %a.1 (constants.%a)] -// CHECK:STDOUT: %a.patt.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.1 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1017,7 +1028,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %const: type = const_type %C [concrete] // CHECK:STDOUT: %a: %const = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %const = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %const [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.39e446.1: type = generic_class_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.80461b.1: %Foo.type.39e446.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.39e446.2: type = generic_class_type @Foo.2 [concrete] @@ -1032,7 +1044,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.39e446.1 = class_decl @Foo.1 [concrete = constants.%Foo.generic.80461b.1] { -// CHECK:STDOUT: %a.patt.loc6_11.1: %const = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %const [concrete = constants.%const] { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -1041,7 +1053,7 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %a.loc6_11.1: %const = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc18: %Foo.type.39e446.2 = class_decl @Foo.2 [concrete = constants.%Foo.generic.80461b.2] { -// CHECK:STDOUT: %a.patt.loc18_11.1: %const = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc18_11.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_11.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18: type = splice_block %const.loc18_15 [concrete = constants.%const] { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -1063,14 +1075,14 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.1(%a.loc6_11.1: %const) { // CHECK:STDOUT: %a.loc6_11.2: %const = bind_symbolic_name a, 0 [symbolic = %a.loc6_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6_11.2: %const = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Foo.2(%a.loc18_11.1: %const) { // CHECK:STDOUT: %a.loc18_11.2: %const = bind_symbolic_name a, 0 [symbolic = %a.loc18_11.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc18_11.2: %const = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_11.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc18_11.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_11.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1101,6 +1113,8 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %empty_tuple.type [concrete] // CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] +// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %F.type.7c6384.1: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.d17bbc.1: %F.type.7c6384.1 = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %empty_tuple.type} [concrete] @@ -1116,9 +1130,9 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: } // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %F.decl: %F.type.7c6384.2 = fn_decl @F.2 [concrete = constants.%F.d17bbc.2] { -// CHECK:STDOUT: %self.patt: %ptr.11f = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.11f = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc17_11: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc17_11: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 // CHECK:STDOUT: %.loc17_26: type = splice_block %ptr [concrete = constants.%ptr.11f] { @@ -1134,9 +1148,9 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc5_8: %Base.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.7c6384.1 = fn_decl @F.1 [concrete = constants.%F.d17bbc.1] { -// CHECK:STDOUT: %self.patt: %ptr.11f = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.11f = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc7_8: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc7_8: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.11f = value_param call_param0 // CHECK:STDOUT: %.loc7_23: type = splice_block %ptr [concrete = constants.%ptr.11f] { diff --git a/toolchain/check/testdata/class/raw_self.carbon b/toolchain/check/testdata/class/raw_self.carbon index fa3e679dca9f..8ddd523e9bf8 100644 --- a/toolchain/check/testdata/class/raw_self.carbon +++ b/toolchain/check/testdata/class/raw_self.carbon @@ -27,12 +27,17 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] @@ -56,11 +61,11 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt.loc17_17: %ptr.e71 = binding_pattern self -// CHECK:STDOUT: %self.param_patt.loc17_21: %ptr.e71 = value_param_pattern %self.patt.loc17_17, call_param0 -// CHECK:STDOUT: %.loc17_12: auto = addr_pattern %self.param_patt.loc17_21 -// CHECK:STDOUT: %self.patt.loc17_30: %i32 = binding_pattern r#self -// CHECK:STDOUT: %self.param_patt.loc17_36: %i32 = value_param_pattern %self.patt.loc17_30, call_param1 +// CHECK:STDOUT: %self.patt.loc17_17: %pattern_type.796 = binding_pattern self +// CHECK:STDOUT: %self.param_patt.loc17_21: %pattern_type.796 = value_param_pattern %self.patt.loc17_17, call_param0 +// CHECK:STDOUT: %.loc17_12: %pattern_type.f6d = addr_pattern %self.param_patt.loc17_21 +// CHECK:STDOUT: %self.patt.loc17_30: %pattern_type.7ce = binding_pattern r#self +// CHECK:STDOUT: %self.param_patt.loc17_36: %pattern_type.7ce = value_param_pattern %self.patt.loc17_30, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc17_21: %ptr.e71 = value_param call_param0 // CHECK:STDOUT: %.loc17_27: type = splice_block %ptr.loc17 [concrete = constants.%ptr.e71] { @@ -76,12 +81,12 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: %self.loc17_30: %i32 = bind_name r#self, %self.param.loc17_36 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt.loc21_12: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt.loc21_16: %Class = value_param_pattern %self.patt.loc21_12, call_param0 -// CHECK:STDOUT: %self.patt.loc21_24: %i32 = binding_pattern r#self -// CHECK:STDOUT: %self.param_patt.loc21_30: %i32 = value_param_pattern %self.patt.loc21_24, call_param1 -// CHECK:STDOUT: %return.patt: %tuple.type.d07 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.d07 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt.loc21_12: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt.loc21_16: %pattern_type.761 = value_param_pattern %self.patt.loc21_12, call_param0 +// CHECK:STDOUT: %self.patt.loc21_24: %pattern_type.7ce = binding_pattern r#self +// CHECK:STDOUT: %self.param_patt.loc21_30: %pattern_type.7ce = value_param_pattern %self.patt.loc21_24, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.511 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.511 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc21_41: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc21_41: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -105,11 +110,11 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt.loc17_17: %ptr.e71 = binding_pattern self -// CHECK:STDOUT: %self.param_patt.loc17_21: %ptr.e71 = value_param_pattern %self.patt.loc17_17, call_param0 -// CHECK:STDOUT: %.loc17_12: auto = addr_pattern %self.param_patt.loc17_21 -// CHECK:STDOUT: %self.patt.loc17_30: %i32 = binding_pattern r#self -// CHECK:STDOUT: %self.param_patt.loc17_36: %i32 = value_param_pattern %self.patt.loc17_30, call_param1 +// CHECK:STDOUT: %self.patt.loc17_17: %pattern_type.796 = binding_pattern self +// CHECK:STDOUT: %self.param_patt.loc17_21: %pattern_type.796 = value_param_pattern %self.patt.loc17_17, call_param0 +// CHECK:STDOUT: %.loc17_12: %pattern_type.f6d = addr_pattern %self.param_patt.loc17_21 +// CHECK:STDOUT: %self.patt.loc17_30: %pattern_type.7ce = binding_pattern r#self +// CHECK:STDOUT: %self.param_patt.loc17_36: %pattern_type.7ce = value_param_pattern %self.patt.loc17_30, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc12_17: %ptr.e71 = value_param call_param0 // CHECK:STDOUT: %.loc12_23: type = splice_block %ptr.loc12 [concrete = constants.%ptr.e71] { @@ -125,12 +130,12 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: %self.loc12_26: %i32 = bind_name r#self, %self.param.loc12_32 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt.loc21_12: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt.loc21_16: %Class = value_param_pattern %self.patt.loc21_12, call_param0 -// CHECK:STDOUT: %self.patt.loc21_24: %i32 = binding_pattern r#self -// CHECK:STDOUT: %self.param_patt.loc21_30: %i32 = value_param_pattern %self.patt.loc21_24, call_param1 -// CHECK:STDOUT: %return.patt: %tuple.type.d07 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.d07 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt.loc21_12: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt.loc21_16: %pattern_type.761 = value_param_pattern %self.patt.loc21_12, call_param0 +// CHECK:STDOUT: %self.patt.loc21_24: %pattern_type.7ce = binding_pattern r#self +// CHECK:STDOUT: %self.param_patt.loc21_30: %pattern_type.7ce = value_param_pattern %self.patt.loc21_24, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.511 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.511 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc13_37: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc13_37: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/raw_self_type.carbon b/toolchain/check/testdata/class/raw_self_type.carbon index ee28269487e4..1c91d2343bb9 100644 --- a/toolchain/check/testdata/class/raw_self_type.carbon +++ b/toolchain/check/testdata/class/raw_self_type.carbon @@ -32,8 +32,11 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] // CHECK:STDOUT: %MemberNamedSelf: type = class_type @MemberNamedSelf [concrete] // CHECK:STDOUT: %Self: type = class_type @Self [concrete] +// CHECK:STDOUT: %pattern_type.356: type = pattern_type %MemberNamedSelf [concrete] +// CHECK:STDOUT: %pattern_type.c06: type = pattern_type %Self [concrete] // CHECK:STDOUT: %F.type.648: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.e97: %F.type.648 = struct_value () [concrete] // CHECK:STDOUT: } @@ -55,10 +58,10 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %MemberNamedSelf.decl: type = class_decl @MemberNamedSelf [concrete = constants.%MemberNamedSelf] {} {} // CHECK:STDOUT: %F.decl: %F.type.648 = fn_decl @F.2 [concrete = constants.%F.e97] { -// CHECK:STDOUT: %x.patt: %MemberNamedSelf = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %MemberNamedSelf = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %y.patt: %Self = binding_pattern y -// CHECK:STDOUT: %y.param_patt: %Self = value_param_pattern %y.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.356 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.356 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %y.patt: %pattern_type.c06 = binding_pattern y +// CHECK:STDOUT: %y.param_patt: %pattern_type.c06 = value_param_pattern %y.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc24: %MemberNamedSelf = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc24_25: type = name_ref Self, constants.%MemberNamedSelf [concrete = constants.%MemberNamedSelf] @@ -83,10 +86,10 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: class @MemberNamedSelf { // CHECK:STDOUT: %Self.decl: type = class_decl @Self [concrete = constants.%Self] {} {} // CHECK:STDOUT: %F.decl: %F.type.648 = fn_decl @F.2 [concrete = constants.%F.e97] { -// CHECK:STDOUT: %x.patt: %MemberNamedSelf = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %MemberNamedSelf = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %y.patt: %Self = binding_pattern y -// CHECK:STDOUT: %y.param_patt: %Self = value_param_pattern %y.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.356 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.356 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %y.patt: %pattern_type.c06 = binding_pattern y +// CHECK:STDOUT: %y.param_patt: %pattern_type.c06 = value_param_pattern %y.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc21: %MemberNamedSelf = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc21_11: type = name_ref Self, constants.%MemberNamedSelf [concrete = constants.%MemberNamedSelf] @@ -117,8 +120,8 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: fn @F.1() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Self.patt: %ptr.e71 = binding_pattern r#Self -// CHECK:STDOUT: %.loc13_5: %ptr.e71 = var_pattern %Self.patt +// CHECK:STDOUT: %Self.patt: %pattern_type.796 = binding_pattern r#Self +// CHECK:STDOUT: %.loc13_5: %pattern_type.796 = var_pattern %Self.patt // CHECK:STDOUT: } // CHECK:STDOUT: %Self.var: ref %ptr.e71 = var r#Self // CHECK:STDOUT: %.loc13_21: type = splice_block %ptr.loc13 [concrete = constants.%ptr.e71] { @@ -127,8 +130,8 @@ fn MemberNamedSelf.F(x: Self, y: r#Self) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Self: ref %ptr.e71 = bind_name r#Self, %Self.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %ptr.e71 = binding_pattern p -// CHECK:STDOUT: %.loc14_5: %ptr.e71 = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: %pattern_type.796 = binding_pattern p +// CHECK:STDOUT: %.loc14_5: %pattern_type.796 = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.e71 = var p // CHECK:STDOUT: %Self.ref.loc14_20: ref %ptr.e71 = name_ref r#Self, %Self diff --git a/toolchain/check/testdata/class/redeclaration.carbon b/toolchain/check/testdata/class/redeclaration.carbon index f49e89593e34..789dacfcb070 100644 --- a/toolchain/check/testdata/class/redeclaration.carbon +++ b/toolchain/check/testdata/class/redeclaration.carbon @@ -20,8 +20,10 @@ fn Class.F[self: Self](b: bool) {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -45,10 +47,10 @@ fn Class.F[self: Self](b: bool) {} // CHECK:STDOUT: %Class.decl.loc11: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Class.decl.loc13: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc17: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc17: type = name_ref Self, constants.%Class [concrete = constants.%Class] @@ -65,10 +67,10 @@ fn Class.F[self: Self](b: bool) {} // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc14: %Class = value_param call_param0 // CHECK:STDOUT: %Self.ref.loc14: type = name_ref Self, constants.%Class [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/reenter_scope.carbon b/toolchain/check/testdata/class/reenter_scope.carbon index 54d589d4e839..f84f663aec36 100644 --- a/toolchain/check/testdata/class/reenter_scope.carbon +++ b/toolchain/check/testdata/class/reenter_scope.carbon @@ -24,6 +24,7 @@ fn Class.F() -> i32 { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -48,8 +49,8 @@ fn Class.F() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -60,8 +61,8 @@ fn Class.F() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -69,8 +70,8 @@ fn Class.F() -> i32 { // CHECK:STDOUT: %return.loc12: ref %i32 = return_slot %return.param.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/reorder.carbon b/toolchain/check/testdata/class/reorder.carbon index cfa78fb15815..3bed5ca41763 100644 --- a/toolchain/check/testdata/class/reorder.carbon +++ b/toolchain/check/testdata/class/reorder.carbon @@ -24,6 +24,7 @@ class Class { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -65,8 +66,8 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -74,8 +75,8 @@ class Class { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/class/reorder_qualified.carbon b/toolchain/check/testdata/class/reorder_qualified.carbon index 4acd6e90a086..38836e127f9f 100644 --- a/toolchain/check/testdata/class/reorder_qualified.carbon +++ b/toolchain/check/testdata/class/reorder_qualified.carbon @@ -78,6 +78,7 @@ class A { // CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %i32 [concrete] // CHECK:STDOUT: %struct_type.a.ba9: type = struct_type {.a: %i32} [concrete] // CHECK:STDOUT: %complete_type.fd7: = complete_type_witness %struct_type.a.ba9 [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -93,18 +94,21 @@ class A { // CHECK:STDOUT: %bound_method.9a1: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %A.val: %A = struct_value (%int_1.5d2) [concrete] +// CHECK:STDOUT: %pattern_type.98e: type = pattern_type %B [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.b.a15: type = struct_type {.b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %Convert.bound.ef9: = bound_method %int_2.ecc, %Convert.956 [concrete] // CHECK:STDOUT: %bound_method.b92: = bound_method %int_2.ecc, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %B.val: %B = struct_value (%int_2.ef8) [concrete] +// CHECK:STDOUT: %pattern_type.6d8: type = pattern_type %C [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %struct_type.c.5b8: type = struct_type {.c: Core.IntLiteral} [concrete] // CHECK:STDOUT: %Convert.bound.b30: = bound_method %int_3.1ba, %Convert.956 [concrete] // CHECK:STDOUT: %bound_method.047: = bound_method %int_3.1ba, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_3.822: %i32 = int_value 3 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%int_3.822) [concrete] +// CHECK:STDOUT: %pattern_type.d58: type = pattern_type %D [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.d.3ea: type = struct_type {.d: Core.IntLiteral} [concrete] // CHECK:STDOUT: %Convert.bound.ac3: = bound_method %int_4.0c1, %Convert.956 [concrete] @@ -224,8 +228,8 @@ class A { // CHECK:STDOUT: fn @DF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %.loc29_7.1: %A = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %.loc29_7.1: %pattern_type.c10 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var a // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -244,8 +248,8 @@ class A { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %a: ref %A = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %B = binding_pattern b -// CHECK:STDOUT: %.loc30_7.1: %B = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.98e = binding_pattern b +// CHECK:STDOUT: %.loc30_7.1: %pattern_type.98e = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %B = var b // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] @@ -264,8 +268,8 @@ class A { // CHECK:STDOUT: %B.ref: type = name_ref B, @A.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %b: ref %B = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc31_7.1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.6d8 = binding_pattern c +// CHECK:STDOUT: %.loc31_7.1: %pattern_type.6d8 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] @@ -284,8 +288,8 @@ class A { // CHECK:STDOUT: %C.ref: type = name_ref C, @B.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d -// CHECK:STDOUT: %.loc32_7.1: %D = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.d58 = binding_pattern d +// CHECK:STDOUT: %.loc32_7.1: %pattern_type.d58 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %D = var d // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4.0c1] diff --git a/toolchain/check/testdata/class/scope.carbon b/toolchain/check/testdata/class/scope.carbon index f383591a9ac6..63842b421699 100644 --- a/toolchain/check/testdata/class/scope.carbon +++ b/toolchain/check/testdata/class/scope.carbon @@ -33,6 +33,7 @@ fn Run() { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.f1b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.1f2: %F.type.f1b = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -81,8 +82,8 @@ fn Run() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -94,8 +95,8 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type.f1b = fn_decl @F.1 [concrete = constants.%F.1f2] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -103,8 +104,8 @@ fn Run() { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -159,8 +160,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc26_3: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc26_3: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %F.ref.loc26: %F.type.b25 = name_ref F, file.%F.decl [concrete = constants.%F.c41] @@ -172,8 +173,8 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %i32 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc27_3: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc27_3: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/self.carbon b/toolchain/check/testdata/class/self.carbon index 32ba8c99b501..feba25d9996f 100644 --- a/toolchain/check/testdata/class/self.carbon +++ b/toolchain/check/testdata/class/self.carbon @@ -46,11 +46,15 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.e71: type = ptr_type %Class [concrete] +// CHECK:STDOUT: %pattern_type.796: type = pattern_type %ptr.e71 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] @@ -74,10 +78,10 @@ class Class { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -88,11 +92,11 @@ class Class { // CHECK:STDOUT: %return.loc11: ref %i32 = return_slot %return.param.loc11 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %ptr.e71 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.e71 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc15_12: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc15_12: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc15: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -109,10 +113,10 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -123,11 +127,11 @@ class Class { // CHECK:STDOUT: %return.loc5: ref %i32 = return_slot %return.param.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %ptr.e71 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.e71 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc15_12: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.796 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.796 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc15_12: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -177,6 +181,7 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -202,8 +207,8 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: %return.patt: = return_slot_pattern // CHECK:STDOUT: %return.param_patt: = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { diff --git a/toolchain/check/testdata/class/self_conversion.carbon b/toolchain/check/testdata/class/self_conversion.carbon index 19533b2d87e9..f6af8ee694d0 100644 --- a/toolchain/check/testdata/class/self_conversion.carbon +++ b/toolchain/check/testdata/class/self_conversion.carbon @@ -44,9 +44,13 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %complete_type.fd7: = complete_type_witness %struct_type.a [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] +// CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %SelfBase.type: type = fn_type @SelfBase [concrete] // CHECK:STDOUT: %SelfBase: %SelfBase.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.11f: type = ptr_type %Base [concrete] +// CHECK:STDOUT: %pattern_type.1b9: type = pattern_type %ptr.11f [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %AddrSelfBase.type: type = fn_type @AddrSelfBase [concrete] // CHECK:STDOUT: %AddrSelfBase: %AddrSelfBase.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.b1e: type = struct_type {.base: %Base} [concrete] @@ -65,6 +69,7 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %ptr.404: type = ptr_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.605: type = pattern_type %ptr.404 [concrete] // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -89,10 +94,10 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %SelfBase.decl: %SelfBase.type = fn_decl @SelfBase [concrete = constants.%SelfBase] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc22: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc22: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -103,9 +108,9 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %return.loc22: ref %i32 = return_slot %return.param.loc22 // CHECK:STDOUT: } // CHECK:STDOUT: %AddrSelfBase.decl: %AddrSelfBase.type = fn_decl @AddrSelfBase [concrete = constants.%AddrSelfBase] { -// CHECK:STDOUT: %self.patt: %ptr.11f = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.11f = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc26_25: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc26_25: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc26: %ptr.11f = value_param call_param0 // CHECK:STDOUT: %.loc26_40: type = splice_block %ptr.loc26 [concrete = constants.%ptr.11f] { @@ -115,10 +120,10 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %self.loc26: %ptr.11f = bind_name self, %self.param.loc26 // CHECK:STDOUT: } // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] { -// CHECK:STDOUT: %p.patt: %ptr.404 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.404 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.605 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.605 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -151,10 +156,10 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc16: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %SelfBase.decl: %SelfBase.type = fn_decl @SelfBase [concrete = constants.%SelfBase] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc18: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -165,9 +170,9 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: %return.loc18: ref %i32 = return_slot %return.param.loc18 // CHECK:STDOUT: } // CHECK:STDOUT: %AddrSelfBase.decl: %AddrSelfBase.type = fn_decl @AddrSelfBase [concrete = constants.%AddrSelfBase] { -// CHECK:STDOUT: %self.patt: %ptr.11f = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.11f = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc26_25: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.1b9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.1b9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc26_25: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param.loc19: %ptr.11f = value_param call_param0 // CHECK:STDOUT: %.loc19: type = splice_block %ptr.loc19 [concrete = constants.%ptr.11f] { diff --git a/toolchain/check/testdata/class/self_type.carbon b/toolchain/check/testdata/class/self_type.carbon index b43836e1dec9..f2a80ca179e6 100644 --- a/toolchain/check/testdata/class/self_type.carbon +++ b/toolchain/check/testdata/class/self_type.carbon @@ -26,8 +26,10 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] @@ -54,10 +56,10 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -71,10 +73,10 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Class = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Class = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.761 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.761 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -85,8 +87,8 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: %return.loc12: ref %i32 = return_slot %return.param.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %Class = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Class = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.761 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.761 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc13: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %return.param: ref %Class = out_param call_param0 @@ -125,8 +127,8 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: fn @Make() -> %return.param: %Class { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %Class = binding_pattern s -// CHECK:STDOUT: %.loc14: %Class = var_pattern %s.patt +// CHECK:STDOUT: %s.patt: %pattern_type.761 = binding_pattern s +// CHECK:STDOUT: %.loc14: %pattern_type.761 = var_pattern %s.patt // CHECK:STDOUT: } // CHECK:STDOUT: %Self.ref.loc14: type = name_ref Self, constants.%Class [concrete = constants.%Class] // CHECK:STDOUT: %s: ref %Class = bind_name s, %return diff --git a/toolchain/check/testdata/class/static_method.carbon b/toolchain/check/testdata/class/static_method.carbon index 182ac548c690..d1130a212f07 100644 --- a/toolchain/check/testdata/class/static_method.carbon +++ b/toolchain/check/testdata/class/static_method.carbon @@ -23,12 +23,14 @@ fn Run() -> i32 { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -48,8 +50,8 @@ fn Run() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -62,8 +64,8 @@ fn Run() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class @Class { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -84,8 +86,8 @@ fn Run() -> i32 { // CHECK:STDOUT: fn @Run() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Class = binding_pattern c -// CHECK:STDOUT: %.loc16: %Class = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.761 = binding_pattern c +// CHECK:STDOUT: %.loc16: %pattern_type.761 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Class = var c // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] diff --git a/toolchain/check/testdata/class/syntactic_merge_literal.carbon b/toolchain/check/testdata/class/syntactic_merge_literal.carbon index c9447303dfd5..e7047d398ef4 100644 --- a/toolchain/check/testdata/class/syntactic_merge_literal.carbon +++ b/toolchain/check/testdata/class/syntactic_merge_literal.carbon @@ -37,7 +37,8 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %a: %i32 = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %i32 = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.506: type = class_type @C, @C(%a) [symbolic] @@ -58,7 +59,8 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %int_1000.1b6: %i32 = int_value 1000 [concrete] // CHECK:STDOUT: %C.262: type = class_type @C, @C(%int_1000.1b6) [concrete] // CHECK:STDOUT: %b: %C.262 = bind_symbolic_name b, 0 [symbolic] -// CHECK:STDOUT: %b.patt: %C.262 = symbolic_binding_pattern b, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dfb: type = pattern_type %C.262 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %D.type: type = generic_class_type @D [concrete] // CHECK:STDOUT: %D.generic: %D.type = struct_value () [concrete] // CHECK:STDOUT: %D: type = class_type @D, @D(%b) [symbolic] @@ -81,7 +83,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %a.patt.loc4_9.1: %i32 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_9.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc4_9.1: %pattern_type.7ce = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_9.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -90,7 +92,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %a.loc4_9.1: %i32 = bind_symbolic_name a, 0 [symbolic = %a.loc4_9.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc5: %D.type = class_decl @D [concrete = constants.%D.generic] { -// CHECK:STDOUT: %b.patt.loc6: %C.262 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc6: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_20.1: type = splice_block %C.loc5 [concrete = constants.%C.262] { // CHECK:STDOUT: %C.ref.loc5: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] @@ -107,7 +109,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %b.loc5_9.1: %C.262 = bind_symbolic_name b, 0 [symbolic = %b.loc5_9.2 (constants.%b)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc6: %D.type = class_decl @D [concrete = constants.%D.generic] { -// CHECK:STDOUT: %b.patt.loc6: %C.262 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc6: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_20.1: type = splice_block %C.loc6 [concrete = constants.%C.262] { // CHECK:STDOUT: %C.ref.loc6: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] @@ -127,7 +129,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%a.loc4_9.1: %i32) { // CHECK:STDOUT: %a.loc4_9.2: %i32 = bind_symbolic_name a, 0 [symbolic = %a.loc4_9.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc4_9.2: %i32 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_9.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc4_9.2: %pattern_type.7ce = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_9.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -143,7 +145,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @D(%b.loc5_9.1: %C.262) { // CHECK:STDOUT: %b.loc5_9.2: %C.262 = bind_symbolic_name b, 0 [symbolic = %b.loc5_9.2 (constants.%b)] -// CHECK:STDOUT: %b.patt.loc5: %C.262 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc5: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5 (constants.%b.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -178,7 +180,8 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %a: %i32 = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %i32 = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.506: type = class_type @C, @C(%a) [symbolic] @@ -199,7 +202,8 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %int_1000.1b6: %i32 = int_value 1000 [concrete] // CHECK:STDOUT: %C.262: type = class_type @C, @C(%int_1000.1b6) [concrete] // CHECK:STDOUT: %b: %C.262 = bind_symbolic_name b, 0 [symbolic] -// CHECK:STDOUT: %b.patt: %C.262 = symbolic_binding_pattern b, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dfb: type = pattern_type %C.262 [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %D.type.bbd080.1: type = generic_class_type @D.1 [concrete] // CHECK:STDOUT: %D.generic.4e2319.1: %D.type.bbd080.1 = struct_value () [concrete] // CHECK:STDOUT: %D.type.bbd080.2: type = generic_class_type @D.2 [concrete] @@ -224,7 +228,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %a.patt.loc4_9.1: %i32 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_9.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc4_9.1: %pattern_type.7ce = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_9.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -233,7 +237,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %a.loc4_9.1: %i32 = bind_symbolic_name a, 0 [symbolic = %a.loc4_9.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc5: %D.type.bbd080.1 = class_decl @D.1 [concrete = constants.%D.generic.4e2319.1] { -// CHECK:STDOUT: %b.patt.loc5_9.1: %C.262 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5_9.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc5_9.1: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5_9.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_19.1: type = splice_block %C [concrete = constants.%C.262] { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] @@ -250,7 +254,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: %b.loc5_9.1: %C.262 = bind_symbolic_name b, 0 [symbolic = %b.loc5_9.2 (constants.%b)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl.loc13: %D.type.bbd080.2 = class_decl @D.2 [concrete = constants.%D.generic.4e2319.2] { -// CHECK:STDOUT: %b.patt.loc13_9.1: %C.262 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc13_9.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc13_9.1: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc13_9.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_20.1: type = splice_block %C [concrete = constants.%C.262] { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] @@ -270,7 +274,7 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%a.loc4_9.1: %i32) { // CHECK:STDOUT: %a.loc4_9.2: %i32 = bind_symbolic_name a, 0 [symbolic = %a.loc4_9.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc4_9.2: %i32 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_9.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc4_9.2: %pattern_type.7ce = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc4_9.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -286,14 +290,14 @@ class D(b:! C(1_000)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @D.1(%b.loc5_9.1: %C.262) { // CHECK:STDOUT: %b.loc5_9.2: %C.262 = bind_symbolic_name b, 0 [symbolic = %b.loc5_9.2 (constants.%b)] -// CHECK:STDOUT: %b.patt.loc5_9.2: %C.262 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5_9.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc5_9.2: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc5_9.2 (constants.%b.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @D.2(%b.loc13_9.1: %C.262) { // CHECK:STDOUT: %b.loc13_9.2: %C.262 = bind_symbolic_name b, 0 [symbolic = %b.loc13_9.2 (constants.%b)] -// CHECK:STDOUT: %b.patt.loc13_9.2: %C.262 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc13_9.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc13_9.2: %pattern_type.dfb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc13_9.2 (constants.%b.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/virtual_modifiers.carbon b/toolchain/check/testdata/class/virtual_modifiers.carbon index 6c7a85a977b3..9c709541ef58 100644 --- a/toolchain/check/testdata/class/virtual_modifiers.carbon +++ b/toolchain/check/testdata/class/virtual_modifiers.carbon @@ -239,7 +239,7 @@ base class Base(T:! type) { class Derived { extend base: Base(T1); - // CHECK:STDERR: fail_todo_impl_generic_base.carbon:[[@LINE+7]]:25: error: type `T1` of parameter 1 in redeclaration differs from previous parameter type `T` [RedeclParamDiffersType] + // CHECK:STDERR: fail_todo_impl_generic_base.carbon:[[@LINE+7]]:25: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: impl fn F[self: Self](t: T1); // CHECK:STDERR: ^~~~~ // CHECK:STDERR: fail_todo_impl_generic_base.carbon:[[@LINE-8]]:28: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -340,6 +340,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] +// CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type [concrete] @@ -347,6 +348,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %Abstract: type = class_type @Abstract [concrete] +// CHECK:STDOUT: %pattern_type.41e: type = pattern_type %Abstract [concrete] // CHECK:STDOUT: %J.type: type = fn_type @J [concrete] // CHECK:STDOUT: %J: %J.type = struct_value () [concrete] // CHECK:STDOUT: %K.type: type = fn_type @K [concrete] @@ -374,8 +376,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Base = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] @@ -393,16 +395,16 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { // CHECK:STDOUT: %J.decl: %J.type = fn_decl @J [concrete = constants.%J] { -// CHECK:STDOUT: %self.patt: %Abstract = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Abstract = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.41e = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.41e = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] // CHECK:STDOUT: %self: %Abstract = bind_name self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %K.decl: %K.type = fn_decl @K [concrete = constants.%K] { -// CHECK:STDOUT: %self.patt: %Abstract = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Abstract = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.41e = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.41e = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Abstract = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Abstract [concrete = constants.%Abstract] @@ -434,6 +436,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] // CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %H.type.dba: type = fn_type @H.1 [concrete] // CHECK:STDOUT: %H.bce: %H.type.dba = struct_value () [concrete] // CHECK:STDOUT: %.dce: = vtable (%H.bce) [concrete] @@ -478,8 +481,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %Base.ref: type = name_ref Base, imports.%Modifiers.Base [concrete = constants.%Base] // CHECK:STDOUT: %.loc7: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %H.decl: %H.type.dba = fn_decl @H.1 [concrete = constants.%H.bce] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -513,8 +516,8 @@ base class T1(T:! type) { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %Derived = binding_pattern d -// CHECK:STDOUT: %.loc12_3.1: %Derived = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.fb9 = binding_pattern d +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.fb9 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %Derived = var d // CHECK:STDOUT: %.loc12_30.1: %empty_struct_type = struct_literal () @@ -537,6 +540,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Base: type = class_type @Base [concrete] @@ -579,8 +583,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -623,6 +627,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] // CHECK:STDOUT: %struct_type.vptr: type = struct_type {.: %ptr.454} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.vptr [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Base [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -664,8 +669,8 @@ base class T1(T:! type) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %Base = binding_pattern v -// CHECK:STDOUT: %.loc7_3.1: %Base = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type = binding_pattern v +// CHECK:STDOUT: %.loc7_3.1: %pattern_type = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %Base = var v // CHECK:STDOUT: %.loc7_28.1: %empty_struct_type = struct_literal () @@ -687,6 +692,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %A1: type = class_type @A1 [concrete] +// CHECK:STDOUT: %pattern_type.ddb: type = pattern_type %A1 [concrete] // CHECK:STDOUT: %F.type.13a: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.df5: %F.type.13a = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -695,6 +701,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %A2: type = class_type @A2 [concrete] // CHECK:STDOUT: %A2.elem: type = unbound_element_type %A2, %A1 [concrete] +// CHECK:STDOUT: %pattern_type.b21: type = pattern_type %A2 [concrete] // CHECK:STDOUT: %F.type.4ae: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.1d5: %F.type.4ae = struct_value () [concrete] // CHECK:STDOUT: %.943: = vtable (%F.1d5) [concrete] @@ -722,8 +729,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @A1 { // CHECK:STDOUT: %F.decl: %F.type.13a = fn_decl @F.1 [concrete = constants.%F.df5] { -// CHECK:STDOUT: %self.patt: %A1 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %A1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.ddb = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.ddb = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %A1 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A1 [concrete = constants.%A1] @@ -743,8 +750,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %A1.ref: type = name_ref A1, file.%A1.decl [concrete = constants.%A1] // CHECK:STDOUT: %.loc9: %A2.elem = base_decl %A1.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.4ae = fn_decl @F.2 [concrete = constants.%F.1d5] { -// CHECK:STDOUT: %self.patt: %A2 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %A2 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.b21 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.b21 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %A2 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%A2 [concrete = constants.%A2] @@ -771,6 +778,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %B1: type = class_type @B1 [concrete] +// CHECK:STDOUT: %pattern_type.e47: type = pattern_type %B1 [concrete] // CHECK:STDOUT: %F.type.e4c: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.8f5: %F.type.e4c = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -779,6 +787,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %B2: type = class_type @B2 [concrete] // CHECK:STDOUT: %B2.elem: type = unbound_element_type %B2, %B1 [concrete] +// CHECK:STDOUT: %pattern_type.b19: type = pattern_type %B2 [concrete] // CHECK:STDOUT: %F.type.b26: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.d48: %F.type.b26 = struct_value () [concrete] // CHECK:STDOUT: %.579: = vtable (%F.d48) [concrete] @@ -786,6 +795,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.5ac: = complete_type_witness %struct_type.base.508 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %B2 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type.c29: type = fn_type @F.3 [concrete] // CHECK:STDOUT: %F.437: %F.type.c29 = struct_value () [concrete] // CHECK:STDOUT: %.5f6: = vtable (%F.437) [concrete] @@ -822,8 +832,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @B1 { // CHECK:STDOUT: %F.decl: %F.type.e4c = fn_decl @F.1 [concrete = constants.%F.8f5] { -// CHECK:STDOUT: %self.patt: %B1 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %B1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.e47 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.e47 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %B1 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B1 [concrete = constants.%B1] @@ -843,8 +853,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %B1.ref: type = name_ref B1, file.%B1.decl [concrete = constants.%B1] // CHECK:STDOUT: %.loc9: %B2.elem = base_decl %B1.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.b26 = fn_decl @F.2 [concrete = constants.%F.d48] { -// CHECK:STDOUT: %self.patt: %B2 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %B2 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.b19 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.b19 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %B2 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%B2 [concrete = constants.%B2] @@ -867,8 +877,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %B2.ref: type = name_ref B2, file.%B2.decl [concrete = constants.%B2] // CHECK:STDOUT: %.loc14: %C.elem = base_decl %B2.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.c29 = fn_decl @F.3 [concrete = constants.%F.437] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -896,8 +906,8 @@ base class T1(T:! type) { // CHECK:STDOUT: fn @Use() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b1.patt: %B1 = binding_pattern b1 -// CHECK:STDOUT: %.loc19_3.1: %B1 = var_pattern %b1.patt +// CHECK:STDOUT: %b1.patt: %pattern_type.e47 = binding_pattern b1 +// CHECK:STDOUT: %.loc19_3.1: %pattern_type.e47 = var_pattern %b1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b1.var: ref %B1 = var b1 // CHECK:STDOUT: %.loc19_17.1: %empty_struct_type = struct_literal () @@ -910,8 +920,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %B1.ref: type = name_ref B1, file.%B1.decl [concrete = constants.%B1] // CHECK:STDOUT: %b1: ref %B1 = bind_name b1, %b1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b2.patt: %B2 = binding_pattern b2 -// CHECK:STDOUT: %.loc20_3.1: %B2 = var_pattern %b2.patt +// CHECK:STDOUT: %b2.patt: %pattern_type.b19 = binding_pattern b2 +// CHECK:STDOUT: %.loc20_3.1: %pattern_type.b19 = var_pattern %b2.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b2.var: ref %B2 = var b2 // CHECK:STDOUT: %.loc20_26.1: %empty_struct_type = struct_literal () @@ -928,8 +938,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %B2.ref: type = name_ref B2, file.%B2.decl [concrete = constants.%B2] // CHECK:STDOUT: %b2: ref %B2 = bind_name b2, %b2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc21_3.1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc21_3.1: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc21_33.1: %empty_struct_type = struct_literal () @@ -956,6 +966,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type [concrete] @@ -982,8 +993,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -1008,6 +1019,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %F.type.7c6: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.d17: %F.type.7c6 = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -1016,6 +1028,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.cf7: = complete_type_witness %struct_type.vptr.m1.m2 [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -1069,8 +1082,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc6: %Base.elem = field_decl m2, element2 [concrete] // CHECK:STDOUT: %F.decl: %F.type.7c6 = fn_decl @F.1 [concrete = constants.%F.d17] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Base = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] @@ -1093,8 +1106,8 @@ base class T1(T:! type) { // CHECK:STDOUT: fn @F.2() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %i32 = binding_pattern i -// CHECK:STDOUT: %.loc12_3.1: %i32 = var_pattern %i.patt +// CHECK:STDOUT: %i.patt: %pattern_type.7ce = binding_pattern i +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.7ce = var_pattern %i.patt // CHECK:STDOUT: } // CHECK:STDOUT: %i.var: ref %i32 = var i // CHECK:STDOUT: %int_3.loc12: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] @@ -1111,8 +1124,8 @@ base class T1(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %i: ref %i32 = bind_name i, %i.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b1.patt: %Base = binding_pattern b1 -// CHECK:STDOUT: %.loc14_3.1: %Base = var_pattern %b1.patt +// CHECK:STDOUT: %b1.patt: %pattern_type.bcc = binding_pattern b1 +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.bcc = var_pattern %b1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b1.var: ref %Base = var b1 // CHECK:STDOUT: %i.ref.loc14_25: ref %i32 = name_ref i, %i @@ -1133,8 +1146,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %Base.ref.loc14: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %b1: ref %Base = bind_name b1, %b1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b2.patt: %Base = binding_pattern b2 -// CHECK:STDOUT: %.loc15_3.1: %Base = var_pattern %b2.patt +// CHECK:STDOUT: %b2.patt: %pattern_type.bcc = binding_pattern b2 +// CHECK:STDOUT: %.loc15_3.1: %pattern_type.bcc = var_pattern %b2.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b2.var: ref %Base = var b2 // CHECK:STDOUT: %int_3.loc15: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] @@ -1186,6 +1199,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -1225,8 +1239,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc8: %Derived.elem = base_decl %Base.ref, element1 [concrete] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -1251,6 +1265,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %AbstractBase: type = class_type @AbstractBase [concrete] +// CHECK:STDOUT: %pattern_type.27c: type = pattern_type %AbstractBase [concrete] // CHECK:STDOUT: %F.type.85b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.6e9: %F.type.85b = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -1263,6 +1278,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.2d3: = complete_type_witness %struct_type.base.efd [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %AbstractIntermediate [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %F.type.5da: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.fa3: %F.type.5da = struct_value () [concrete] // CHECK:STDOUT: %.88d: = vtable (%F.fa3) [concrete] @@ -1292,8 +1308,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @AbstractBase { // CHECK:STDOUT: %F.decl: %F.type.85b = fn_decl @F.1 [concrete = constants.%F.6e9] { -// CHECK:STDOUT: %self.patt: %AbstractBase = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AbstractBase = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.27c = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.27c = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AbstractBase = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%AbstractBase [concrete = constants.%AbstractBase] @@ -1328,8 +1344,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %AbstractIntermediate.ref: type = name_ref AbstractIntermediate, file.%AbstractIntermediate.decl [concrete = constants.%AbstractIntermediate] // CHECK:STDOUT: %.loc13: %Derived.elem = base_decl %AbstractIntermediate.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.5da = fn_decl @F.2 [concrete = constants.%F.fa3] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -1356,6 +1372,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %VirtualBase: type = class_type @VirtualBase [concrete] +// CHECK:STDOUT: %pattern_type.ad4: type = pattern_type %VirtualBase [concrete] // CHECK:STDOUT: %F.type.e62: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.3e7: %F.type.e62 = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -1368,6 +1385,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.f09: = complete_type_witness %struct_type.base.61e [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %VirtualIntermediate [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %F.type.5da: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.fa3: %F.type.5da = struct_value () [concrete] // CHECK:STDOUT: %.88d: = vtable (%F.fa3) [concrete] @@ -1397,8 +1415,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @VirtualBase { // CHECK:STDOUT: %F.decl: %F.type.e62 = fn_decl @F.1 [concrete = constants.%F.3e7] { -// CHECK:STDOUT: %self.patt: %VirtualBase = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %VirtualBase = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.ad4 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.ad4 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %VirtualBase = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%VirtualBase [concrete = constants.%VirtualBase] @@ -1433,8 +1451,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %VirtualIntermediate.ref: type = name_ref VirtualIntermediate, file.%VirtualIntermediate.decl [concrete = constants.%VirtualIntermediate] // CHECK:STDOUT: %.loc13: %Derived.elem = base_decl %VirtualIntermediate.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.5da = fn_decl @F.2 [concrete = constants.%F.fa3] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -1461,6 +1479,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Base: type = class_type @Base [concrete] +// CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %F.type.7c6: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.d17: %F.type.7c6 = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -1469,8 +1488,10 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.5da: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.fa3: %F.type.5da = struct_value () [concrete] // CHECK:STDOUT: %.88d: = vtable (%F.fa3) [concrete] @@ -1499,8 +1520,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %F.decl: %F.type.7c6 = fn_decl @F.1 [concrete = constants.%F.d17] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Base = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] @@ -1520,10 +1541,10 @@ base class T1(T:! type) { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc9: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.5da = fn_decl @F.2 [concrete = constants.%F.fa3] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %v.param_patt: %i32 = value_param_pattern %v.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %v.param_patt: %pattern_type.7ce = value_param_pattern %v.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -1563,10 +1584,13 @@ base class T1(T:! type) { // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.e40: type = facet_type <@ImplicitAs, @ImplicitAs(%T1)> [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness file.%ImplicitAs.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.682: type = pattern_type %T2 [concrete] +// CHECK:STDOUT: %pattern_type.28b: type = pattern_type %T1 [concrete] // CHECK:STDOUT: %Convert.type.c41: type = fn_type @Convert.2 [concrete] // CHECK:STDOUT: %Convert.f35: %Convert.type.c41 = struct_value () [concrete] // CHECK:STDOUT: %T1.val: %T1 = struct_value () [concrete] // CHECK:STDOUT: %Base: type = class_type @Base [concrete] +// CHECK:STDOUT: %pattern_type.bcc: type = pattern_type %Base [concrete] // CHECK:STDOUT: %F.type.7c6: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.d17: %F.type.7c6 = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -1575,6 +1599,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %complete_type.513: = complete_type_witness %struct_type.vptr [concrete] // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] // CHECK:STDOUT: %F.type.5da: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.fa3: %F.type.5da = struct_value () [concrete] // CHECK:STDOUT: %.88d: = vtable (%F.fa3) [concrete] @@ -1617,10 +1642,10 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %T2.ref as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.c41 = fn_decl @Convert.2 [concrete = constants.%Convert.f35] { -// CHECK:STDOUT: %self.patt: %T2 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %T2 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %T1 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %T1 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.682 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.682 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.28b = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.28b = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T1.ref: type = name_ref T1, file.%T1.decl [concrete = constants.%T1] // CHECK:STDOUT: %self.param: %T2 = value_param call_param0 @@ -1656,10 +1681,10 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @Base { // CHECK:STDOUT: %F.decl: %F.type.7c6 = fn_decl @F.1 [concrete = constants.%F.d17] { -// CHECK:STDOUT: %self.patt: %Base = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %T1 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %T1 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.bcc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.bcc = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.28b = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.28b = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T1.ref: type = name_ref T1, file.%T1.decl [concrete = constants.%T1] // CHECK:STDOUT: %self.param: %Base = value_param call_param0 @@ -1684,10 +1709,10 @@ base class T1(T:! type) { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc21: %Derived.elem = base_decl %Base.ref, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.5da = fn_decl @F.2 [concrete = constants.%F.fa3] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %T2 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %T2 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.682 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.682 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T2.ref: type = name_ref T2, file.%T2.decl [concrete = constants.%T2] // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 @@ -1729,10 +1754,13 @@ base class T1(T:! type) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Base.type: type = generic_class_type @Base [concrete] // CHECK:STDOUT: %Base.generic: %Base.type = struct_value () [concrete] // CHECK:STDOUT: %Base.370: type = class_type @Base, @Base(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.9f7: type = pattern_type %Base.370 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.f17: type = fn_type @F.1, @Base(%T) [symbolic] // CHECK:STDOUT: %F.e26: %F.type.f17 = struct_value () [symbolic] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -1745,6 +1773,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %F.d25: %F.type.d82 = struct_value () [concrete] // CHECK:STDOUT: %.611: = vtable (%F.d25) [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Base.ea5 [concrete] +// CHECK:STDOUT: %pattern_type.fb9: type = pattern_type %Derived [concrete] +// CHECK:STDOUT: %pattern_type.28b: type = pattern_type %T1 [concrete] // CHECK:STDOUT: %F.type.5da: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.fa3: %F.type.5da = struct_value () [concrete] // CHECK:STDOUT: %.88d: = vtable (%F.fa3) [concrete] @@ -1769,7 +1799,7 @@ base class T1(T:! type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %T1.decl: type = class_decl @T1 [concrete = constants.%T1] {} {} // CHECK:STDOUT: %Base.decl: %Base.type = class_decl @Base [concrete = constants.%Base.generic] { -// CHECK:STDOUT: %T.patt.loc7_17.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_17.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc7_17.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_17.2 (constants.%T)] // CHECK:STDOUT: } @@ -1787,7 +1817,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Base(%T.loc7_17.1: type) { // CHECK:STDOUT: %T.loc7_17.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_17.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_17.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.type: type = fn_type @F.1, @Base(%T.loc7_17.2) [symbolic = %F.type (constants.%F.type.f17)] @@ -1796,10 +1826,10 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @Base.%F.type (%F.type.f17) = fn_decl @F.1 [symbolic = @Base.%F (constants.%F.e26)] { -// CHECK:STDOUT: %self.patt: @F.1.%Base (%Base.370) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Base (%Base.370) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %t.patt: @F.1.%T (%T) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.1.%T (%T) = value_param_pattern %t.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type.loc8_16 (%pattern_type.9f7) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type.loc8_16 (%pattern_type.9f7) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %t.patt: @F.1.%pattern_type.loc8_28 (%pattern_type.7dc) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.1.%pattern_type.loc8_28 (%pattern_type.7dc) = value_param_pattern %t.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Base (%Base.370) = value_param call_param0 // CHECK:STDOUT: %.loc8_22.1: type = splice_block %Self.ref [symbolic = %Base (constants.%Base.370)] { @@ -1830,10 +1860,10 @@ base class T1(T:! type) { // CHECK:STDOUT: %Base: type = class_type @Base, @Base(constants.%T1) [concrete = constants.%Base.ea5] // CHECK:STDOUT: %.loc12: %Derived.elem = base_decl %Base, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type.5da = fn_decl @F.2 [concrete = constants.%F.fa3] { -// CHECK:STDOUT: %self.patt: %Derived = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Derived = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %t.patt: %T1 = binding_pattern t -// CHECK:STDOUT: %t.param_patt: %T1 = value_param_pattern %t.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.fb9 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb9 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %t.patt: %pattern_type.28b = binding_pattern t +// CHECK:STDOUT: %t.param_patt: %pattern_type.28b = value_param_pattern %t.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Derived = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Derived [concrete = constants.%Derived] @@ -1859,6 +1889,8 @@ base class T1(T:! type) { // CHECK:STDOUT: generic virtual fn @F.1(@Base.%T.loc7_17.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %Base: type = class_type @Base, @Base(%T) [symbolic = %Base (constants.%Base.370)] +// CHECK:STDOUT: %pattern_type.loc8_16: type = pattern_type %Base [symbolic = %pattern_type.loc8_16 (constants.%pattern_type.9f7)] +// CHECK:STDOUT: %pattern_type.loc8_28: type = pattern_type %T [symbolic = %pattern_type.loc8_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: virtual fn(%self.param: @F.1.%Base (%Base.370), %t.param: @F.1.%T (%T)); // CHECK:STDOUT: } @@ -1873,6 +1905,8 @@ base class T1(T:! type) { // CHECK:STDOUT: specific @F.1(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %Base => constants.%Base.370 +// CHECK:STDOUT: %pattern_type.loc8_16 => constants.%pattern_type.9f7 +// CHECK:STDOUT: %pattern_type.loc8_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Base(@F.1.%T) {} @@ -1965,6 +1999,7 @@ base class T1(T:! type) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %T1: type = class_type @T1 [concrete] // CHECK:STDOUT: %ptr.87b: type = ptr_type %T1 [concrete] +// CHECK:STDOUT: %pattern_type.a36: type = pattern_type %ptr.87b [concrete] // CHECK:STDOUT: %F1.type.b96: type = fn_type @F1.1 [concrete] // CHECK:STDOUT: %F1.765: %F1.type.b96 = struct_value () [concrete] // CHECK:STDOUT: %ptr.454: type = ptr_type [concrete] @@ -1974,6 +2009,8 @@ base class T1(T:! type) { // CHECK:STDOUT: %T2: type = class_type @T2 [concrete] // CHECK:STDOUT: %T2.elem: type = unbound_element_type %T2, %T1 [concrete] // CHECK:STDOUT: %ptr.63e: type = ptr_type %T2 [concrete] +// CHECK:STDOUT: %pattern_type.fb8: type = pattern_type %ptr.63e [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %F1.type.b0d: type = fn_type @F1.2 [concrete] // CHECK:STDOUT: %F1.0ce: %F1.type.b0d = struct_value () [concrete] // CHECK:STDOUT: %.20a: = vtable (%F1.0ce) [concrete] @@ -2001,8 +2038,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @T1 { // CHECK:STDOUT: %F1.decl: %F1.type.b96 = fn_decl @F1.1 [concrete = constants.%F1.765] { -// CHECK:STDOUT: %self.patt: %ptr.87b = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.87b = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.a36 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.a36 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.87b = value_param call_param0 // CHECK:STDOUT: %.loc5: type = splice_block %ptr [concrete = constants.%ptr.87b] { @@ -2025,9 +2062,9 @@ base class T1(T:! type) { // CHECK:STDOUT: %T1.ref: type = name_ref T1, file.%T1.decl [concrete = constants.%T1] // CHECK:STDOUT: %.loc9: %T2.elem = base_decl %T1.ref, element0 [concrete] // CHECK:STDOUT: %F1.decl: %F1.type.b0d = fn_decl @F1.2 [concrete = constants.%F1.0ce] { -// CHECK:STDOUT: %self.patt: %ptr.63e = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.63e = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc17_14: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.fb8 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.fb8 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc17_14: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.63e = value_param call_param0 // CHECK:STDOUT: %.loc17_29: type = splice_block %ptr [concrete = constants.%ptr.63e] { @@ -2057,8 +2094,10 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T1: type = class_type @T1 [concrete] +// CHECK:STDOUT: %pattern_type.28b: type = pattern_type %T1 [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -2083,9 +2122,9 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class @T1 { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %T1 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %T1 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %T.patt.loc9_28.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %self.patt: %pattern_type.28b = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.28b = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc9_28.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %T1 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%T1 [concrete = constants.%T1] @@ -2103,7 +2142,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic virtual fn @F(%T.loc9_28.2: type) { // CHECK:STDOUT: %T.loc9_28.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc9_28.1 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc9_28.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc9_28.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: virtual fn(%self.param: %T1); // CHECK:STDOUT: } @@ -2117,12 +2156,14 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T1.type: type = generic_class_type @T1 [concrete] // CHECK:STDOUT: %T1.generic: %T1.type = struct_value () [concrete] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T.8b3) [symbolic] +// CHECK:STDOUT: %pattern_type.48e: type = pattern_type %T1 [symbolic] // CHECK:STDOUT: %T.336: type = bind_symbolic_name T, 1 [symbolic] -// CHECK:STDOUT: %T.patt.7a9: type = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %T.patt.cec: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @T1(%T.8b3) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -2143,7 +2184,7 @@ base class T1(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %T1.decl: %T1.type = class_decl @T1 [concrete = constants.%T1.generic] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T.8b3)] // CHECK:STDOUT: } @@ -2151,7 +2192,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @T1(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.type: type = fn_type @F, @T1(%T.loc4_15.2) [symbolic = %F.type (constants.%F.type)] @@ -2159,9 +2200,9 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @T1.%F.type (%F.type) = fn_decl @F [symbolic = @T1.%F (constants.%F)] { -// CHECK:STDOUT: %self.patt: @F.%T1 (%T1) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%T1 (%T1) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %T.patt.loc9_28.1: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt.7a9)] +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type.48e) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type.48e) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc9_28.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt.cec)] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%T1 (%T1) = value_param call_param0 // CHECK:STDOUT: %.loc9_22.1: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1)] { @@ -2184,22 +2225,24 @@ base class T1(T:! type) { // CHECK:STDOUT: generic virtual fn @F(@T1.%T.loc4_15.1: type, %T.loc9_28.2: type) { // CHECK:STDOUT: %T.loc9_22: type = bind_symbolic_name T, 0 [symbolic = %T.loc9_22 (constants.%T.8b3)] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T.loc9_22) [symbolic = %T1 (constants.%T1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T1 [symbolic = %pattern_type (constants.%pattern_type.48e)] // CHECK:STDOUT: %T.loc9_28.1: type = bind_symbolic_name T, 1 [symbolic = %T.loc9_28.1 (constants.%T.336)] -// CHECK:STDOUT: %T.patt.loc9_28.2: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt.7a9)] +// CHECK:STDOUT: %T.patt.loc9_28.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc9_28.2 (constants.%T.patt.cec)] // CHECK:STDOUT: // CHECK:STDOUT: virtual fn(%self.param: @F.%T1 (%T1)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T1(constants.%T.8b3) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.8b3, constants.%T.336) { // CHECK:STDOUT: %T.loc9_22 => constants.%T.8b3 // CHECK:STDOUT: %T1 => constants.%T1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.48e // CHECK:STDOUT: %T.loc9_28.1 => constants.%T.336 -// CHECK:STDOUT: %T.patt.loc9_28.2 => constants.%T.patt.7a9 +// CHECK:STDOUT: %T.patt.loc9_28.2 => constants.%T.patt.cec // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T1(@F.%T.loc9_22) {} @@ -2210,10 +2253,12 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T1.type: type = generic_class_type @T1 [concrete] // CHECK:STDOUT: %T1.generic: %T1.type = struct_value () [concrete] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.48e: type = pattern_type %T1 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @T1(%T) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type [concrete] @@ -2236,7 +2281,7 @@ base class T1(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %T1.decl: %T1.type = class_decl @T1 [concrete = constants.%T1.generic] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -2244,7 +2289,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @T1(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.type: type = fn_type @F, @T1(%T.loc4_15.2) [symbolic = %F.type (constants.%F.type)] @@ -2253,8 +2298,8 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @T1.%F.type (%F.type) = fn_decl @F [symbolic = @T1.%F (constants.%F)] { -// CHECK:STDOUT: %self.patt: @F.%T1 (%T1) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%T1 (%T1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type.48e) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type.48e) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%T1 (%T1) = value_param call_param0 // CHECK:STDOUT: %.loc5_22.1: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1)] { @@ -2277,6 +2322,7 @@ base class T1(T:! type) { // CHECK:STDOUT: generic virtual fn @F(@T1.%T.loc4_15.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T1 [symbolic = %pattern_type (constants.%pattern_type.48e)] // CHECK:STDOUT: // CHECK:STDOUT: virtual fn(%self.param: @F.%T1 (%T1)); // CHECK:STDOUT: } @@ -2289,6 +2335,7 @@ base class T1(T:! type) { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T1 => constants.%T1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.48e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T1(@F.%T) {} @@ -2299,10 +2346,13 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T1.type: type = generic_class_type @T1 [concrete] // CHECK:STDOUT: %T1.generic: %T1.type = struct_value () [concrete] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.48e: type = pattern_type %T1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @T1(%T) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type [concrete] @@ -2325,7 +2375,7 @@ base class T1(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %T1.decl: %T1.type = class_decl @T1 [concrete = constants.%T1.generic] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -2333,7 +2383,7 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @T1(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.type: type = fn_type @F, @T1(%T.loc4_15.2) [symbolic = %F.type (constants.%F.type)] @@ -2342,10 +2392,10 @@ base class T1(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @T1.%F.type (%F.type) = fn_decl @F [symbolic = @T1.%F (constants.%F)] { -// CHECK:STDOUT: %self.patt: @F.%T1 (%T1) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%T1 (%T1) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %t.patt: @F.%T (%T) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.%T (%T) = value_param_pattern %t.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.%pattern_type.loc5_16 (%pattern_type.48e) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type.loc5_16 (%pattern_type.48e) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc5_28 (%pattern_type.7dc) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc5_28 (%pattern_type.7dc) = value_param_pattern %t.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%T1 (%T1) = value_param call_param0 // CHECK:STDOUT: %.loc5_22.1: type = splice_block %Self.ref [symbolic = %T1 (constants.%T1)] { @@ -2372,6 +2422,8 @@ base class T1(T:! type) { // CHECK:STDOUT: generic virtual fn @F(@T1.%T.loc4_15.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %T1: type = class_type @T1, @T1(%T) [symbolic = %T1 (constants.%T1)] +// CHECK:STDOUT: %pattern_type.loc5_16: type = pattern_type %T1 [symbolic = %pattern_type.loc5_16 (constants.%pattern_type.48e)] +// CHECK:STDOUT: %pattern_type.loc5_28: type = pattern_type %T [symbolic = %pattern_type.loc5_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: virtual fn(%self.param: @F.%T1 (%T1), %t.param: @F.%T (%T)); // CHECK:STDOUT: } @@ -2384,6 +2436,8 @@ base class T1(T:! type) { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T1 => constants.%T1 +// CHECK:STDOUT: %pattern_type.loc5_16 => constants.%pattern_type.48e +// CHECK:STDOUT: %pattern_type.loc5_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T1(@F.%T) {} diff --git a/toolchain/check/testdata/const/basic.carbon b/toolchain/check/testdata/const/basic.carbon index a8a461f8f875..b598c4e87106 100644 --- a/toolchain/check/testdata/const/basic.carbon +++ b/toolchain/check/testdata/const/basic.carbon @@ -24,10 +24,12 @@ fn B(p: const (i32*)) -> const (i32*) { // CHECK:STDOUT: %const.20a: type = const_type %i32 [concrete] // CHECK:STDOUT: %ptr.36b: type = ptr_type %const.20a [concrete] // CHECK:STDOUT: %ptr.3bc: type = ptr_type %ptr.36b [concrete] +// CHECK:STDOUT: %pattern_type.1d4: type = pattern_type %ptr.3bc [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %const.12f: type = const_type %ptr.235 [concrete] +// CHECK:STDOUT: %pattern_type.63b: type = pattern_type %const.12f [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -48,10 +50,10 @@ fn B(p: const (i32*)) -> const (i32*) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %p.patt: %ptr.3bc = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.3bc = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.3bc = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.3bc = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.1d4 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.1d4 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.1d4 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.1d4 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_31: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_31: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -71,10 +73,10 @@ fn B(p: const (i32*)) -> const (i32*) { // CHECK:STDOUT: %return: ref %ptr.3bc = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %p.patt: %const.12f = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %const.12f = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %const.12f = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %const.12f = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.63b = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.63b = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.63b = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.63b = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc15_33: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc15_33: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/const/collapse.carbon b/toolchain/check/testdata/const/collapse.carbon index 82e290158820..c7f6051017db 100644 --- a/toolchain/check/testdata/const/collapse.carbon +++ b/toolchain/check/testdata/const/collapse.carbon @@ -25,6 +25,7 @@ fn F(p: const i32**) -> const (const i32)** { // CHECK:STDOUT: %const: type = const_type %i32 [concrete] // CHECK:STDOUT: %ptr.36b: type = ptr_type %const [concrete] // CHECK:STDOUT: %ptr.3bc: type = ptr_type %ptr.36b [concrete] +// CHECK:STDOUT: %pattern_type.1d4: type = pattern_type %ptr.3bc [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -44,10 +45,10 @@ fn F(p: const i32**) -> const (const i32)** { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %p.patt: %ptr.3bc = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.3bc = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.3bc = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.3bc = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.1d4 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.1d4 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.1d4 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.1d4 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc16_38: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16_38: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/const/fail_collapse.carbon b/toolchain/check/testdata/const/fail_collapse.carbon index cf007d746fcd..b4a5a831b8f7 100644 --- a/toolchain/check/testdata/const/fail_collapse.carbon +++ b/toolchain/check/testdata/const/fail_collapse.carbon @@ -31,8 +31,10 @@ fn G(p: const (const i32)**) -> i32** { // CHECK:STDOUT: %const: type = const_type %i32 [concrete] // CHECK:STDOUT: %ptr.36b: type = ptr_type %const [concrete] // CHECK:STDOUT: %ptr.3bc: type = ptr_type %ptr.36b [concrete] +// CHECK:STDOUT: %pattern_type.1d4: type = pattern_type %ptr.3bc [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %ptr.5d5: type = ptr_type %ptr.235 [concrete] +// CHECK:STDOUT: %pattern_type.d91: type = pattern_type %ptr.5d5 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -53,10 +55,10 @@ fn G(p: const (const i32)**) -> i32** { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %ptr.3bc = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.3bc = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.5d5 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.5d5 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.1d4 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.1d4 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.d91 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.d91 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc15_33: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc15_33: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/const/import.carbon b/toolchain/check/testdata/const/import.carbon index 263e3960fe49..3ed436c16561 100644 --- a/toolchain/check/testdata/const/import.carbon +++ b/toolchain/check/testdata/const/import.carbon @@ -32,9 +32,11 @@ var a_ptr: const i32* = a_ptr_ref; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %const: type = const_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a65: type = pattern_type %const [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %const [concrete] +// CHECK:STDOUT: %pattern_type.bff: type = pattern_type %ptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -54,8 +56,8 @@ var a_ptr: const i32* = a_ptr_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %const = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %const = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a65 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a65 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -64,8 +66,8 @@ var a_ptr: const i32* = a_ptr_ref; // CHECK:STDOUT: %return: ref %const = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: %const = binding_pattern a_ref -// CHECK:STDOUT: %.loc6_1: %const = var_pattern %a_ref.patt +// CHECK:STDOUT: %a_ref.patt: %pattern_type.a65 = binding_pattern a_ref +// CHECK:STDOUT: %.loc6_1: %pattern_type.a65 = var_pattern %a_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref %const = var a_ref // CHECK:STDOUT: %.loc6_12: type = splice_block %const.loc6 [concrete = constants.%const] { @@ -75,8 +77,8 @@ var a_ptr: const i32* = a_ptr_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref: ref %const = bind_name a_ref, %a_ref.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ptr_ref.patt: %ptr = binding_pattern a_ptr_ref -// CHECK:STDOUT: %.loc7_1: %ptr = var_pattern %a_ptr_ref.patt +// CHECK:STDOUT: %a_ptr_ref.patt: %pattern_type.bff = binding_pattern a_ptr_ref +// CHECK:STDOUT: %.loc7_1: %pattern_type.bff = var_pattern %a_ptr_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_ptr_ref.var: ref %ptr = var a_ptr_ref // CHECK:STDOUT: %.loc7_25: type = splice_block %ptr [concrete = constants.%ptr] { @@ -108,6 +110,7 @@ var a_ptr: const i32* = a_ptr_ref; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %const: type = const_type %i32 [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %const [concrete] +// CHECK:STDOUT: %pattern_type.bff: type = pattern_type %ptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -134,8 +137,8 @@ var a_ptr: const i32* = a_ptr_ref; // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %ptr = binding_pattern a -// CHECK:STDOUT: %.loc6_1: %ptr = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.bff = binding_pattern a +// CHECK:STDOUT: %.loc6_1: %pattern_type.bff = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr = var a // CHECK:STDOUT: %.loc6_17: type = splice_block %ptr.loc6 [concrete = constants.%ptr] { @@ -146,8 +149,8 @@ var a_ptr: const i32* = a_ptr_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %ptr = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ptr.patt: %ptr = binding_pattern a_ptr -// CHECK:STDOUT: %.loc7_1: %ptr = var_pattern %a_ptr.patt +// CHECK:STDOUT: %a_ptr.patt: %pattern_type.bff = binding_pattern a_ptr +// CHECK:STDOUT: %.loc7_1: %pattern_type.bff = var_pattern %a_ptr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_ptr.var: ref %ptr = var a_ptr // CHECK:STDOUT: %.loc7_21: type = splice_block %ptr.loc7 [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/deduce/array.carbon b/toolchain/check/testdata/deduce/array.carbon index f2f5ee31103c..c597e5834724 100644 --- a/toolchain/check/testdata/deduce/array.carbon +++ b/toolchain/check/testdata/deduce/array.carbon @@ -128,9 +128,12 @@ fn G() -> i32 { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.743: type = array_type %int_3, %T [symbolic] +// CHECK:STDOUT: %pattern_type.58b: type = pattern_type %array_type.743 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -150,9 +153,11 @@ fn G() -> i32 { // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %array_type.002: type = array_type %int_3, %C [concrete] +// CHECK:STDOUT: %pattern_type.a63: type = pattern_type %array_type.002 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -181,11 +186,11 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %a.patt: @F.%array_type.loc6_29.2 (%array_type.743) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%array_type.loc6_29.2 (%array_type.743) = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc6_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc6_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc6_16 (%pattern_type.58b) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc6_16 (%pattern_type.58b) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_32 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_32 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_35: type = name_ref T, %T.loc6_6.1 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] @@ -200,8 +205,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref @F.%T.loc6_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 @@ -220,8 +225,10 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: %array_type.loc6_29.2: type = array_type constants.%int_3, %T.loc6_6.2 [symbolic = %array_type.loc6_29.2 (constants.%array_type.743)] +// CHECK:STDOUT: %pattern_type.loc6_16: type = pattern_type %array_type.loc6_29.2 [symbolic = %pattern_type.loc6_16 (constants.%pattern_type.58b)] +// CHECK:STDOUT: %pattern_type.loc6_32: type = pattern_type %T.loc6_6.2 [symbolic = %pattern_type.loc6_32 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_32: = require_complete_type %T.loc6_6.2 [symbolic = %require_complete.loc6_32 (constants.%require_complete.4ae)] @@ -250,8 +257,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type.002 = binding_pattern a -// CHECK:STDOUT: %.loc9_3.1: %array_type.002 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a63 = binding_pattern a +// CHECK:STDOUT: %.loc9_3.1: %pattern_type.a63 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.002 = var a // CHECK:STDOUT: %.loc9_26.1: %empty_struct_type = struct_literal () @@ -292,12 +299,16 @@ fn G() -> i32 { // CHECK:STDOUT: %T.loc6_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %array_type.loc6_29.2 => constants.%array_type.743 +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.58b +// CHECK:STDOUT: %pattern_type.loc6_32 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { // CHECK:STDOUT: %T.loc6_6.2 => constants.%C // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %array_type.loc6_29.2 => constants.%array_type.002 +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.a63 +// CHECK:STDOUT: %pattern_type.loc6_32 => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_32 => constants.%complete_type.357 @@ -313,10 +324,13 @@ fn G() -> i32 { // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %array_type.6a2: type = array_type %N, %C [symbolic] +// CHECK:STDOUT: %pattern_type.9ee: type = pattern_type %array_type.6a2 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d82: = require_complete_type %array_type.6a2 [symbolic] @@ -336,6 +350,7 @@ fn G() -> i32 { // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.002: type = array_type %int_3.1ba, %C [concrete] +// CHECK:STDOUT: %pattern_type.a63: type = pattern_type %array_type.002 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] @@ -370,11 +385,11 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt.loc6_6.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt)] -// CHECK:STDOUT: %a.patt: @F.%array_type.loc6_42.2 (%array_type.6a2) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%array_type.loc6_42.2 (%array_type.6a2) = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt.loc6_6.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt)] +// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.9ee) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.9ee) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -397,8 +412,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -418,8 +433,9 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_6.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc6_6.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc6_6.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc6_6.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc6_6.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt)] // CHECK:STDOUT: %array_type.loc6_42.2: type = array_type %N.loc6_6.2, constants.%C [symbolic = %array_type.loc6_42.2 (constants.%array_type.6a2)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc6_42.2 [symbolic = %pattern_type (constants.%pattern_type.9ee)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc6_42.2 [symbolic = %require_complete (constants.%require_complete.d82)] @@ -444,8 +460,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type.002 = binding_pattern a -// CHECK:STDOUT: %.loc9_3.1: %array_type.002 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a63 = binding_pattern a +// CHECK:STDOUT: %.loc9_3.1: %pattern_type.a63 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.002 = var a // CHECK:STDOUT: %.loc9_26.1: %empty_struct_type = struct_literal () @@ -487,12 +503,14 @@ fn G() -> i32 { // CHECK:STDOUT: %N.loc6_6.2 => constants.%N // CHECK:STDOUT: %N.patt.loc6_6.2 => constants.%N.patt // CHECK:STDOUT: %array_type.loc6_42.2 => constants.%array_type.6a2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9ee // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_3.1ba) { // CHECK:STDOUT: %N.loc6_6.2 => constants.%int_3.1ba // CHECK:STDOUT: %N.patt.loc6_6.2 => constants.%N.patt // CHECK:STDOUT: %array_type.loc6_42.2 => constants.%array_type.002 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a63 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.dd1 @@ -508,13 +526,16 @@ fn G() -> i32 { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %array_type.bb5: type = array_type %N, %T [symbolic] +// CHECK:STDOUT: %pattern_type.261: type = pattern_type %array_type.bb5 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.bb5 [symbolic] @@ -522,6 +543,7 @@ fn G() -> i32 { // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.002: type = array_type %int_3, %C [concrete] +// CHECK:STDOUT: %pattern_type.a63: type = pattern_type %array_type.002 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] @@ -551,10 +573,10 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %N.patt.loc6_16.1: Core.IntLiteral = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_16.2 (constants.%N.patt)] -// CHECK:STDOUT: %a.patt: @F.%array_type.loc6_52.2 (%array_type.bb5) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%array_type.loc6_52.2 (%array_type.bb5) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc6_16.1: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_16.2 (constants.%N.patt)] +// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.261) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.261) = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: %.loc6_36.1: type = splice_block %.loc6_36.3 [concrete = Core.IntLiteral] { @@ -587,10 +609,11 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type, %N.loc6_16.1: Core.IntLiteral) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: %N.loc6_16.2: Core.IntLiteral = bind_symbolic_name N, 1 [symbolic = %N.loc6_16.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc6_16.2: Core.IntLiteral = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_16.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc6_16.2: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc6_16.2 (constants.%N.patt)] // CHECK:STDOUT: %array_type.loc6_52.2: type = array_type %N.loc6_16.2, %T.loc6_6.2 [symbolic = %array_type.loc6_52.2 (constants.%array_type.bb5)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc6_52.2 [symbolic = %pattern_type (constants.%pattern_type.261)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc6_52.2 [symbolic = %require_complete (constants.%require_complete)] @@ -604,8 +627,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type.002 = binding_pattern a -// CHECK:STDOUT: %.loc9_3.1: %array_type.002 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a63 = binding_pattern a +// CHECK:STDOUT: %.loc9_3.1: %pattern_type.a63 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.002 = var a // CHECK:STDOUT: %.loc9_26.1: %empty_struct_type = struct_literal () @@ -647,6 +670,7 @@ fn G() -> i32 { // CHECK:STDOUT: %N.loc6_16.2 => constants.%N // CHECK:STDOUT: %N.patt.loc6_16.2 => constants.%N.patt // CHECK:STDOUT: %array_type.loc6_52.2 => constants.%array_type.bb5 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.261 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C, constants.%int_3) { @@ -655,6 +679,7 @@ fn G() -> i32 { // CHECK:STDOUT: %N.loc6_16.2 => constants.%int_3 // CHECK:STDOUT: %N.patt.loc6_16.2 => constants.%N.patt // CHECK:STDOUT: %array_type.loc6_52.2 => constants.%array_type.002 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a63 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.dd1 @@ -667,9 +692,12 @@ fn G() -> i32 { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type.9d4: type = array_type %int_2, %T [symbolic] +// CHECK:STDOUT: %pattern_type.a4c: type = pattern_type %array_type.9d4 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -689,15 +717,18 @@ fn G() -> i32 { // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.002: type = array_type %int_3, %C [concrete] +// CHECK:STDOUT: %pattern_type.a63: type = pattern_type %array_type.002 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array: %array_type.002 = tuple_value (%C.val, %C.val, %C.val) [concrete] // CHECK:STDOUT: %array_type.15a: type = array_type %int_2, %C [concrete] +// CHECK:STDOUT: %pattern_type.114: type = pattern_type %array_type.15a [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %complete_type.8eb: = complete_type_witness %array_type.15a [concrete] // CHECK:STDOUT: } @@ -721,11 +752,11 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %a.patt: @F.%array_type.loc6_29.2 (%array_type.9d4) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%array_type.loc6_29.2 (%array_type.9d4) = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc6_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc6_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc6_16 (%pattern_type.a4c) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc6_16 (%pattern_type.a4c) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_32 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_32 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_35: type = name_ref T, %T.loc6_6.1 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] @@ -740,8 +771,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref @F.%T.loc6_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 @@ -760,8 +791,10 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: %array_type.loc6_29.2: type = array_type constants.%int_2, %T.loc6_6.2 [symbolic = %array_type.loc6_29.2 (constants.%array_type.9d4)] +// CHECK:STDOUT: %pattern_type.loc6_16: type = pattern_type %array_type.loc6_29.2 [symbolic = %pattern_type.loc6_16 (constants.%pattern_type.a4c)] +// CHECK:STDOUT: %pattern_type.loc6_32: type = pattern_type %T.loc6_6.2 [symbolic = %pattern_type.loc6_32 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_32: = require_complete_type %T.loc6_6.2 [symbolic = %require_complete.loc6_32 (constants.%require_complete.4ae)] @@ -790,8 +823,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type.002 = binding_pattern a -// CHECK:STDOUT: %.loc10_3.1: %array_type.002 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a63 = binding_pattern a +// CHECK:STDOUT: %.loc10_3.1: %pattern_type.a63 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.002 = var a // CHECK:STDOUT: %.loc10_26.1: %empty_struct_type = struct_literal () @@ -832,12 +865,16 @@ fn G() -> i32 { // CHECK:STDOUT: %T.loc6_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %array_type.loc6_29.2 => constants.%array_type.9d4 +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.a4c +// CHECK:STDOUT: %pattern_type.loc6_32 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { // CHECK:STDOUT: %T.loc6_6.2 => constants.%C // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %array_type.loc6_29.2 => constants.%array_type.15a +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.114 +// CHECK:STDOUT: %pattern_type.loc6_32 => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_32 => constants.%complete_type.357 @@ -854,10 +891,13 @@ fn G() -> i32 { // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %array_type.6a2: type = array_type %N, %C [symbolic] +// CHECK:STDOUT: %pattern_type.9ee: type = pattern_type %array_type.6a2 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d82: = require_complete_type %array_type.6a2 [symbolic] @@ -877,6 +917,7 @@ fn G() -> i32 { // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.fe4: type = array_type %int_3.1ba, %D [concrete] +// CHECK:STDOUT: %pattern_type.f30: type = pattern_type %array_type.fe4 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %D.val: %D = struct_value () [concrete] @@ -884,6 +925,7 @@ fn G() -> i32 { // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array: %array_type.fe4 = tuple_value (%D.val, %D.val, %D.val) [concrete] // CHECK:STDOUT: %array_type.002: type = array_type %int_3.1ba, %C [concrete] +// CHECK:STDOUT: %pattern_type.a63: type = pattern_type %array_type.002 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_3.1ba) [concrete] // CHECK:STDOUT: %complete_type.dd1: = complete_type_witness %array_type.002 [concrete] // CHECK:STDOUT: %Convert.bound.b30: = bound_method %int_3.1ba, %Convert.956 [concrete] @@ -914,11 +956,11 @@ fn G() -> i32 { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt.loc7_6.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc7_6.2 (constants.%N.patt)] -// CHECK:STDOUT: %a.patt: @F.%array_type.loc7_42.2 (%array_type.6a2) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%array_type.loc7_42.2 (%array_type.6a2) = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt.loc7_6.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc7_6.2 (constants.%N.patt)] +// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.9ee) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.9ee) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -941,8 +983,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -971,8 +1013,9 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc7_6.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc7_6.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc7_6.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc7_6.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc7_6.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc7_6.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc7_6.2 (constants.%N.patt)] // CHECK:STDOUT: %array_type.loc7_42.2: type = array_type %N.loc7_6.2, constants.%C [symbolic = %array_type.loc7_42.2 (constants.%array_type.6a2)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc7_42.2 [symbolic = %pattern_type (constants.%pattern_type.9ee)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc7_42.2 [symbolic = %require_complete (constants.%require_complete.d82)] @@ -997,8 +1040,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type.fe4 = binding_pattern a -// CHECK:STDOUT: %.loc11_3.1: %array_type.fe4 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.f30 = binding_pattern a +// CHECK:STDOUT: %.loc11_3.1: %pattern_type.f30 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.fe4 = var a // CHECK:STDOUT: %.loc11_26.1: %empty_struct_type = struct_literal () @@ -1040,12 +1083,14 @@ fn G() -> i32 { // CHECK:STDOUT: %N.loc7_6.2 => constants.%N // CHECK:STDOUT: %N.patt.loc7_6.2 => constants.%N.patt // CHECK:STDOUT: %array_type.loc7_42.2 => constants.%array_type.6a2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9ee // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_3.1ba) { // CHECK:STDOUT: %N.loc7_6.2 => constants.%int_3.1ba // CHECK:STDOUT: %N.patt.loc7_6.2 => constants.%N.patt // CHECK:STDOUT: %array_type.loc7_42.2 => constants.%array_type.002 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a63 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.dd1 @@ -1063,7 +1108,8 @@ fn G() -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2fd: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete] // CHECK:STDOUT: %Convert.type.71e: type = fn_type @Convert.1, @ImplicitAs(Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1d9 = impl_witness_table (imports.%Core.import_ref.85c), @impl.971 [concrete] @@ -1077,6 +1123,7 @@ fn G() -> i32 { // CHECK:STDOUT: %bound_method: = bound_method %N.51e, %Convert.specific_fn [symbolic] // CHECK:STDOUT: %int.convert_checked: init Core.IntLiteral = call %bound_method(%N.51e) [symbolic] // CHECK:STDOUT: %array_type.b2f: type = array_type %int.convert_checked, %C [symbolic] +// CHECK:STDOUT: %pattern_type.ac2: type = pattern_type %array_type.b2f [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.cde: = require_complete_type %array_type.b2f [symbolic] @@ -1084,6 +1131,7 @@ fn G() -> i32 { // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type.002: type = array_type %int_3, %C [concrete] +// CHECK:STDOUT: %pattern_type.a63: type = pattern_type %array_type.002 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] @@ -1111,11 +1159,11 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt.loc6_6.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt.8e2)] -// CHECK:STDOUT: %a.patt: @F.%array_type.loc6_28.2 (%array_type.b2f) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%array_type.loc6_28.2 (%array_type.b2f) = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt.loc6_6.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt.f2c)] +// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.ac2) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.ac2) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6_34: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6_34: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1142,8 +1190,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1163,11 +1211,12 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_6.1: %i32) { // CHECK:STDOUT: %N.loc6_6.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc6_6.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc6_6.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc6_6.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: %Convert.bound: = bound_method %N.loc6_6.2, constants.%Convert.960 [symbolic = %Convert.bound (constants.%Convert.bound)] // CHECK:STDOUT: %bound_method.loc6_27.3: = bound_method %N.loc6_6.2, constants.%Convert.specific_fn [symbolic = %bound_method.loc6_27.3 (constants.%bound_method)] // CHECK:STDOUT: %int.convert_checked.loc6_27.2: init Core.IntLiteral = call %bound_method.loc6_27.3(%N.loc6_6.2) [symbolic = %int.convert_checked.loc6_27.2 (constants.%int.convert_checked)] // CHECK:STDOUT: %array_type.loc6_28.2: type = array_type %int.convert_checked.loc6_27.2, constants.%C [symbolic = %array_type.loc6_28.2 (constants.%array_type.b2f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc6_28.2 [symbolic = %pattern_type (constants.%pattern_type.ac2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc6_28.2 [symbolic = %require_complete (constants.%require_complete.cde)] @@ -1182,8 +1231,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type.002 = binding_pattern a -// CHECK:STDOUT: %.loc9_3.1: %array_type.002 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a63 = binding_pattern a +// CHECK:STDOUT: %.loc9_3.1: %pattern_type.a63 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type.002 = var a // CHECK:STDOUT: %.loc9_26.1: %empty_struct_type = struct_literal () @@ -1218,10 +1267,11 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.51e) { // CHECK:STDOUT: %N.loc6_6.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc6_6.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc6_6.2 => constants.%N.patt.f2c // CHECK:STDOUT: %Convert.bound => constants.%Convert.bound // CHECK:STDOUT: %bound_method.loc6_27.3 => constants.%bound_method // CHECK:STDOUT: %int.convert_checked.loc6_27.2 => constants.%int.convert_checked // CHECK:STDOUT: %array_type.loc6_28.2 => constants.%array_type.b2f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ac2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/deduce/generic_type.carbon b/toolchain/check/testdata/deduce/generic_type.carbon index ae27f03a8b75..1f76b98a6044 100644 --- a/toolchain/check/testdata/deduce/generic_type.carbon +++ b/toolchain/check/testdata/deduce/generic_type.carbon @@ -69,19 +69,24 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] +// CHECK:STDOUT: %pattern_type.e5e: type = pattern_type %C.f2e [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %require_complete.389: = require_complete_type %C.f2e [symbolic] // CHECK:STDOUT: %F.specific_fn.ef1: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %C.131: type = class_type @C, @C(%D) [concrete] +// CHECK:STDOUT: %pattern_type.7f8: type = pattern_type %C.131 [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.c4a: = specific_function %F, @F(%D) [concrete] @@ -104,17 +109,17 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc7_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %p.patt: @F.%C.loc7_22.2 (%C.f2e) = binding_pattern p -// CHECK:STDOUT: %p.param_patt: @F.%C.loc7_22.2 (%C.f2e) = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc7_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc7_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc7_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc7_16 (%pattern_type.e5e) = binding_pattern p +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc7_16 (%pattern_type.e5e) = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc7_25 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc7_25 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc7_28: type = name_ref T, %T.loc7_6.1 [symbolic = %T.loc7_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] @@ -129,10 +134,10 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref @F.%T.loc7_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %C.131 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %C.131 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.7f8 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.7f8 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc9_18: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %p.param: %C.131 = value_param call_param0 @@ -149,7 +154,7 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -174,8 +179,10 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_6.1: type) { // CHECK:STDOUT: %T.loc7_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] // CHECK:STDOUT: %C.loc7_22.2: type = class_type @C, @C(%T.loc7_6.2) [symbolic = %C.loc7_22.2 (constants.%C.f2e)] +// CHECK:STDOUT: %pattern_type.loc7_16: type = pattern_type %C.loc7_22.2 [symbolic = %pattern_type.loc7_16 (constants.%pattern_type.e5e)] +// CHECK:STDOUT: %pattern_type.loc7_25: type = pattern_type %T.loc7_6.2 [symbolic = %pattern_type.loc7_25 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_25: = require_complete_type %T.loc7_6.2 [symbolic = %require_complete.loc7_25 (constants.%require_complete.4ae)] @@ -215,6 +222,8 @@ fn G() -> i32 { // CHECK:STDOUT: %T.loc7_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc7_6.2 => constants.%T.patt // CHECK:STDOUT: %C.loc7_22.2 => constants.%C.f2e +// CHECK:STDOUT: %pattern_type.loc7_16 => constants.%pattern_type.e5e +// CHECK:STDOUT: %pattern_type.loc7_25 => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_25 => constants.%require_complete.4ae @@ -237,6 +246,8 @@ fn G() -> i32 { // CHECK:STDOUT: %T.loc7_6.2 => constants.%D // CHECK:STDOUT: %T.patt.loc7_6.2 => constants.%T.patt // CHECK:STDOUT: %C.loc7_22.2 => constants.%C.131 +// CHECK:STDOUT: %pattern_type.loc7_16 => constants.%pattern_type.7f8 +// CHECK:STDOUT: %pattern_type.loc7_25 => constants.%pattern_type.510 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_25 => constants.%complete_type @@ -248,18 +259,22 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.type: type = generic_class_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type = struct_value () [concrete] // CHECK:STDOUT: %I.ff1: type = class_type @I, @I(%T) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type.576: type = pattern_type %I.ff1 [symbolic] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %I.ff1 [symbolic] // CHECK:STDOUT: %F.specific_fn.ef1: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %I.ed8: type = class_type @I, @I(%C) [concrete] +// CHECK:STDOUT: %pattern_type.917: type = pattern_type %I.ed8 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.04a: = specific_function %F, @F(%C) [concrete] @@ -282,17 +297,17 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type = class_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc7_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %p.patt: @F.%I.loc7_22.2 (%I.ff1) = binding_pattern p -// CHECK:STDOUT: %p.param_patt: @F.%I.loc7_22.2 (%I.ff1) = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc7_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.patt: @F.%pattern_type (%pattern_type.576) = binding_pattern p +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type (%pattern_type.576) = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] @@ -307,10 +322,10 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %I.ed8 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %I.ed8 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.917 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.917 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc9_18: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %p.param: %I.ed8 = value_param call_param0 @@ -327,7 +342,7 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @I(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -352,8 +367,9 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_6.1: type) { // CHECK:STDOUT: %T.loc7_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] // CHECK:STDOUT: %I.loc7_22.2: type = class_type @I, @I(%T.loc7_6.2) [symbolic = %I.loc7_22.2 (constants.%I.ff1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %I.loc7_22.2 [symbolic = %pattern_type (constants.%pattern_type.576)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %I.loc7_22.2 [symbolic = %require_complete (constants.%require_complete)] @@ -391,6 +407,7 @@ fn G() -> i32 { // CHECK:STDOUT: %T.loc7_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc7_6.2 => constants.%T.patt // CHECK:STDOUT: %I.loc7_22.2 => constants.%I.ff1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.576 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -412,6 +429,7 @@ fn G() -> i32 { // CHECK:STDOUT: %T.loc7_6.2 => constants.%C // CHECK:STDOUT: %T.patt.loc7_6.2 => constants.%T.patt // CHECK:STDOUT: %I.loc7_22.2 => constants.%I.ed8 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.917 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -422,12 +440,13 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.9d6: type = class_type @Outer, @Outer(%T) [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %Inner.type.eae: type = generic_class_type @Inner, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.generic.137: %Inner.type.eae = struct_value () [symbolic] // CHECK:STDOUT: %Inner.c71: type = class_type @Inner, @Inner(%T, %U) [symbolic] @@ -436,8 +455,10 @@ fn G() -> i32 { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %require_complete.127: = require_complete_type %Outer.9d6 [symbolic] +// CHECK:STDOUT: %pattern_type.372: type = pattern_type %Inner.c71 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.30b: type = tuple_type (%T, %U) [symbolic] +// CHECK:STDOUT: %pattern_type.65c: type = pattern_type %tuple.type.30b [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.fe1: = require_complete_type %tuple.type.30b [symbolic] @@ -449,7 +470,9 @@ fn G() -> i32 { // CHECK:STDOUT: %Inner.type.181: type = generic_class_type @Inner, @Outer(%C) [concrete] // CHECK:STDOUT: %Inner.generic.205: %Inner.type.181 = struct_value () [concrete] // CHECK:STDOUT: %Inner.d70: type = class_type @Inner, @Inner(%C, %D) [concrete] +// CHECK:STDOUT: %pattern_type.057: type = pattern_type %Inner.d70 [concrete] // CHECK:STDOUT: %tuple.type.e8a: type = tuple_type (%C, %D) [concrete] +// CHECK:STDOUT: %pattern_type.9ec: type = pattern_type %tuple.type.e8a [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.4a7: = specific_function %F, @F(%C, %D) [concrete] @@ -474,19 +497,19 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc13_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc13_16.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_16.2 (constants.%U.patt)] -// CHECK:STDOUT: %p.patt: @F.%Inner.loc13_45.2 (%Inner.c71) = binding_pattern p -// CHECK:STDOUT: %p.param_patt: @F.%Inner.loc13_45.2 (%Inner.c71) = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%tuple.type (%tuple.type.30b) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%tuple.type (%tuple.type.30b) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc13_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc13_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc13_26 (%pattern_type.372) = binding_pattern p +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc13_26 (%pattern_type.372) = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc13_48 (%pattern_type.65c) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc13_48 (%pattern_type.65c) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13_52: type = name_ref T, %T.loc13_6.1 [symbolic = %T.loc13_6.2 (constants.%T)] // CHECK:STDOUT: %U.ref.loc13_55: type = name_ref U, %U.loc13_16.1 [symbolic = %U.loc13_16.2 (constants.%U)] @@ -509,10 +532,10 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref @F.%tuple.type (%tuple.type.30b) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %Inner.d70 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %Inner.d70 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type.e8a = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.e8a = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.057 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.057 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.9ec = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.9ec = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc15_32: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %D.ref.loc15_35: type = name_ref D, file.%D.decl [concrete = constants.%D] @@ -536,7 +559,7 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.type: type = generic_class_type @Inner, @Outer(%T.loc4_13.2) [symbolic = %Inner.type (constants.%Inner.type.eae)] @@ -544,7 +567,7 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: @Outer.%Inner.type (%Inner.type.eae) = class_decl @Inner [symbolic = @Outer.%Inner.generic (constants.%Inner.generic.137)] { -// CHECK:STDOUT: %U.patt.loc5_15.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc5_15.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc5_15.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc5_15.2 (constants.%U)] // CHECK:STDOUT: } @@ -560,7 +583,7 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Inner(@Outer.%T.loc4_13.1: type, %U.loc5_15.1: type) { // CHECK:STDOUT: %U.loc5_15.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc5_15.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc5_15.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc5_15.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -594,15 +617,17 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc13_6.1: type, %U.loc13_16.1: type) { // CHECK:STDOUT: %T.loc13_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc13_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc13_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc13_16.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc13_16.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc13_16.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc13_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_16.2 (constants.%U.patt)] // CHECK:STDOUT: %Outer.loc13_36.2: type = class_type @Outer, @Outer(%T.loc13_6.2) [symbolic = %Outer.loc13_36.2 (constants.%Outer.9d6)] // CHECK:STDOUT: %require_complete.loc13_37: = require_complete_type %Outer.loc13_36.2 [symbolic = %require_complete.loc13_37 (constants.%require_complete.127)] // CHECK:STDOUT: %Inner.type: type = generic_class_type @Inner, @Outer(%T.loc13_6.2) [symbolic = %Inner.type (constants.%Inner.type.eae)] // CHECK:STDOUT: %Inner.generic: @F.%Inner.type (%Inner.type.eae) = struct_value () [symbolic = %Inner.generic (constants.%Inner.generic.137)] // CHECK:STDOUT: %Inner.loc13_45.2: type = class_type @Inner, @Inner(%T.loc13_6.2, %U.loc13_16.2) [symbolic = %Inner.loc13_45.2 (constants.%Inner.c71)] +// CHECK:STDOUT: %pattern_type.loc13_26: type = pattern_type %Inner.loc13_45.2 [symbolic = %pattern_type.loc13_26 (constants.%pattern_type.372)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc13_6.2, %U.loc13_16.2) [symbolic = %tuple.type (constants.%tuple.type.30b)] +// CHECK:STDOUT: %pattern_type.loc13_48: type = pattern_type %tuple.type [symbolic = %pattern_type.loc13_48 (constants.%pattern_type.65c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_48: = require_complete_type %tuple.type [symbolic = %require_complete.loc13_48 (constants.%require_complete.fe1)] @@ -671,7 +696,9 @@ fn G() -> i32 { // CHECK:STDOUT: %Inner.type => constants.%Inner.type.eae // CHECK:STDOUT: %Inner.generic => constants.%Inner.generic.137 // CHECK:STDOUT: %Inner.loc13_45.2 => constants.%Inner.c71 +// CHECK:STDOUT: %pattern_type.loc13_26 => constants.%pattern_type.372 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.30b +// CHECK:STDOUT: %pattern_type.loc13_48 => constants.%pattern_type.65c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_48 => constants.%require_complete.fe1 @@ -713,7 +740,9 @@ fn G() -> i32 { // CHECK:STDOUT: %Inner.type => constants.%Inner.type.181 // CHECK:STDOUT: %Inner.generic => constants.%Inner.generic.205 // CHECK:STDOUT: %Inner.loc13_45.2 => constants.%Inner.d70 +// CHECK:STDOUT: %pattern_type.loc13_26 => constants.%pattern_type.057 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.e8a +// CHECK:STDOUT: %pattern_type.loc13_48 => constants.%pattern_type.9ec // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc13_48 => constants.%complete_type.53b @@ -729,12 +758,14 @@ fn G() -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %WithNontype.type: type = generic_class_type @WithNontype [concrete] // CHECK:STDOUT: %WithNontype.generic: %WithNontype.type = struct_value () [concrete] // CHECK:STDOUT: %WithNontype.8a6: type = class_type @WithNontype, @WithNontype(%N.51e) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.48f: type = pattern_type %WithNontype.8a6 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.9c5: = require_complete_type %WithNontype.8a6 [symbolic] @@ -755,6 +786,7 @@ fn G() -> i32 { // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %WithNontype.b82: type = class_type @WithNontype, @WithNontype(%int_0.6a9) [concrete] // CHECK:STDOUT: %WithNontype.val: %WithNontype.b82 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.b66: type = pattern_type %WithNontype.b82 [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_0.6a9) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -776,7 +808,7 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %WithNontype.decl: %WithNontype.type = class_decl @WithNontype [concrete = constants.%WithNontype.generic] { -// CHECK:STDOUT: %N.patt.loc4_19.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_19.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc4_19.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_19.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -785,11 +817,11 @@ fn G() -> i32 { // CHECK:STDOUT: %N.loc4_19.1: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_19.2 (constants.%N.51e)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt.loc6_6.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt.8e2)] -// CHECK:STDOUT: %x.patt: @F.%WithNontype.loc6_31.2 (%WithNontype.8a6) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%WithNontype.loc6_31.2 (%WithNontype.8a6) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt.loc6_6.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt.f2c)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.48f) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.48f) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6_37: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6_37: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -809,8 +841,8 @@ fn G() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -821,7 +853,7 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic class @WithNontype(%N.loc4_19.1: %i32) { // CHECK:STDOUT: %N.loc4_19.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc4_19.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc4_19.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_19.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc4_19.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_19.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -837,8 +869,9 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc6_6.1: %i32) { // CHECK:STDOUT: %N.loc6_6.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc6_6.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc6_6.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc6_6.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_6.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: %WithNontype.loc6_31.2: type = class_type @WithNontype, @WithNontype(%N.loc6_6.2) [symbolic = %WithNontype.loc6_31.2 (constants.%WithNontype.8a6)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %WithNontype.loc6_31.2 [symbolic = %pattern_type (constants.%pattern_type.48f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %WithNontype.loc6_31.2 [symbolic = %require_complete (constants.%require_complete.9c5)] @@ -878,30 +911,32 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: specific @WithNontype(constants.%N.51e) { // CHECK:STDOUT: %N.loc4_19.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc4_19.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc4_19.2 => constants.%N.patt.f2c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.51e) { // CHECK:STDOUT: %N.loc6_6.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc6_6.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc6_6.2 => constants.%N.patt.f2c // CHECK:STDOUT: %WithNontype.loc6_31.2 => constants.%WithNontype.8a6 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.48f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WithNontype(@F.%N.loc6_6.2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @WithNontype(constants.%int_0.6a9) { // CHECK:STDOUT: %N.loc4_19.2 => constants.%int_0.6a9 -// CHECK:STDOUT: %N.patt.loc4_19.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc4_19.2 => constants.%N.patt.f2c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_0.6a9) { // CHECK:STDOUT: %N.loc6_6.2 => constants.%int_0.6a9 -// CHECK:STDOUT: %N.patt.loc6_6.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc6_6.2 => constants.%N.patt.f2c // CHECK:STDOUT: %WithNontype.loc6_31.2 => constants.%WithNontype.b82 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b66 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 diff --git a/toolchain/check/testdata/deduce/int_float.carbon b/toolchain/check/testdata/deduce/int_float.carbon index d26c0fbde9e7..454ce4022d68 100644 --- a/toolchain/check/testdata/deduce/int_float.carbon +++ b/toolchain/check/testdata/deduce/int_float.carbon @@ -43,15 +43,18 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N) [symbolic] +// CHECK:STDOUT: %pattern_type.896: type = pattern_type %Int [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.b4f: = require_complete_type %Int [symbolic] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64: type = class_type @Int, @Int(%int_64) [concrete] +// CHECK:STDOUT: %pattern_type.95b: type = pattern_type %i64 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64 [concrete] @@ -78,11 +81,11 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt.loc4_6.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_6.2 (constants.%N.patt)] -// CHECK:STDOUT: %n.patt: @F.%Int.loc4_42.2 (%Int) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.%Int.loc4_42.2 (%Int) = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt.loc4_6.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_6.2 (constants.%N.patt)] +// CHECK:STDOUT: %n.patt: @F.%pattern_type (%pattern_type.896) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.%pattern_type (%pattern_type.896) = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref.loc4_48: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref.loc4_52: %IntLiteral.type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = constants.%IntLiteral] @@ -109,10 +112,10 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: %return: ref Core.IntLiteral = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: %i64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.95b = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.95b = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref: %IntLiteral.type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = constants.%IntLiteral] @@ -132,8 +135,9 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc4_6.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc4_6.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc4_6.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc4_6.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_6.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc4_6.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_6.2 (constants.%N.patt)] // CHECK:STDOUT: %Int.loc4_42.2: type = class_type @Int, @Int(%N.loc4_6.2) [symbolic = %Int.loc4_42.2 (constants.%Int)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Int.loc4_42.2 [symbolic = %pattern_type (constants.%pattern_type.896)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Int.loc4_42.2 [symbolic = %require_complete (constants.%require_complete.b4f)] @@ -160,12 +164,14 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: %N.loc4_6.2 => constants.%N // CHECK:STDOUT: %N.patt.loc4_6.2 => constants.%N.patt // CHECK:STDOUT: %Int.loc4_42.2 => constants.%Int +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.896 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%int_64) { // CHECK:STDOUT: %N.loc4_6.2 => constants.%int_64 // CHECK:STDOUT: %N.patt.loc4_6.2 => constants.%N.patt // CHECK:STDOUT: %Int.loc4_42.2 => constants.%i64 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.95b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.4a1 @@ -177,12 +183,14 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -206,11 +214,11 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt.loc9_6.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc9_6.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc9_6.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc9_6.2 (constants.%N.patt)] // CHECK:STDOUT: %n.patt: = binding_pattern n // CHECK:STDOUT: %n.param_patt: = value_param_pattern %n.patt, call_param0 [concrete = ] -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref.loc9_50: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref.loc9_54: %IntLiteral.type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = constants.%IntLiteral] @@ -239,10 +247,10 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: %return: ref Core.IntLiteral = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: f64 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: f64 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.3de = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.3de = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref: %IntLiteral.type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = constants.%IntLiteral] @@ -264,7 +272,7 @@ fn G(a: f64) -> Core.IntLiteral() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc9_6.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc9_6.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc9_6.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc9_6.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc9_6.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc9_6.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc9_6.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/deduce/tuple.carbon b/toolchain/check/testdata/deduce/tuple.carbon index be095bec9802..f1806b48e3ab 100644 --- a/toolchain/check/testdata/deduce/tuple.carbon +++ b/toolchain/check/testdata/deduce/tuple.carbon @@ -61,17 +61,22 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.30b: type = tuple_type (%T, %U) [symbolic] +// CHECK:STDOUT: %pattern_type.65c: type = pattern_type %tuple.type.30b [symbolic] +// CHECK:STDOUT: %pattern_type.a32: type = pattern_type %U [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.b54: = require_complete_type %U [symbolic] // CHECK:STDOUT: %require_complete.fe1: = require_complete_type %tuple.type.30b [symbolic] // CHECK:STDOUT: %F.specific_fn.dd9: = specific_function %F, @F(%T, %U) [symbolic] // CHECK:STDOUT: %tuple.type.e8a: type = tuple_type (%C, %D) [concrete] +// CHECK:STDOUT: %pattern_type.9ec: type = pattern_type %tuple.type.e8a [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.4a7: = specific_function %F, @F(%C, %D) [concrete] @@ -97,12 +102,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc7_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc7_16.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc7_16.2 (constants.%U.patt)] -// CHECK:STDOUT: %pair.patt: @F.%tuple.type (%tuple.type.30b) = binding_pattern pair -// CHECK:STDOUT: %pair.param_patt: @F.%tuple.type (%tuple.type.30b) = value_param_pattern %pair.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%U.loc7_16.2 (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%U.loc7_16.2 (%U) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc7_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc7_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc7_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %pair.patt: @F.%pattern_type.loc7_26 (%pattern_type.65c) = binding_pattern pair +// CHECK:STDOUT: %pair.param_patt: @F.%pattern_type.loc7_26 (%pattern_type.65c) = value_param_pattern %pair.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc7_40 (%pattern_type.a32) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc7_40 (%pattern_type.a32) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc7_43: type = name_ref U, %U.loc7_16.1 [symbolic = %U.loc7_16.2 (constants.%U)] // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] @@ -119,10 +124,10 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %return: ref @F.%U.loc7_16.2 (%U) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %pair.patt: %tuple.type.e8a = binding_pattern pair -// CHECK:STDOUT: %pair.param_patt: %tuple.type.e8a = value_param_pattern %pair.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %pair.patt: %pattern_type.9ec = binding_pattern pair +// CHECK:STDOUT: %pair.param_patt: %pattern_type.9ec = value_param_pattern %pair.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc9_23: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %pair.param: %tuple.type.e8a = value_param call_param0 @@ -158,10 +163,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_6.1: type, %U.loc7_16.1: type) { // CHECK:STDOUT: %T.loc7_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc7_16.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc7_16.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc7_16.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc7_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc7_16.2 (constants.%U.patt)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc7_6.2, %U.loc7_16.2) [symbolic = %tuple.type (constants.%tuple.type.30b)] +// CHECK:STDOUT: %pattern_type.loc7_26: type = pattern_type %tuple.type [symbolic = %pattern_type.loc7_26 (constants.%pattern_type.65c)] +// CHECK:STDOUT: %pattern_type.loc7_40: type = pattern_type %U.loc7_16.2 [symbolic = %pattern_type.loc7_40 (constants.%pattern_type.a32)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_40: = require_complete_type %U.loc7_16.2 [symbolic = %require_complete.loc7_40 (constants.%require_complete.b54)] @@ -196,6 +203,8 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %U.loc7_16.2 => constants.%U // CHECK:STDOUT: %U.patt.loc7_16.2 => constants.%U.patt // CHECK:STDOUT: %tuple.type => constants.%tuple.type.30b +// CHECK:STDOUT: %pattern_type.loc7_26 => constants.%pattern_type.65c +// CHECK:STDOUT: %pattern_type.loc7_40 => constants.%pattern_type.a32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_40 => constants.%require_complete.b54 @@ -211,6 +220,8 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %U.loc7_16.2 => constants.%D // CHECK:STDOUT: %U.patt.loc7_16.2 => constants.%U.patt // CHECK:STDOUT: %tuple.type => constants.%tuple.type.e8a +// CHECK:STDOUT: %pattern_type.loc7_26 => constants.%pattern_type.9ec +// CHECK:STDOUT: %pattern_type.loc7_40 => constants.%pattern_type.510 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc7_40 => constants.%complete_type.357 @@ -226,18 +237,21 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %Pair: %tuple.type.d07 = bind_symbolic_name Pair, 0 [symbolic] -// CHECK:STDOUT: %Pair.patt: %tuple.type.d07 = symbolic_binding_pattern Pair, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] +// CHECK:STDOUT: %Pair.patt: %pattern_type.511 = symbolic_binding_pattern Pair, 0 [symbolic] // CHECK:STDOUT: %HasPair.type: type = generic_class_type @HasPair [concrete] // CHECK:STDOUT: %HasPair.generic: %HasPair.type = struct_value () [concrete] // CHECK:STDOUT: %HasPair.920: type = class_type @HasPair, @HasPair(%Pair) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %A: %i32 = bind_symbolic_name A, 0 [symbolic] -// CHECK:STDOUT: %A.patt: %i32 = symbolic_binding_pattern A, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.7ce = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %B: %i32 = bind_symbolic_name B, 1 [symbolic] -// CHECK:STDOUT: %B.patt: %i32 = symbolic_binding_pattern B, 1 [symbolic] +// CHECK:STDOUT: %B.patt: %pattern_type.7ce = symbolic_binding_pattern B, 1 [symbolic] // CHECK:STDOUT: %tuple.159: %tuple.type.d07 = tuple_value (%A, %B) [symbolic] // CHECK:STDOUT: %HasPair.568: type = class_type @HasPair, @HasPair(%tuple.159) [symbolic] +// CHECK:STDOUT: %pattern_type.88c: type = pattern_type %HasPair.568 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6bc: = require_complete_type %HasPair.568 [symbolic] @@ -261,6 +275,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %tuple.21c: %tuple.type.d07 = tuple_value (%int_1.5d2, %int_2.ef8) [concrete] // CHECK:STDOUT: %HasPair.369: type = class_type @HasPair, @HasPair(%tuple.21c) [concrete] +// CHECK:STDOUT: %pattern_type.93e: type = pattern_type %HasPair.369 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%int_1.5d2, %int_2.ef8) [concrete] @@ -284,7 +299,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasPair.decl: %HasPair.type = class_decl @HasPair [concrete = constants.%HasPair.generic] { -// CHECK:STDOUT: %Pair.patt.loc4_15.1: %tuple.type.d07 = symbolic_binding_pattern Pair, 0 [symbolic = %Pair.patt.loc4_15.2 (constants.%Pair.patt)] +// CHECK:STDOUT: %Pair.patt.loc4_15.1: %pattern_type.511 = symbolic_binding_pattern Pair, 0 [symbolic = %Pair.patt.loc4_15.2 (constants.%Pair.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_31.1: type = splice_block %.loc4_31.3 [concrete = constants.%tuple.type.d07] { // CHECK:STDOUT: %int_32.loc4_23: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -297,12 +312,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %Pair.loc4_15.1: %tuple.type.d07 = bind_symbolic_name Pair, 0 [symbolic = %Pair.loc4_15.2 (constants.%Pair)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %A.patt.loc6_6.1: %i32 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc6_6.2 (constants.%A.patt)] -// CHECK:STDOUT: %B.patt.loc6_15.1: %i32 = symbolic_binding_pattern B, 1 [symbolic = %B.patt.loc6_15.2 (constants.%B.patt)] -// CHECK:STDOUT: %h.patt: @F.%HasPair.loc6_41.2 (%HasPair.568) = binding_pattern h -// CHECK:STDOUT: %h.param_patt: @F.%HasPair.loc6_41.2 (%HasPair.568) = value_param_pattern %h.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %A.patt.loc6_6.1: %pattern_type.7ce = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc6_6.2 (constants.%A.patt)] +// CHECK:STDOUT: %B.patt.loc6_15.1: %pattern_type.7ce = symbolic_binding_pattern B, 1 [symbolic = %B.patt.loc6_15.2 (constants.%B.patt)] +// CHECK:STDOUT: %h.patt: @F.%pattern_type (%pattern_type.88c) = binding_pattern h +// CHECK:STDOUT: %h.param_patt: @F.%pattern_type (%pattern_type.88c) = value_param_pattern %h.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6_47: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6_47: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -331,10 +346,10 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %h.patt: %HasPair.369 = binding_pattern h -// CHECK:STDOUT: %h.param_patt: %HasPair.369 = value_param_pattern %h.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %h.patt: %pattern_type.93e = binding_pattern h +// CHECK:STDOUT: %h.param_patt: %pattern_type.93e = value_param_pattern %h.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -370,7 +385,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: // CHECK:STDOUT: generic class @HasPair(%Pair.loc4_15.1: %tuple.type.d07) { // CHECK:STDOUT: %Pair.loc4_15.2: %tuple.type.d07 = bind_symbolic_name Pair, 0 [symbolic = %Pair.loc4_15.2 (constants.%Pair)] -// CHECK:STDOUT: %Pair.patt.loc4_15.2: %tuple.type.d07 = symbolic_binding_pattern Pair, 0 [symbolic = %Pair.patt.loc4_15.2 (constants.%Pair.patt)] +// CHECK:STDOUT: %Pair.patt.loc4_15.2: %pattern_type.511 = symbolic_binding_pattern Pair, 0 [symbolic = %Pair.patt.loc4_15.2 (constants.%Pair.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -386,11 +401,12 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%A.loc6_6.1: %i32, %B.loc6_15.1: %i32) { // CHECK:STDOUT: %A.loc6_6.2: %i32 = bind_symbolic_name A, 0 [symbolic = %A.loc6_6.2 (constants.%A)] -// CHECK:STDOUT: %A.patt.loc6_6.2: %i32 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc6_6.2 (constants.%A.patt)] +// CHECK:STDOUT: %A.patt.loc6_6.2: %pattern_type.7ce = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc6_6.2 (constants.%A.patt)] // CHECK:STDOUT: %B.loc6_15.2: %i32 = bind_symbolic_name B, 1 [symbolic = %B.loc6_15.2 (constants.%B)] -// CHECK:STDOUT: %B.patt.loc6_15.2: %i32 = symbolic_binding_pattern B, 1 [symbolic = %B.patt.loc6_15.2 (constants.%B.patt)] +// CHECK:STDOUT: %B.patt.loc6_15.2: %pattern_type.7ce = symbolic_binding_pattern B, 1 [symbolic = %B.patt.loc6_15.2 (constants.%B.patt)] // CHECK:STDOUT: %tuple.loc6_40.2: %tuple.type.d07 = tuple_value (%A.loc6_6.2, %B.loc6_15.2) [symbolic = %tuple.loc6_40.2 (constants.%tuple.159)] // CHECK:STDOUT: %HasPair.loc6_41.2: type = class_type @HasPair, @HasPair(%tuple.loc6_40.2) [symbolic = %HasPair.loc6_41.2 (constants.%HasPair.568)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %HasPair.loc6_41.2 [symbolic = %pattern_type (constants.%pattern_type.88c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %HasPair.loc6_41.2 [symbolic = %require_complete (constants.%require_complete.6bc)] @@ -432,6 +448,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %B.patt.loc6_15.2 => constants.%B.patt // CHECK:STDOUT: %tuple.loc6_40.2 => constants.%tuple.159 // CHECK:STDOUT: %HasPair.loc6_41.2 => constants.%HasPair.568 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.88c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasPair(@F.%tuple.loc6_40.2) {} @@ -450,6 +467,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %B.patt.loc6_15.2 => constants.%B.patt // CHECK:STDOUT: %tuple.loc6_40.2 => constants.%tuple.21c // CHECK:STDOUT: %HasPair.loc6_41.2 => constants.%HasPair.369 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.93e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 @@ -463,12 +481,17 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d00: type = tuple_type (%T, %T) [symbolic] +// CHECK:STDOUT: %pattern_type.9a5: type = pattern_type %tuple.type.d00 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.e8a: type = tuple_type (%C, %D) [concrete] +// CHECK:STDOUT: %pattern_type.9ec: type = pattern_type %tuple.type.e8a [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -492,11 +515,11 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc7_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %pair.patt: @F.%tuple.type (%tuple.type.d00) = binding_pattern pair -// CHECK:STDOUT: %pair.param_patt: @F.%tuple.type (%tuple.type.d00) = value_param_pattern %pair.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc7_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc7_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc7_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %pair.patt: @F.%pattern_type.loc7_16 (%pattern_type.9a5) = binding_pattern pair +// CHECK:STDOUT: %pair.param_patt: @F.%pattern_type.loc7_16 (%pattern_type.9a5) = value_param_pattern %pair.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc7_30 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc7_30 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc7_33: type = name_ref T, %T.loc7_6.1 [symbolic = %T.loc7_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] @@ -512,10 +535,10 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %return: ref @F.%T.loc7_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %pair.patt: %tuple.type.e8a = binding_pattern pair -// CHECK:STDOUT: %pair.param_patt: %tuple.type.e8a = value_param_pattern %pair.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %pair.patt: %pattern_type.9ec = binding_pattern pair +// CHECK:STDOUT: %pair.param_patt: %pattern_type.9ec = value_param_pattern %pair.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc9_23: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %pair.param: %tuple.type.e8a = value_param call_param0 @@ -551,8 +574,10 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc7_6.1: type) { // CHECK:STDOUT: %T.loc7_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc7_6.2, %T.loc7_6.2) [symbolic = %tuple.type (constants.%tuple.type.d00)] +// CHECK:STDOUT: %pattern_type.loc7_16: type = pattern_type %tuple.type [symbolic = %pattern_type.loc7_16 (constants.%pattern_type.9a5)] +// CHECK:STDOUT: %pattern_type.loc7_30: type = pattern_type %T.loc7_6.2 [symbolic = %pattern_type.loc7_30 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%pair.param: @F.%tuple.type (%tuple.type.d00)) -> @F.%T.loc7_6.2 (%T); // CHECK:STDOUT: } @@ -568,5 +593,7 @@ fn G(pair: (C, D)) -> D { // CHECK:STDOUT: %T.loc7_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc7_6.2 => constants.%T.patt // CHECK:STDOUT: %tuple.type => constants.%tuple.type.d00 +// CHECK:STDOUT: %pattern_type.loc7_16 => constants.%pattern_type.9a5 +// CHECK:STDOUT: %pattern_type.loc7_30 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/deduce/type_operator.carbon b/toolchain/check/testdata/deduce/type_operator.carbon index d5de548abfe8..39dbfb26e894 100644 --- a/toolchain/check/testdata/deduce/type_operator.carbon +++ b/toolchain/check/testdata/deduce/type_operator.carbon @@ -70,14 +70,19 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [symbolic] // CHECK:STDOUT: %F.specific_fn.ef1: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.04a: = specific_function %F, @F(%C) [concrete] @@ -101,11 +106,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %p.patt: @F.%ptr.loc6_20.2 (%ptr.79f) = binding_pattern p -// CHECK:STDOUT: %p.param_patt: @F.%ptr.loc6_20.2 (%ptr.79f) = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc6_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc6_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6_16 (%pattern_type.afe) = binding_pattern p +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6_16 (%pattern_type.afe) = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_23 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_23 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_26: type = name_ref T, %T.loc6_6.1 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] @@ -119,10 +124,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %return: ref @F.%T.loc6_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %ptr.019 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.019 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.44a = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.44a = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8_16: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %p.param: %ptr.019 = value_param call_param0 @@ -147,8 +152,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc6_20.2: type = ptr_type %T.loc6_6.2 [symbolic = %ptr.loc6_20.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type.loc6_16: type = pattern_type %ptr.loc6_20.2 [symbolic = %pattern_type.loc6_16 (constants.%pattern_type.afe)] +// CHECK:STDOUT: %pattern_type.loc6_23: type = pattern_type %T.loc6_6.2 [symbolic = %pattern_type.loc6_23 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_23: = require_complete_type %T.loc6_6.2 [symbolic = %require_complete.loc6_23 (constants.%require_complete.4ae)] @@ -181,6 +188,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %T.loc6_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc6_20.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.afe +// CHECK:STDOUT: %pattern_type.loc6_23 => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_23 => constants.%require_complete.4ae @@ -194,6 +203,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %T.loc6_6.2 => constants.%C // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc6_20.2 => constants.%ptr.019 +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.44a +// CHECK:STDOUT: %pattern_type.loc6_23 => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_23 => constants.%complete_type.357 @@ -208,9 +219,12 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %const.a1a: type = const_type %T [symbolic] // CHECK:STDOUT: %ptr.6d4: type = ptr_type %const.a1a [symbolic] +// CHECK:STDOUT: %pattern_type.fa5: type = pattern_type %ptr.6d4 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -218,6 +232,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %F.specific_fn.ef1: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %const.668: type = const_type %C [concrete] // CHECK:STDOUT: %ptr.801: type = ptr_type %const.668 [concrete] +// CHECK:STDOUT: %pattern_type.c0d: type = pattern_type %ptr.801 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.04a: = specific_function %F, @F(%C) [concrete] @@ -241,11 +257,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %p.patt: @F.%ptr.loc6_26.2 (%ptr.6d4) = binding_pattern p -// CHECK:STDOUT: %p.param_patt: @F.%ptr.loc6_26.2 (%ptr.6d4) = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc6_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc6_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6_16 (%pattern_type.fa5) = binding_pattern p +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6_16 (%pattern_type.fa5) = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_29 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_29 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_32: type = name_ref T, %T.loc6_6.1 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] @@ -260,10 +276,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %return: ref @F.%T.loc6_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %ptr.801 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.801 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.c0d = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.c0d = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %p.param: %ptr.801 = value_param call_param0 @@ -289,9 +305,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: %const.loc6_19.2: type = const_type %T.loc6_6.2 [symbolic = %const.loc6_19.2 (constants.%const.a1a)] // CHECK:STDOUT: %ptr.loc6_26.2: type = ptr_type %const.loc6_19.2 [symbolic = %ptr.loc6_26.2 (constants.%ptr.6d4)] +// CHECK:STDOUT: %pattern_type.loc6_16: type = pattern_type %ptr.loc6_26.2 [symbolic = %pattern_type.loc6_16 (constants.%pattern_type.fa5)] +// CHECK:STDOUT: %pattern_type.loc6_29: type = pattern_type %T.loc6_6.2 [symbolic = %pattern_type.loc6_29 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_29: = require_complete_type %T.loc6_6.2 [symbolic = %require_complete.loc6_29 (constants.%require_complete.4ae)] @@ -325,6 +343,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %const.loc6_19.2 => constants.%const.a1a // CHECK:STDOUT: %ptr.loc6_26.2 => constants.%ptr.6d4 +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.fa5 +// CHECK:STDOUT: %pattern_type.loc6_29 => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_29 => constants.%require_complete.4ae @@ -339,6 +359,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %const.loc6_19.2 => constants.%const.668 // CHECK:STDOUT: %ptr.loc6_26.2 => constants.%ptr.801 +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.c0d +// CHECK:STDOUT: %pattern_type.loc6_29 => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_29 => constants.%complete_type.357 @@ -353,8 +375,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -362,6 +387,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %F.specific_fn.ef1: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %const: type = const_type %C [concrete] // CHECK:STDOUT: %ptr.801: type = ptr_type %const [concrete] +// CHECK:STDOUT: %pattern_type.c0d: type = pattern_type %ptr.801 [concrete] +// CHECK:STDOUT: %pattern_type.6af: type = pattern_type %const [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.486: = specific_function %F, @F(%const) [concrete] @@ -385,11 +412,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %p.patt: @F.%ptr.loc6_20.2 (%ptr.79f) = binding_pattern p -// CHECK:STDOUT: %p.param_patt: @F.%ptr.loc6_20.2 (%ptr.79f) = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc6_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc6_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6_16 (%pattern_type.afe) = binding_pattern p +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6_16 (%pattern_type.afe) = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_23 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_23 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_26: type = name_ref T, %T.loc6_6.1 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] @@ -403,10 +430,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %return: ref @F.%T.loc6_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %ptr.801 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.801 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %const = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %const = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.c0d = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.c0d = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.6af = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.6af = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8_28: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %const.loc8_22: type = const_type %C.ref.loc8_28 [concrete = constants.%const] @@ -433,8 +460,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc6_20.2: type = ptr_type %T.loc6_6.2 [symbolic = %ptr.loc6_20.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type.loc6_16: type = pattern_type %ptr.loc6_20.2 [symbolic = %pattern_type.loc6_16 (constants.%pattern_type.afe)] +// CHECK:STDOUT: %pattern_type.loc6_23: type = pattern_type %T.loc6_6.2 [symbolic = %pattern_type.loc6_23 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_23: = require_complete_type %T.loc6_6.2 [symbolic = %require_complete.loc6_23 (constants.%require_complete.4ae)] @@ -467,6 +496,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %T.loc6_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc6_20.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.afe +// CHECK:STDOUT: %pattern_type.loc6_23 => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_23 => constants.%require_complete.4ae @@ -480,6 +511,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %T.loc6_6.2 => constants.%const // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc6_20.2 => constants.%ptr.801 +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.c0d +// CHECK:STDOUT: %pattern_type.loc6_23 => constants.%pattern_type.6af // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_23 => constants.%complete_type.357 @@ -494,16 +527,21 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %const.a1a: type = const_type %T [symbolic] // CHECK:STDOUT: %ptr.6d4: type = ptr_type %const.a1a [symbolic] +// CHECK:STDOUT: %pattern_type.fa5: type = pattern_type %ptr.6d4 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %require_complete.20b: = require_complete_type %ptr.6d4 [symbolic] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%T) [symbolic] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %const.668: type = const_type %C [concrete] +// CHECK:STDOUT: %pattern_type.6af: type = pattern_type %const.668 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -525,11 +563,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %p.patt: @F.%ptr.loc6_26.2 (%ptr.6d4) = binding_pattern p -// CHECK:STDOUT: %p.param_patt: @F.%ptr.loc6_26.2 (%ptr.6d4) = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc6_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc6_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc6_16 (%pattern_type.fa5) = binding_pattern p +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc6_16 (%pattern_type.fa5) = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc6_29 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc6_29 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_32: type = name_ref T, %T.loc6_6.1 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] @@ -544,10 +582,10 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %return: ref @F.%T.loc6_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %p.patt: %ptr.019 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.019 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %const.668 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %const.668 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.44a = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.44a = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.6af = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.6af = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %const: type = const_type %C.ref.loc8_22 [concrete = constants.%const.668] @@ -573,9 +611,11 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: %const.loc6_19.2: type = const_type %T.loc6_6.2 [symbolic = %const.loc6_19.2 (constants.%const.a1a)] // CHECK:STDOUT: %ptr.loc6_26.2: type = ptr_type %const.loc6_19.2 [symbolic = %ptr.loc6_26.2 (constants.%ptr.6d4)] +// CHECK:STDOUT: %pattern_type.loc6_16: type = pattern_type %ptr.loc6_26.2 [symbolic = %pattern_type.loc6_16 (constants.%pattern_type.fa5)] +// CHECK:STDOUT: %pattern_type.loc6_29: type = pattern_type %T.loc6_6.2 [symbolic = %pattern_type.loc6_29 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_29: = require_complete_type %T.loc6_6.2 [symbolic = %require_complete.loc6_29 (constants.%require_complete.4ae)] @@ -606,6 +646,8 @@ fn G(p: C*) -> const C { // CHECK:STDOUT: %T.patt.loc6_6.2 => constants.%T.patt // CHECK:STDOUT: %const.loc6_19.2 => constants.%const.a1a // CHECK:STDOUT: %ptr.loc6_26.2 => constants.%ptr.6d4 +// CHECK:STDOUT: %pattern_type.loc6_16 => constants.%pattern_type.fa5 +// CHECK:STDOUT: %pattern_type.loc6_29 => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_29 => constants.%require_complete.4ae diff --git a/toolchain/check/testdata/deduce/value_with_type_through_access.carbon b/toolchain/check/testdata/deduce/value_with_type_through_access.carbon index 86d0ce9751d5..6a493552bd53 100644 --- a/toolchain/check/testdata/deduce/value_with_type_through_access.carbon +++ b/toolchain/check/testdata/deduce/value_with_type_through_access.carbon @@ -103,15 +103,18 @@ fn G() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %tuple.type: type = tuple_type (type) [concrete] // CHECK:STDOUT: %T: %tuple.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %tuple.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.f1e: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType.cc9: type = class_type @HoldsType, @HoldsType(%T) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.ec6: type = pattern_type %HoldsType.cc9 [symbolic] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.elem0: type = tuple_access %T, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.08e: type = pattern_type %tuple.elem0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.514: = require_complete_type %HoldsType.cc9 [symbolic] @@ -122,6 +125,8 @@ fn G() { // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%C) [concrete] // CHECK:STDOUT: %HoldsType.c09: type = class_type @HoldsType, @HoldsType(%tuple) [concrete] // CHECK:STDOUT: %HoldsType.val: %HoldsType.c09 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.8e0: type = pattern_type %HoldsType.c09 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%tuple) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -143,7 +148,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt.loc4_17.1: %tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_28.1: type = splice_block %.loc4_28.3 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.loc4_28.2: %tuple.type = tuple_literal (type) @@ -152,11 +157,11 @@ fn G() { // CHECK:STDOUT: %T.loc4_17.1: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc8_6.1: %tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%HoldsType.loc8_34.2 (%HoldsType.cc9) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%HoldsType.loc8_34.2 (%HoldsType.cc9) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %a.patt: @F.%tuple.elem0.loc8_41.2 (%tuple.elem0) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%tuple.elem0.loc8_41.2 (%tuple.elem0) = value_param_pattern %a.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_6.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type.loc8_20 (%pattern_type.ec6) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type.loc8_20 (%pattern_type.ec6) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc8_37 (%pattern_type.08e) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc8_37 (%pattern_type.08e) = value_param_pattern %a.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_17.1: type = splice_block %.loc8_17.3 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.loc8_17.2: %tuple.type = tuple_literal (type) @@ -184,7 +189,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_17.1: %tuple.type) { // CHECK:STDOUT: %T.loc4_17.2: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_17.2: %tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -209,9 +214,11 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_6.1: %tuple.type) { // CHECK:STDOUT: %T.loc8_6.2: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_6.2: %tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_6.2: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] // CHECK:STDOUT: %HoldsType.loc8_34.2: type = class_type @HoldsType, @HoldsType(%T.loc8_6.2) [symbolic = %HoldsType.loc8_34.2 (constants.%HoldsType.cc9)] +// CHECK:STDOUT: %pattern_type.loc8_20: type = pattern_type %HoldsType.loc8_34.2 [symbolic = %pattern_type.loc8_20 (constants.%pattern_type.ec6)] // CHECK:STDOUT: %tuple.elem0.loc8_41.2: type = tuple_access %T.loc8_6.2, element0 [symbolic = %tuple.elem0.loc8_41.2 (constants.%tuple.elem0)] +// CHECK:STDOUT: %pattern_type.loc8_37: type = pattern_type %tuple.elem0.loc8_41.2 [symbolic = %pattern_type.loc8_37 (constants.%pattern_type.08e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_21: = require_complete_type %HoldsType.loc8_34.2 [symbolic = %require_complete.loc8_21 (constants.%require_complete.514)] @@ -260,7 +267,9 @@ fn G() { // CHECK:STDOUT: %T.loc8_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_6.2 => constants.%T.patt // CHECK:STDOUT: %HoldsType.loc8_34.2 => constants.%HoldsType.cc9 +// CHECK:STDOUT: %pattern_type.loc8_20 => constants.%pattern_type.ec6 // CHECK:STDOUT: %tuple.elem0.loc8_41.2 => constants.%tuple.elem0 +// CHECK:STDOUT: %pattern_type.loc8_37 => constants.%pattern_type.08e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(@F.%T.loc8_6.2) {} @@ -276,7 +285,9 @@ fn G() { // CHECK:STDOUT: %T.loc8_6.2 => constants.%tuple // CHECK:STDOUT: %T.patt.loc8_6.2 => constants.%T.patt // CHECK:STDOUT: %HoldsType.loc8_34.2 => constants.%HoldsType.c09 +// CHECK:STDOUT: %pattern_type.loc8_20 => constants.%pattern_type.8e0 // CHECK:STDOUT: %tuple.elem0.loc8_41.2 => constants.%C +// CHECK:STDOUT: %pattern_type.loc8_37 => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_21 => constants.%complete_type @@ -288,14 +299,17 @@ fn G() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %struct_type.t: type = struct_type {.t: type} [concrete] // CHECK:STDOUT: %T: %struct_type.t = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %struct_type.t = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7f2: type = pattern_type %struct_type.t [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType.843: type = class_type @HoldsType, @HoldsType(%T) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.aa4: type = pattern_type %HoldsType.843 [symbolic] // CHECK:STDOUT: %.20a: type = struct_access %T, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.9f0: type = pattern_type %.20a [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.b19: = require_complete_type %HoldsType.843 [symbolic] @@ -306,6 +320,8 @@ fn G() { // CHECK:STDOUT: %struct: %struct_type.t = struct_value (%C) [concrete] // CHECK:STDOUT: %HoldsType.705: type = class_type @HoldsType, @HoldsType(%struct) [concrete] // CHECK:STDOUT: %HoldsType.val: %HoldsType.705 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.50b: type = pattern_type %HoldsType.705 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%struct) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } @@ -327,17 +343,17 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt.loc4_17.1: %struct_type.t = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %struct_type.t: type = struct_type {.t: type} [concrete = constants.%struct_type.t] // CHECK:STDOUT: %T.loc4_17.1: %struct_type.t = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc8_6.1: %struct_type.t = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%HoldsType.loc8_36.2 (%HoldsType.843) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%HoldsType.loc8_36.2 (%HoldsType.843) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %a.patt: @F.%.loc8_43.3 (%.20a) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%.loc8_43.3 (%.20a) = value_param_pattern %a.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_6.1: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type.loc8_22 (%pattern_type.aa4) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type.loc8_22 (%pattern_type.aa4) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc8_39 (%pattern_type.9f0) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type.loc8_39 (%pattern_type.9f0) = value_param_pattern %a.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %struct_type.t: type = struct_type {.t: type} [concrete = constants.%struct_type.t] // CHECK:STDOUT: %T.loc8_6.1: %struct_type.t = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.2 (constants.%T)] @@ -361,7 +377,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_17.1: %struct_type.t) { // CHECK:STDOUT: %T.loc4_17.2: %struct_type.t = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_17.2: %struct_type.t = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -386,9 +402,11 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_6.1: %struct_type.t) { // CHECK:STDOUT: %T.loc8_6.2: %struct_type.t = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_6.2: %struct_type.t = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_6.2: %pattern_type.7f2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] // CHECK:STDOUT: %HoldsType.loc8_36.2: type = class_type @HoldsType, @HoldsType(%T.loc8_6.2) [symbolic = %HoldsType.loc8_36.2 (constants.%HoldsType.843)] +// CHECK:STDOUT: %pattern_type.loc8_22: type = pattern_type %HoldsType.loc8_36.2 [symbolic = %pattern_type.loc8_22 (constants.%pattern_type.aa4)] // CHECK:STDOUT: %.loc8_43.3: type = struct_access %T.loc8_6.2, element0 [symbolic = %.loc8_43.3 (constants.%.20a)] +// CHECK:STDOUT: %pattern_type.loc8_39: type = pattern_type %.loc8_43.3 [symbolic = %pattern_type.loc8_39 (constants.%pattern_type.9f0)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_23: = require_complete_type %HoldsType.loc8_36.2 [symbolic = %require_complete.loc8_23 (constants.%require_complete.b19)] @@ -437,7 +455,9 @@ fn G() { // CHECK:STDOUT: %T.loc8_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_6.2 => constants.%T.patt // CHECK:STDOUT: %HoldsType.loc8_36.2 => constants.%HoldsType.843 +// CHECK:STDOUT: %pattern_type.loc8_22 => constants.%pattern_type.aa4 // CHECK:STDOUT: %.loc8_43.3 => constants.%.20a +// CHECK:STDOUT: %pattern_type.loc8_39 => constants.%pattern_type.9f0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(@F.%T.loc8_6.2) {} @@ -453,7 +473,9 @@ fn G() { // CHECK:STDOUT: %T.loc8_6.2 => constants.%struct // CHECK:STDOUT: %T.patt.loc8_6.2 => constants.%T.patt // CHECK:STDOUT: %HoldsType.loc8_36.2 => constants.%HoldsType.705 +// CHECK:STDOUT: %pattern_type.loc8_22 => constants.%pattern_type.50b // CHECK:STDOUT: %.loc8_43.3 => constants.%C +// CHECK:STDOUT: %pattern_type.loc8_39 => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_23 => constants.%complete_type @@ -468,12 +490,14 @@ fn G() { // CHECK:STDOUT: %struct_type.t: type = struct_type {.t: type} [concrete] // CHECK:STDOUT: %complete_type.509: = complete_type_witness %struct_type.t [concrete] // CHECK:STDOUT: %T: %Class = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Class = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.761: type = pattern_type %Class [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.761 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType.f95cf2.1: type = class_type @HoldsType, @HoldsType(%T) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.937: type = pattern_type %HoldsType.f95cf2.1 [symbolic] // CHECK:STDOUT: %.2fe: ref type = class_element_access %T, element0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -482,7 +506,7 @@ fn G() { // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %c: %Class = bind_symbolic_name c, 0 [symbolic] -// CHECK:STDOUT: %c.patt: %Class = symbolic_binding_pattern c, 0 [symbolic] +// CHECK:STDOUT: %c.patt: %pattern_type.761 = symbolic_binding_pattern c, 0 [symbolic] // CHECK:STDOUT: %Class.val: %Class = struct_value (%C) [concrete] // CHECK:STDOUT: %HoldsType.f95cf2.2: type = class_type @HoldsType, @HoldsType(%c) [symbolic] // CHECK:STDOUT: %HoldsType.val: %HoldsType.f95cf2.2 = struct_value () [symbolic] @@ -507,15 +531,15 @@ fn G() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt.loc8_17.1: %Class = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_17.1: %pattern_type.761 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %T.loc8_17.1: %Class = bind_symbolic_name T, 0 [symbolic = %T.loc8_17.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc21_6.1: %Class = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%HoldsType.loc21_31.2 (%HoldsType.f95cf2.1) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%HoldsType.loc21_31.2 (%HoldsType.f95cf2.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc21_6.1: %pattern_type.761 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.937) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.937) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: %a.patt: = binding_pattern a // CHECK:STDOUT: %a.param_patt: = value_param_pattern %a.patt, call_param1 [concrete = ] // CHECK:STDOUT: } { @@ -554,7 +578,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc8_17.1: %Class) { // CHECK:STDOUT: %T.loc8_17.2: %Class = bind_symbolic_name T, 0 [symbolic = %T.loc8_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_17.2: %Class = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_17.2: %pattern_type.761 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -579,8 +603,9 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc21_6.1: %Class) { // CHECK:STDOUT: %T.loc21_6.2: %Class = bind_symbolic_name T, 0 [symbolic = %T.loc21_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_6.2: %Class = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_6.2: %pattern_type.761 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_6.2 (constants.%T.patt)] // CHECK:STDOUT: %HoldsType.loc21_31.2: type = class_type @HoldsType, @HoldsType(%T.loc21_6.2) [symbolic = %HoldsType.loc21_31.2 (constants.%HoldsType.f95cf2.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %HoldsType.loc21_31.2 [symbolic = %pattern_type (constants.%pattern_type.937)] // CHECK:STDOUT: %.loc21_38.3: ref type = class_element_access %T.loc21_6.2, element0 [symbolic = %.loc21_38.3 (constants.%.2fe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -595,7 +620,7 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Class = symbolic_binding_pattern c, 0 [symbolic = constants.%c.patt] +// CHECK:STDOUT: %c.patt: %pattern_type.761 = symbolic_binding_pattern c, 0 [symbolic = constants.%c.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc26_26.1: %struct_type.t = struct_literal (%C.ref) @@ -632,6 +657,7 @@ fn G() { // CHECK:STDOUT: %T.loc21_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc21_6.2 => constants.%T.patt // CHECK:STDOUT: %HoldsType.loc21_31.2 => constants.%HoldsType.f95cf2.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.937 // CHECK:STDOUT: %.loc21_38.3 => constants.%.2fe // CHECK:STDOUT: } // CHECK:STDOUT: @@ -650,12 +676,14 @@ fn G() { // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, type [concrete] // CHECK:STDOUT: %T: %array_type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %array_type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dcb: type = pattern_type %array_type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] // CHECK:STDOUT: %HoldsType: type = class_type @HoldsType, @HoldsType(%T) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.142: type = pattern_type %HoldsType [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] @@ -700,7 +728,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt.loc4_17.1: %array_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.1: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %array_type [concrete = constants.%array_type] { // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] @@ -709,9 +737,9 @@ fn G() { // CHECK:STDOUT: %T.loc4_17.1: %array_type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc12_6.1: %array_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%HoldsType.loc12_40.2 (%HoldsType) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%HoldsType.loc12_40.2 (%HoldsType) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc12_6.1: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.142) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.142) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: %a.patt: = binding_pattern a // CHECK:STDOUT: %a.param_patt: = value_param_pattern %a.patt, call_param1 [concrete = ] // CHECK:STDOUT: } { @@ -752,7 +780,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc4_17.1: %array_type) { // CHECK:STDOUT: %T.loc4_17.2: %array_type = bind_symbolic_name T, 0 [symbolic = %T.loc4_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_17.2: %array_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_17.2: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -777,8 +805,9 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc12_6.1: %array_type) { // CHECK:STDOUT: %T.loc12_6.2: %array_type = bind_symbolic_name T, 0 [symbolic = %T.loc12_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_6.2: %array_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_6.2: %pattern_type.dcb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_6.2 (constants.%T.patt)] // CHECK:STDOUT: %HoldsType.loc12_40.2: type = class_type @HoldsType, @HoldsType(%T.loc12_6.2) [symbolic = %HoldsType.loc12_40.2 (constants.%HoldsType)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %HoldsType.loc12_40.2 [symbolic = %pattern_type (constants.%pattern_type.142)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %HoldsType.loc12_40.2 [symbolic = %require_complete (constants.%require_complete.640)] @@ -821,6 +850,7 @@ fn G() { // CHECK:STDOUT: %T.loc12_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc12_6.2 => constants.%T.patt // CHECK:STDOUT: %HoldsType.loc12_40.2 => constants.%HoldsType +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.142 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(@F.%T.loc12_6.2) {} diff --git a/toolchain/check/testdata/eval/aggregate.carbon b/toolchain/check/testdata/eval/aggregate.carbon index 5b44d4cca794..728d8c204eb7 100644 --- a/toolchain/check/testdata/eval/aggregate.carbon +++ b/toolchain/check/testdata/eval/aggregate.carbon @@ -23,6 +23,7 @@ var struct_access: array(i32, 1) = (0,) as array(i32, {.a = 3, .b = 1}.b); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -43,6 +44,7 @@ var struct_access: array(i32, 1) = (0,) as array(i32, {.a = 3, .b = 1}.b); // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %tuple.21c: %tuple.type.d07 = tuple_value (%int_1.5d2, %int_2.ef8) [concrete] // CHECK:STDOUT: %struct_type.a.b.c: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.8ae: type = pattern_type %struct_type.a.b.c [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %struct_type.c.b.a: type = struct_type {.c: Core.IntLiteral, .b: Core.IntLiteral, .a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct_type.b.a.c: type = struct_type {.b: %i32, .a: %i32, .c: %i32} [concrete] @@ -52,6 +54,7 @@ var struct_access: array(i32, 1) = (0,) as array(i32, {.a = 3, .b = 1}.b); // CHECK:STDOUT: %struct.21d: %struct_type.b.a.c = struct_value (%int_2.ef8, %int_1.5d2, %int_3.822) [concrete] // CHECK:STDOUT: %struct.cff: %struct_type.a.b.c = struct_value (%int_1.5d2, %int_2.ef8, %int_3.822) [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] @@ -86,8 +89,8 @@ var struct_access: array(i32, 1) = (0,) as array(i32, {.a = 3, .b = 1}.b); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %tuple_copy.patt: %tuple.type.d07 = binding_pattern tuple_copy -// CHECK:STDOUT: %.loc11_1: %tuple.type.d07 = var_pattern %tuple_copy.patt +// CHECK:STDOUT: %tuple_copy.patt: %pattern_type.511 = binding_pattern tuple_copy +// CHECK:STDOUT: %.loc11_1: %pattern_type.511 = var_pattern %tuple_copy.patt // CHECK:STDOUT: } // CHECK:STDOUT: %tuple_copy.var: ref %tuple.type.d07 = var tuple_copy // CHECK:STDOUT: %.loc11_26.1: type = splice_block %.loc11_26.3 [concrete = constants.%tuple.type.d07] { @@ -100,8 +103,8 @@ var struct_access: array(i32, 1) = (0,) as array(i32, {.a = 3, .b = 1}.b); // CHECK:STDOUT: } // CHECK:STDOUT: %tuple_copy: ref %tuple.type.d07 = bind_name tuple_copy, %tuple_copy.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %struct_copy.patt: %struct_type.a.b.c = binding_pattern struct_copy -// CHECK:STDOUT: %.loc13_1: %struct_type.a.b.c = var_pattern %struct_copy.patt +// CHECK:STDOUT: %struct_copy.patt: %pattern_type.8ae = binding_pattern struct_copy +// CHECK:STDOUT: %.loc13_1: %pattern_type.8ae = var_pattern %struct_copy.patt // CHECK:STDOUT: } // CHECK:STDOUT: %struct_copy.var: ref %struct_type.a.b.c = var struct_copy // CHECK:STDOUT: %.loc13_44: type = splice_block %struct_type.a.b.c [concrete = constants.%struct_type.a.b.c] { @@ -115,8 +118,8 @@ var struct_access: array(i32, 1) = (0,) as array(i32, {.a = 3, .b = 1}.b); // CHECK:STDOUT: } // CHECK:STDOUT: %struct_copy: ref %struct_type.a.b.c = bind_name struct_copy, %struct_copy.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %tuple_index.patt: %array_type = binding_pattern tuple_index -// CHECK:STDOUT: %.loc15_1: %array_type = var_pattern %tuple_index.patt +// CHECK:STDOUT: %tuple_index.patt: %pattern_type.a98 = binding_pattern tuple_index +// CHECK:STDOUT: %.loc15_1: %pattern_type.a98 = var_pattern %tuple_index.patt // CHECK:STDOUT: } // CHECK:STDOUT: %tuple_index.var: ref %array_type = var tuple_index // CHECK:STDOUT: %.loc15_30: type = splice_block %array_type.loc15 [concrete = constants.%array_type] { @@ -127,8 +130,8 @@ var struct_access: array(i32, 1) = (0,) as array(i32, {.a = 3, .b = 1}.b); // CHECK:STDOUT: } // CHECK:STDOUT: %tuple_index: ref %array_type = bind_name tuple_index, %tuple_index.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %struct_access.patt: %array_type = binding_pattern struct_access -// CHECK:STDOUT: %.loc17_1: %array_type = var_pattern %struct_access.patt +// CHECK:STDOUT: %struct_access.patt: %pattern_type.a98 = binding_pattern struct_access +// CHECK:STDOUT: %.loc17_1: %pattern_type.a98 = var_pattern %struct_access.patt // CHECK:STDOUT: } // CHECK:STDOUT: %struct_access.var: ref %array_type = var struct_access // CHECK:STDOUT: %.loc17_32: type = splice_block %array_type.loc17 [concrete = constants.%array_type] { diff --git a/toolchain/check/testdata/eval/fail_aggregate.carbon b/toolchain/check/testdata/eval/fail_aggregate.carbon index cbddbc35b12e..83330b8b5643 100644 --- a/toolchain/check/testdata/eval/fail_aggregate.carbon +++ b/toolchain/check/testdata/eval/fail_aggregate.carbon @@ -23,6 +23,7 @@ var array_index: array(i32, 1) = (0,) as array(i32, ((5, 7, 1, 9) as array(i32, // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type.0cb: type = array_type %int_1.5b8, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type.0cb [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] @@ -76,8 +77,8 @@ var array_index: array(i32, 1) = (0,) as array(i32, ((5, 7, 1, 9) as array(i32, // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %array_index.patt: %array_type.0cb = binding_pattern array_index -// CHECK:STDOUT: %.loc17_1: %array_type.0cb = var_pattern %array_index.patt +// CHECK:STDOUT: %array_index.patt: %pattern_type.a98 = binding_pattern array_index +// CHECK:STDOUT: %.loc17_1: %pattern_type.a98 = var_pattern %array_index.patt // CHECK:STDOUT: } // CHECK:STDOUT: %array_index.var: ref %array_type.0cb = var array_index // CHECK:STDOUT: %.loc17_30: type = splice_block %array_type [concrete = constants.%array_type.0cb] { diff --git a/toolchain/check/testdata/eval/symbolic.carbon b/toolchain/check/testdata/eval/symbolic.carbon index 1117a3c1372b..b168619cb7ec 100644 --- a/toolchain/check/testdata/eval/symbolic.carbon +++ b/toolchain/check/testdata/eval/symbolic.carbon @@ -23,7 +23,8 @@ fn G(N:! i32) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] @@ -31,15 +32,19 @@ fn G(N:! i32) { // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.4f2: type = tuple_type (%ptr.79f, %const) [symbolic] // CHECK:STDOUT: %require_complete.155: = require_complete_type %tuple.type.4f2 [symbolic] +// CHECK:STDOUT: %pattern_type.973: type = pattern_type %tuple.type.4f2 [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T} [symbolic] // CHECK:STDOUT: %require_complete.28a: = require_complete_type %struct_type.a [symbolic] +// CHECK:STDOUT: %pattern_type.95a: type = pattern_type %struct_type.a [symbolic] // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %array_type.ec2: type = array_type %int_5, %T [symbolic] // CHECK:STDOUT: %require_complete.fe1: = require_complete_type %array_type.ec2 [symbolic] +// CHECK:STDOUT: %pattern_type.035: type = pattern_type %array_type.ec2 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.2fd: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete] @@ -56,6 +61,7 @@ fn G(N:! i32) { // CHECK:STDOUT: %int.convert_checked: init Core.IntLiteral = call %bound_method(%N.51e) [symbolic] // CHECK:STDOUT: %array_type.c7c: type = array_type %int.convert_checked, %i32 [symbolic] // CHECK:STDOUT: %require_complete.7cb: = require_complete_type %array_type.c7c [symbolic] +// CHECK:STDOUT: %pattern_type.ccc: type = pattern_type %array_type.c7c [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -75,12 +81,12 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc12_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc12_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_6.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %N.patt.loc18_6.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc18_6.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc18_6.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc18_6.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18: type = splice_block %i32.loc18 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -92,23 +98,26 @@ fn G(N:! i32) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc12_6.1: type) { // CHECK:STDOUT: %T.loc12_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ptr.loc13_12.2: type = ptr_type %T.loc12_6.2 [symbolic = %ptr.loc13_12.2 (constants.%ptr.79f)] // CHECK:STDOUT: %const.loc13_15.2: type = const_type %T.loc12_6.2 [symbolic = %const.loc13_15.2 (constants.%const)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%ptr.loc13_12.2, %const.loc13_15.2) [symbolic = %tuple.type (constants.%tuple.type.4f2)] // CHECK:STDOUT: %require_complete.loc13: = require_complete_type %tuple.type [symbolic = %require_complete.loc13 (constants.%require_complete.155)] +// CHECK:STDOUT: %pattern_type.loc13: type = pattern_type %tuple.type [symbolic = %pattern_type.loc13 (constants.%pattern_type.973)] // CHECK:STDOUT: %struct_type.a.loc14_16.2: type = struct_type {.a: @F.%T.loc12_6.2 (%T)} [symbolic = %struct_type.a.loc14_16.2 (constants.%struct_type.a)] // CHECK:STDOUT: %require_complete.loc14: = require_complete_type %struct_type.a.loc14_16.2 [symbolic = %require_complete.loc14 (constants.%require_complete.28a)] +// CHECK:STDOUT: %pattern_type.loc14: type = pattern_type %struct_type.a.loc14_16.2 [symbolic = %pattern_type.loc14 (constants.%pattern_type.95a)] // CHECK:STDOUT: %array_type.loc15_20.2: type = array_type constants.%int_5, %T.loc12_6.2 [symbolic = %array_type.loc15_20.2 (constants.%array_type.ec2)] // CHECK:STDOUT: %require_complete.loc15: = require_complete_type %array_type.loc15_20.2 [symbolic = %require_complete.loc15 (constants.%require_complete.fe1)] +// CHECK:STDOUT: %pattern_type.loc15: type = pattern_type %array_type.loc15_20.2 [symbolic = %pattern_type.loc15 (constants.%pattern_type.035)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %u.patt: @F.%tuple.type (%tuple.type.4f2) = binding_pattern u -// CHECK:STDOUT: %.loc13_3: @F.%tuple.type (%tuple.type.4f2) = var_pattern %u.patt +// CHECK:STDOUT: %u.patt: @F.%pattern_type.loc13 (%pattern_type.973) = binding_pattern u +// CHECK:STDOUT: %.loc13_3: @F.%pattern_type.loc13 (%pattern_type.973) = var_pattern %u.patt // CHECK:STDOUT: } // CHECK:STDOUT: %u.var: ref @F.%tuple.type (%tuple.type.4f2) = var u // CHECK:STDOUT: %.loc13_22.1: type = splice_block %.loc13_22.3 [symbolic = %tuple.type (constants.%tuple.type.4f2)] { @@ -121,8 +130,8 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %u: ref @F.%tuple.type (%tuple.type.4f2) = bind_name u, %u.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%struct_type.a.loc14_16.2 (%struct_type.a) = binding_pattern v -// CHECK:STDOUT: %.loc14_3: @F.%struct_type.a.loc14_16.2 (%struct_type.a) = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: @F.%pattern_type.loc14 (%pattern_type.95a) = binding_pattern v +// CHECK:STDOUT: %.loc14_3: @F.%pattern_type.loc14 (%pattern_type.95a) = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @F.%struct_type.a.loc14_16.2 (%struct_type.a) = var v // CHECK:STDOUT: %.loc14_16: type = splice_block %struct_type.a.loc14_16.1 [symbolic = %struct_type.a.loc14_16.2 (constants.%struct_type.a)] { @@ -131,8 +140,8 @@ fn G(N:! i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @F.%struct_type.a.loc14_16.2 (%struct_type.a) = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: @F.%array_type.loc15_20.2 (%array_type.ec2) = binding_pattern w -// CHECK:STDOUT: %.loc15_3: @F.%array_type.loc15_20.2 (%array_type.ec2) = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: @F.%pattern_type.loc15 (%pattern_type.035) = binding_pattern w +// CHECK:STDOUT: %.loc15_3: @F.%pattern_type.loc15 (%pattern_type.035) = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref @F.%array_type.loc15_20.2 (%array_type.ec2) = var w // CHECK:STDOUT: %.loc15_20: type = splice_block %array_type.loc15_20.1 [symbolic = %array_type.loc15_20.2 (constants.%array_type.ec2)] { @@ -147,7 +156,7 @@ fn G(N:! i32) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%N.loc18_6.1: %i32) { // CHECK:STDOUT: %N.loc18_6.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc18_6.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc18_6.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc18_6.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc18_6.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc18_6.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Convert.bound: = bound_method %N.loc18_6.2, constants.%Convert.960 [symbolic = %Convert.bound (constants.%Convert.bound)] @@ -155,12 +164,13 @@ fn G(N:! i32) { // CHECK:STDOUT: %int.convert_checked.loc19_21.2: init Core.IntLiteral = call %bound_method.loc19_21.3(%N.loc18_6.2) [symbolic = %int.convert_checked.loc19_21.2 (constants.%int.convert_checked)] // CHECK:STDOUT: %array_type.loc19_22.2: type = array_type %int.convert_checked.loc19_21.2, constants.%i32 [symbolic = %array_type.loc19_22.2 (constants.%array_type.c7c)] // CHECK:STDOUT: %require_complete: = require_complete_type %array_type.loc19_22.2 [symbolic = %require_complete (constants.%require_complete.7cb)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc19_22.2 [symbolic = %pattern_type (constants.%pattern_type.ccc)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %k.patt: @G.%array_type.loc19_22.2 (%array_type.c7c) = binding_pattern k -// CHECK:STDOUT: %.loc19_3: @G.%array_type.loc19_22.2 (%array_type.c7c) = var_pattern %k.patt +// CHECK:STDOUT: %k.patt: @G.%pattern_type (%pattern_type.ccc) = binding_pattern k +// CHECK:STDOUT: %.loc19_3: @G.%pattern_type (%pattern_type.ccc) = var_pattern %k.patt // CHECK:STDOUT: } // CHECK:STDOUT: %k.var: ref @G.%array_type.loc19_22.2 (%array_type.c7c) = var k // CHECK:STDOUT: %.loc19_22: type = splice_block %array_type.loc19_22.1 [symbolic = %array_type.loc19_22.2 (constants.%array_type.c7c)] { @@ -188,6 +198,6 @@ fn G(N:! i32) { // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%N.51e) { // CHECK:STDOUT: %N.loc18_6.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc18_6.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc18_6.2 => constants.%N.patt.f2c // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/expr_category/in_place_tuple_init.carbon b/toolchain/check/testdata/expr_category/in_place_tuple_init.carbon index 6449fa01c654..add51fecdd6a 100644 --- a/toolchain/check/testdata/expr_category/in_place_tuple_init.carbon +++ b/toolchain/check/testdata/expr_category/in_place_tuple_init.carbon @@ -27,10 +27,12 @@ fn H() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -53,8 +55,8 @@ fn H() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %tuple.type.d07 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.d07 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.511 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.511 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -66,8 +68,8 @@ fn H() -> i32 { // CHECK:STDOUT: %return: ref %tuple.type.d07 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %tuple.type.d07 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.d07 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.511 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.511 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc13_12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc13_12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -79,8 +81,8 @@ fn H() -> i32 { // CHECK:STDOUT: %return: ref %tuple.type.d07 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -94,8 +96,8 @@ fn H() -> i32 { // CHECK:STDOUT: fn @G() -> %return.param: %tuple.type.d07 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %tuple.type.d07 = binding_pattern v -// CHECK:STDOUT: %.loc14_3.1: %tuple.type.d07 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.511 = binding_pattern v +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.511 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %tuple.type.d07 = var v // CHECK:STDOUT: %F.ref.loc14: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] diff --git a/toolchain/check/testdata/facet/min_prelude/access.carbon b/toolchain/check/testdata/facet/min_prelude/access.carbon index 5ae2f48ddb33..f1b28a8d1dcd 100644 --- a/toolchain/check/testdata/facet/min_prelude/access.carbon +++ b/toolchain/check/testdata/facet/min_prelude/access.carbon @@ -154,7 +154,8 @@ interface J { // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%DoIt.decl [concrete] // CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] @@ -180,7 +181,7 @@ interface J { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] { -// CHECK:STDOUT: %T.patt.loc8_8.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_8.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: %T.loc8_8.1: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] @@ -204,7 +205,7 @@ interface J { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Use(%T.loc8_8.1: %I.type) { // CHECK:STDOUT: %T.loc8_8.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_8.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_8.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc9_4.2: type = facet_access_type %T.loc8_8.2 [symbolic = %T.as_type.loc9_4.2 (constants.%T.as_type)] @@ -244,13 +245,16 @@ interface J { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.6de4e4.1: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%Make.decl [concrete] // CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.6de4e4.2: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -276,9 +280,9 @@ interface J { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] { -// CHECK:STDOUT: %T.patt.loc8_8.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] -// CHECK:STDOUT: %return.patt: @Use.%T.as_type.loc8_18.2 (%T.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Use.%T.as_type.loc8_18.2 (%T.as_type) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc8_8.1: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %return.patt: @Use.%pattern_type (%pattern_type.6de4e4.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Use.%pattern_type (%pattern_type.6de4e4.2) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8: %I.type = name_ref T, %T.loc8_8.1 [symbolic = %T.loc8_8.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc8_18.1: type = facet_access_type %T.ref.loc8 [symbolic = %T.as_type.loc8_18.2 (constants.%T.as_type)] @@ -293,8 +297,8 @@ interface J { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: @Make.%Self.as_type.loc5_16.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Make.%Self.as_type.loc5_16.1 (%Self.as_type) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Make.%pattern_type (%pattern_type.6de4e4.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Make.%pattern_type (%pattern_type.6de4e4.1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_16.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_16.1 (constants.%Self.as_type)] @@ -313,14 +317,16 @@ interface J { // CHECK:STDOUT: generic fn @Make(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_16.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_16.1 [symbolic = %pattern_type (constants.%pattern_type.6de4e4.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @Make.%Self.as_type.loc5_16.1 (%Self.as_type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Use(%T.loc8_8.1: %I.type) { // CHECK:STDOUT: %T.loc8_8.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_8.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_8.2: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc8_18.2: type = facet_access_type %T.loc8_8.2 [symbolic = %T.as_type.loc8_18.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_18.2 [symbolic = %pattern_type (constants.%pattern_type.6de4e4.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc8_18.2 [symbolic = %require_complete (constants.%require_complete)] @@ -348,17 +354,20 @@ interface J { // CHECK:STDOUT: specific @Make(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_16.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Use(constants.%T) { // CHECK:STDOUT: %T.loc8_8.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_8.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc8_18.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc5_16.1 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(@Use.%I.facet) {} @@ -369,13 +378,16 @@ interface J { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.6de4e4.1: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Copy.type: type = fn_type @Copy [concrete] // CHECK:STDOUT: %Copy: %Copy.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%Copy.decl [concrete] // CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.6de4e4.2: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -401,11 +413,11 @@ interface J { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] { -// CHECK:STDOUT: %T.patt.loc8_8.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Use.%T.as_type.loc8_18.2 (%T.as_type) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Use.%T.as_type.loc8_18.2 (%T.as_type) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Use.%T.as_type.loc8_18.2 (%T.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Use.%T.as_type.loc8_18.2 (%T.as_type) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_8.1: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Use.%pattern_type (%pattern_type.6de4e4.2) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Use.%pattern_type (%pattern_type.6de4e4.2) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Use.%pattern_type (%pattern_type.6de4e4.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Use.%pattern_type (%pattern_type.6de4e4.2) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_24: %I.type = name_ref T, %T.loc8_8.1 [symbolic = %T.loc8_8.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc8_24: type = facet_access_type %T.ref.loc8_24 [symbolic = %T.as_type.loc8_18.2 (constants.%T.as_type)] @@ -427,10 +439,10 @@ interface J { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Copy.decl: %Copy.type = fn_decl @Copy [concrete = constants.%Copy] { -// CHECK:STDOUT: %self.patt: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Copy.%pattern_type (%pattern_type.6de4e4.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Copy.%pattern_type (%pattern_type.6de4e4.1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Copy.%pattern_type (%pattern_type.6de4e4.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Copy.%pattern_type (%pattern_type.6de4e4.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc5_28: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_28: type = facet_access_type %Self.ref.loc5_28 [symbolic = %Self.as_type.loc5_17.1 (constants.%Self.as_type)] @@ -456,14 +468,16 @@ interface J { // CHECK:STDOUT: generic fn @Copy(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_17.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_17.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_17.1 [symbolic = %pattern_type (constants.%pattern_type.6de4e4.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type)) -> @Copy.%Self.as_type.loc5_17.1 (%Self.as_type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Use(%T.loc8_8.1: %I.type) { // CHECK:STDOUT: %T.loc8_8.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_8.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_8.2: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc8_18.2: type = facet_access_type %T.loc8_8.2 [symbolic = %T.as_type.loc8_18.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_18.2 [symbolic = %pattern_type (constants.%pattern_type.6de4e4.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc8_18.2 [symbolic = %require_complete (constants.%require_complete)] @@ -493,17 +507,20 @@ interface J { // CHECK:STDOUT: specific @Copy(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_17.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Use(constants.%T) { // CHECK:STDOUT: %T.loc8_8.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_8.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc8_18.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Copy(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc5_17.1 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Copy(@Use.%I.facet) {} @@ -519,8 +536,10 @@ interface J { // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%Hello.decl [concrete] // CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -546,9 +565,9 @@ interface J { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] { -// CHECK:STDOUT: %T.patt.loc8_8.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Use.%T.as_type.loc8_18.2 (%T.as_type) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Use.%T.as_type.loc8_18.2 (%T.as_type) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc8_8.1: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Use.%pattern_type (%pattern_type.6de) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Use.%pattern_type (%pattern_type.6de) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: %T.loc8_8.1: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] @@ -579,8 +598,9 @@ interface J { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Use(%T.loc8_8.1: %I.type) { // CHECK:STDOUT: %T.loc8_8.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_8.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_8.2: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc8_18.2: type = facet_access_type %T.loc8_8.2 [symbolic = %T.as_type.loc8_18.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_18.2 [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc8_18.2 [symbolic = %require_complete (constants.%require_complete)] @@ -609,6 +629,7 @@ interface J { // CHECK:STDOUT: %T.loc8_8.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_8.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc8_18.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Hello(constants.%I.facet) {} @@ -621,13 +642,16 @@ interface J { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.6de4e4.1: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Copy.type: type = fn_type @Copy [concrete] // CHECK:STDOUT: %Copy: %Copy.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%Copy.decl [concrete] // CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.6de4e4.2: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %UseIndirect.type: type = fn_type @UseIndirect [concrete] // CHECK:STDOUT: %UseIndirect: %UseIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -653,11 +677,11 @@ interface J { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %UseIndirect.decl: %UseIndirect.type = fn_decl @UseIndirect [concrete = constants.%UseIndirect] { -// CHECK:STDOUT: %T.patt.loc8_16.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @UseIndirect.%T.as_type.loc8_26.2 (%T.as_type) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @UseIndirect.%T.as_type.loc8_26.2 (%T.as_type) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @UseIndirect.%T.as_type.loc8_26.2 (%T.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @UseIndirect.%T.as_type.loc8_26.2 (%T.as_type) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_16.1: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @UseIndirect.%pattern_type (%pattern_type.6de4e4.2) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @UseIndirect.%pattern_type (%pattern_type.6de4e4.2) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @UseIndirect.%pattern_type (%pattern_type.6de4e4.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @UseIndirect.%pattern_type (%pattern_type.6de4e4.2) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_32: %I.type = name_ref T, %T.loc8_16.1 [symbolic = %T.loc8_16.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc8_32: type = facet_access_type %T.ref.loc8_32 [symbolic = %T.as_type.loc8_26.2 (constants.%T.as_type)] @@ -679,10 +703,10 @@ interface J { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Copy.decl: %Copy.type = fn_decl @Copy [concrete = constants.%Copy] { -// CHECK:STDOUT: %self.patt: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Copy.%pattern_type (%pattern_type.6de4e4.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Copy.%pattern_type (%pattern_type.6de4e4.1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Copy.%pattern_type (%pattern_type.6de4e4.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Copy.%pattern_type (%pattern_type.6de4e4.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc5_28: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_28: type = facet_access_type %Self.ref.loc5_28 [symbolic = %Self.as_type.loc5_17.1 (constants.%Self.as_type)] @@ -708,14 +732,16 @@ interface J { // CHECK:STDOUT: generic fn @Copy(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_17.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_17.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_17.1 [symbolic = %pattern_type (constants.%pattern_type.6de4e4.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Copy.%Self.as_type.loc5_17.1 (%Self.as_type)) -> @Copy.%Self.as_type.loc5_17.1 (%Self.as_type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @UseIndirect(%T.loc8_16.1: %I.type) { // CHECK:STDOUT: %T.loc8_16.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_16.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_16.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_16.2: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc8_26.2: type = facet_access_type %T.loc8_16.2 [symbolic = %T.as_type.loc8_26.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_26.2 [symbolic = %pattern_type (constants.%pattern_type.6de4e4.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc8_26.2 [symbolic = %require_complete (constants.%require_complete)] @@ -746,17 +772,20 @@ interface J { // CHECK:STDOUT: specific @Copy(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_17.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @UseIndirect(constants.%T) { // CHECK:STDOUT: %T.loc8_16.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_16.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc8_26.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Copy(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc5_17.1 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de4e4.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Copy(@UseIndirect.%I.facet) {} @@ -769,7 +798,9 @@ interface J { // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %U [symbolic] // CHECK:STDOUT: %Id.type: type = fn_type @Id [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Id: %Id.type = struct_value () [concrete] @@ -781,6 +812,7 @@ interface J { // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.40b: type = pattern_type %I.assoc_type [concrete] // CHECK:STDOUT: %Id.specific_fn: = specific_function %Id, @Id(%I.assoc_type) [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %I.assoc_type [concrete] // CHECK:STDOUT: } @@ -801,11 +833,11 @@ interface J { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %Id.decl: %Id.type = fn_decl @Id [concrete = constants.%Id] { -// CHECK:STDOUT: %U.patt.loc4_7.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_7.2 (constants.%U.patt)] -// CHECK:STDOUT: %x.patt: @Id.%U.loc4_7.2 (%U) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Id.%U.loc4_7.2 (%U) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Id.%U.loc4_7.2 (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Id.%U.loc4_7.2 (%U) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %U.patt.loc4_7.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_7.2 (constants.%U.patt)] +// CHECK:STDOUT: %x.patt: @Id.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Id.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Id.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Id.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc4_26: type = name_ref U, %U.loc4_7.1 [symbolic = %U.loc4_7.2 (constants.%U)] // CHECK:STDOUT: %U.loc4_7.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc4_7.2 (constants.%U)] @@ -873,7 +905,8 @@ interface J { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Id(%U.loc4_7.1: type) { // CHECK:STDOUT: %U.loc4_7.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc4_7.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc4_7.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_7.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc4_7.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_7.2 (constants.%U.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U.loc4_7.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.loc4_7.2 [symbolic = %require_complete (constants.%require_complete)] @@ -890,6 +923,7 @@ interface J { // CHECK:STDOUT: specific @Id(constants.%U) { // CHECK:STDOUT: %U.loc4_7.2 => constants.%U // CHECK:STDOUT: %U.patt.loc4_7.2 => constants.%U.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T(constants.%I.facet) {} @@ -897,6 +931,7 @@ interface J { // CHECK:STDOUT: specific @Id(constants.%I.assoc_type) { // CHECK:STDOUT: %U.loc4_7.2 => constants.%I.assoc_type // CHECK:STDOUT: %U.patt.loc4_7.2 => constants.%U.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.40b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -906,7 +941,9 @@ interface J { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %U [symbolic] // CHECK:STDOUT: %Id.type: type = fn_type @Id [concrete] // CHECK:STDOUT: %Id: %Id.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %U [symbolic] @@ -939,11 +976,11 @@ interface J { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Id.decl: %Id.type = fn_decl @Id [concrete = constants.%Id] { -// CHECK:STDOUT: %U.patt.loc3_7.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_7.2 (constants.%U.patt)] -// CHECK:STDOUT: %x.patt: @Id.%U.loc3_7.2 (%U) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Id.%U.loc3_7.2 (%U) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Id.%U.loc3_7.2 (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Id.%U.loc3_7.2 (%U) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %U.patt.loc3_7.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_7.2 (constants.%U.patt)] +// CHECK:STDOUT: %x.patt: @Id.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Id.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Id.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Id.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc3_26: type = name_ref U, %U.loc3_7.1 [symbolic = %U.loc3_7.2 (constants.%U)] // CHECK:STDOUT: %U.loc3_7.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc3_7.2 (constants.%U)] @@ -991,7 +1028,8 @@ interface J { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Id(%U.loc3_7.1: type) { // CHECK:STDOUT: %U.loc3_7.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc3_7.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc3_7.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_7.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc3_7.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_7.2 (constants.%U.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U.loc3_7.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.loc3_7.2 [symbolic = %require_complete (constants.%require_complete)] @@ -1014,6 +1052,7 @@ interface J { // CHECK:STDOUT: specific @Id(constants.%U) { // CHECK:STDOUT: %U.loc3_7.2 => constants.%U // CHECK:STDOUT: %U.patt.loc3_7.2 => constants.%U.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @T(constants.%Self) {} @@ -1023,6 +1062,7 @@ interface J { // CHECK:STDOUT: specific @Id(type) { // CHECK:STDOUT: %U.loc3_7.2 => type // CHECK:STDOUT: %U.patt.loc3_7.2 => constants.%U.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -1193,12 +1233,15 @@ interface J { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -1208,6 +1251,7 @@ interface J { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -1220,12 +1264,12 @@ interface J { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -1233,7 +1277,7 @@ interface J { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -1246,10 +1290,10 @@ interface J { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -1275,7 +1319,7 @@ interface J { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -1288,10 +1332,10 @@ interface J { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -1320,6 +1364,8 @@ interface J { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -1329,6 +1375,8 @@ interface J { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -1343,6 +1391,8 @@ interface J { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -1359,6 +1409,8 @@ interface J { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/call_combined_impl_witness.carbon b/toolchain/check/testdata/facet/min_prelude/call_combined_impl_witness.carbon index 93d67656027d..69fc46175320 100644 --- a/toolchain/check/testdata/facet/min_prelude/call_combined_impl_witness.carbon +++ b/toolchain/check/testdata/facet/min_prelude/call_combined_impl_witness.carbon @@ -80,12 +80,15 @@ fn F() { // CHECK:STDOUT: %assoc0.d45: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl.f92 [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl.f92(%T.8b3) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T.8b3) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T.8b3 [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl.f92(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] @@ -101,8 +104,10 @@ fn F() { // CHECK:STDOUT: %bound_method.cb6: = bound_method %facet_type.d5f, %Op.specific_fn [concrete] // CHECK:STDOUT: %facet_type.242: type = facet_type <@Empty & @A & @B> [concrete] // CHECK:STDOUT: %T.2df: %facet_type.242 = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.fd9: %facet_type.242 = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.8e7: type = pattern_type %facet_type.242 [concrete] +// CHECK:STDOUT: %T.patt.af3: %pattern_type.8e7 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.2df [symbolic] +// CHECK:STDOUT: %pattern_type.9a0: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.383: = require_complete_type %T.as_type [symbolic] @@ -120,6 +125,7 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %facet_value: %facet_type.242 = facet_value %C, (%Empty.impl_witness, %A.impl_witness, %B.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.specific_fn: = specific_function %G, @G(%facet_value) [concrete] // CHECK:STDOUT: %.7ab: type = fn_type_with_self_type %AA.type.b97, %A.facet.66c [concrete] // CHECK:STDOUT: %.b43: type = fn_type_with_self_type %BB.type.64d, %B.facet.82f [concrete] @@ -130,10 +136,10 @@ fn F() { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0.d45] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.f92.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.f92.%T (constants.%T.8b3)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.f92.%T (constants.%T.8b3)] @@ -175,9 +181,9 @@ fn F() { // CHECK:STDOUT: %B.impl_witness_table = impl_witness_table (@impl.c94.%BB.decl), @impl.c94 [concrete] // CHECK:STDOUT: %B.impl_witness: = impl_witness %B.impl_witness_table [concrete = constants.%B.impl_witness] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt.loc32_6.1: %facet_type.242 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_6.2 (constants.%T.patt.fd9)] -// CHECK:STDOUT: %t.patt: @G.%T.as_type.loc32_28.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @G.%T.as_type.loc32_28.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc32_6.1: %pattern_type.8e7 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_6.2 (constants.%T.patt.af3)] +// CHECK:STDOUT: %t.patt: @G.%pattern_type (%pattern_type.9a0) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @G.%pattern_type (%pattern_type.9a0) = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc32_20.1: type = splice_block %.loc32_20.3 [concrete = constants.%facet_type.242] { // CHECK:STDOUT: %A.ref.loc32: type = name_ref A, file.%A.decl [concrete = constants.%A.type] @@ -274,7 +280,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.f92(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.250)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl.f92(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -318,12 +324,14 @@ fn F() { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -332,8 +340,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc32_6.1: %facet_type.242) { // CHECK:STDOUT: %T.loc32_6.2: %facet_type.242 = bind_symbolic_name T, 0 [symbolic = %T.loc32_6.2 (constants.%T.2df)] -// CHECK:STDOUT: %T.patt.loc32_6.2: %facet_type.242 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_6.2 (constants.%T.patt.fd9)] +// CHECK:STDOUT: %T.patt.loc32_6.2: %pattern_type.8e7 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc32_6.2 (constants.%T.patt.af3)] // CHECK:STDOUT: %T.as_type.loc32_28.2: type = facet_access_type %T.loc32_6.2 [symbolic = %T.as_type.loc32_28.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc32_28.2 [symbolic = %pattern_type (constants.%pattern_type.9a0)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc32_28.2 [symbolic = %require_complete (constants.%require_complete.383)] @@ -430,11 +439,12 @@ fn F() { // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %T.patt => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt => constants.%T.patt.250 // CHECK:STDOUT: %BitAnd.impl_witness => constants.%BitAnd.impl_witness.b7b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -442,11 +452,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(type) { // CHECK:STDOUT: %T => type -// CHECK:STDOUT: %T.patt => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt => constants.%T.patt.250 // CHECK:STDOUT: %BitAnd.impl_witness => constants.%BitAnd.impl_witness.0e5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -457,14 +468,16 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.2df) { // CHECK:STDOUT: %T.loc32_6.2 => constants.%T.2df -// CHECK:STDOUT: %T.patt.loc32_6.2 => constants.%T.patt.fd9 +// CHECK:STDOUT: %T.patt.loc32_6.2 => constants.%T.patt.af3 // CHECK:STDOUT: %T.as_type.loc32_28.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9a0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AA.1(constants.%A.facet.487) {} @@ -477,8 +490,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%facet_value) { // CHECK:STDOUT: %T.loc32_6.2 => constants.%facet_value -// CHECK:STDOUT: %T.patt.loc32_6.2 => constants.%T.patt.fd9 +// CHECK:STDOUT: %T.patt.loc32_6.2 => constants.%T.patt.af3 // CHECK:STDOUT: %T.as_type.loc32_28.2 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 @@ -498,12 +512,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -513,6 +530,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -520,13 +538,15 @@ fn F() { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Self.e44: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.560: type = facet_access_type %Self.e44 [symbolic] +// CHECK:STDOUT: %pattern_type.a80: type = pattern_type %Self.as_type.560 [symbolic] // CHECK:STDOUT: %Op.type.613: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d98: %Op.type.613 = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.assoc_type: type = assoc_entity_type @BitAnd [concrete] // CHECK:STDOUT: %assoc0.220: %BitAnd.assoc_type = assoc_entity element0, @BitAnd.%Op.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Op.type.28d: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.902: %Op.type.28d = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -540,18 +560,18 @@ fn F() { // CHECK:STDOUT: .BitAnd = %BitAnd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc9_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc9_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc13_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc13_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %BitAnd.decl: type = interface_decl @BitAnd [concrete = constants.%BitAnd.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc21_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc21_14.1 [symbolic = %T.loc21_14.2 (constants.%T)] // CHECK:STDOUT: %BitAnd.ref: type = name_ref BitAnd, file.%BitAnd.decl [concrete = constants.%BitAnd.type] @@ -563,7 +583,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc9_14.1: type) { // CHECK:STDOUT: %Dest.loc9_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc9_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc9_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -576,10 +596,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc9_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -605,7 +625,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc13_22.1: type) { // CHECK:STDOUT: %Dest.loc13_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc13_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc13_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -618,10 +638,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc13_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -648,12 +668,12 @@ fn F() { // CHECK:STDOUT: interface @BitAnd { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.e44] // CHECK:STDOUT: %Op.decl: %Op.type.613 = fn_decl @Op.1 [concrete = constants.%Op.d98] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.a80) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18_37: %BitAnd.type = name_ref Self, @BitAnd.%Self [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_37: type = facet_access_type %Self.ref.loc18_37 [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] @@ -685,7 +705,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc21_14.1: type) { // CHECK:STDOUT: %T.loc21_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T.loc21_14.2) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -695,12 +715,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %BitAnd.ref { // CHECK:STDOUT: %Op.decl: @impl.%Op.type (%Op.type.28d) = fn_decl @Op.2 [symbolic = @impl.%Op (constants.%Op.902)] { -// CHECK:STDOUT: %self.patt: @Op.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.2.%T (%T) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.2.%T (%T) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.2.%T (%T) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.2.%T (%T) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc22_37: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Op.2.%T (%T) = value_param call_param0 @@ -724,6 +744,8 @@ fn F() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc10_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc10_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc10_14: type = pattern_type %Self.as_type.loc10_20.1 [symbolic = %pattern_type.loc10_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc10_28: type = pattern_type %Dest [symbolic = %pattern_type.loc10_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -733,6 +755,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -740,12 +764,14 @@ fn F() { // CHECK:STDOUT: generic fn @Op.1(@BitAnd.%Self: %BitAnd.type) { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_15.1 [symbolic = %pattern_type (constants.%pattern_type.a80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560), %other.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560)) -> @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(@impl.%T.loc21_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -762,6 +788,8 @@ fn F() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc10_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc10_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc10_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -778,6 +806,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} @@ -787,6 +817,7 @@ fn F() { // CHECK:STDOUT: specific @Op.1(constants.%Self.e44) { // CHECK:STDOUT: %Self => constants.%Self.e44 // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%Self.as_type.560 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -799,10 +830,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%BitAnd.facet) { // CHECK:STDOUT: %Self => constants.%BitAnd.facet // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/min_prelude/convert_class_type_to_facet_type.carbon b/toolchain/check/testdata/facet/min_prelude/convert_class_type_to_facet_type.carbon index eb894294dd4c..d7fdf626a808 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_class_type_to_facet_type.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_class_type_to_facet_type.carbon @@ -32,7 +32,8 @@ fn F() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %A: %Animal.type = bind_symbolic_name A, 0 [symbolic] -// CHECK:STDOUT: %A.patt: %Animal.type = symbolic_binding_pattern A, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %WalkAnimal.type: type = fn_type @WalkAnimal [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %WalkAnimal: %WalkAnimal.type = struct_value () [concrete] @@ -66,7 +67,7 @@ fn F() { // CHECK:STDOUT: %Animal.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness %Animal.impl_witness_table [concrete = constants.%Animal.impl_witness] // CHECK:STDOUT: %WalkAnimal.decl: %WalkAnimal.type = fn_decl @WalkAnimal [concrete = constants.%WalkAnimal] { -// CHECK:STDOUT: %A.patt.loc19_15.1: %Animal.type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc19_15.2 (constants.%A.patt)] +// CHECK:STDOUT: %A.patt.loc19_15.1: %pattern_type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc19_15.2 (constants.%A.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %A.loc19_15.1: %Animal.type = bind_symbolic_name A, 0 [symbolic = %A.loc19_15.2 (constants.%A)] @@ -98,7 +99,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WalkAnimal(%A.loc19_15.1: %Animal.type) { // CHECK:STDOUT: %A.loc19_15.2: %Animal.type = bind_symbolic_name A, 0 [symbolic = %A.loc19_15.2 (constants.%A)] -// CHECK:STDOUT: %A.patt.loc19_15.2: %Animal.type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc19_15.2 (constants.%A.patt)] +// CHECK:STDOUT: %A.patt.loc19_15.2: %pattern_type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc19_15.2 (constants.%A.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -135,12 +136,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -150,6 +154,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -162,12 +167,12 @@ fn F() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -175,7 +180,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -188,10 +193,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -217,7 +222,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -230,10 +235,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -262,6 +267,8 @@ fn F() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -271,6 +278,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -285,6 +294,8 @@ fn F() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -301,6 +312,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_class_type_to_generic_facet_value.carbon b/toolchain/check/testdata/facet/min_prelude/convert_class_type_to_generic_facet_value.carbon index 54a9161c801b..85fbbc66708f 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_class_type_to_generic_facet_value.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_class_type_to_generic_facet_value.carbon @@ -65,7 +65,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Scalar: type = bind_symbolic_name Scalar, 0 [symbolic] -// CHECK:STDOUT: %Scalar.patt: type = symbolic_binding_pattern Scalar, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.c21: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type.c21 = struct_value () [concrete] @@ -90,15 +91,17 @@ fn G() { // CHECK:STDOUT: %F.a56: %F.type.17b = struct_value () [concrete] // CHECK:STDOUT: %Generic.facet: %Generic.type.769 = facet_value %ImplsGeneric, (%Generic.impl_witness) [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.91ccba.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %U: %Generic.type.91ccba.2 = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt.9a6: %Generic.type.91ccba.2 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.80f: type = pattern_type %Generic.type.91ccba.2 [symbolic] +// CHECK:STDOUT: %U.patt.5df: %pattern_type.80f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %U.patt.8ea: %Generic.type.769 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.ded: type = pattern_type %Generic.type.769 [concrete] +// CHECK:STDOUT: %U.patt.559: %pattern_type.ded = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.specific_fn.2ff: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: %PassThroughToGenericMethod.type: type = fn_type @PassThroughToGenericMethod [concrete] // CHECK:STDOUT: %PassThroughToGenericMethod: %PassThroughToGenericMethod.type = struct_value () [concrete] @@ -127,7 +130,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.c21 = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt.loc4_19.1: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Scalar.loc4_19.1: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc4_19.2 (constants.%Scalar)] // CHECK:STDOUT: } @@ -142,8 +145,8 @@ fn G() { // CHECK:STDOUT: %Generic.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %Generic.impl_witness: = impl_witness %Generic.impl_witness_table [concrete = constants.%Generic.impl_witness] // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt.loc15_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc15_32.1: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %T.patt.loc15_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc15_32.1: @CallGenericMethod.%pattern_type (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.5df)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc15_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_22.2 (constants.%T)] // CHECK:STDOUT: %.loc15: type = splice_block %Generic.type.loc15_45.1 [symbolic = %Generic.type.loc15_45.2 (constants.%Generic.type.91ccba.2)] { @@ -155,8 +158,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: %PassThroughToGenericMethod.decl: %PassThroughToGenericMethod.type = fn_decl @PassThroughToGenericMethod [concrete = constants.%PassThroughToGenericMethod] { -// CHECK:STDOUT: %T.patt.loc21_31.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_31.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc21_41.1: @PassThroughToGenericMethod.%Generic.type.loc21_54.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc21_41.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %T.patt.loc21_31.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_31.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc21_41.1: @PassThroughToGenericMethod.%pattern_type (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc21_41.2 (constants.%U.patt.5df)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc21_31.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_31.2 (constants.%T)] // CHECK:STDOUT: %.loc21: type = splice_block %Generic.type.loc21_54.1 [symbolic = %Generic.type.loc21_54.2 (constants.%Generic.type.91ccba.2)] { @@ -171,7 +174,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc4_19.1: type) { // CHECK:STDOUT: %Scalar.loc4_19.2: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc4_19.2 (constants.%Scalar)] -// CHECK:STDOUT: %Scalar.patt.loc4_19.2: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%Scalar.loc4_19.2)> [symbolic = %Generic.type (constants.%Generic.type.91ccba.1)] @@ -230,10 +233,11 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc15_22.1: type, %U.loc15_32.1: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2)) { // CHECK:STDOUT: %T.loc15_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc15_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] // CHECK:STDOUT: %Generic.type.loc15_45.2: type = facet_type <@Generic, @Generic(%T.loc15_22.2)> [symbolic = %Generic.type.loc15_45.2 (constants.%Generic.type.91ccba.2)] // CHECK:STDOUT: %U.loc15_32.2: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = bind_symbolic_name U, 1 [symbolic = %U.loc15_32.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc15_32.2: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc15_45.2 [symbolic = %pattern_type (constants.%pattern_type.80f)] +// CHECK:STDOUT: %U.patt.loc15_32.2: @CallGenericMethod.%pattern_type (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.5df)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -257,10 +261,11 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @PassThroughToGenericMethod(%T.loc21_31.1: type, %U.loc21_41.1: @PassThroughToGenericMethod.%Generic.type.loc21_54.2 (%Generic.type.91ccba.2)) { // CHECK:STDOUT: %T.loc21_31.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_31.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_31.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_31.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_31.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_31.2 (constants.%T.patt)] // CHECK:STDOUT: %Generic.type.loc21_54.2: type = facet_type <@Generic, @Generic(%T.loc21_31.2)> [symbolic = %Generic.type.loc21_54.2 (constants.%Generic.type.91ccba.2)] // CHECK:STDOUT: %U.loc21_41.2: @PassThroughToGenericMethod.%Generic.type.loc21_54.2 (%Generic.type.91ccba.2) = bind_symbolic_name U, 1 [symbolic = %U.loc21_41.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc21_41.2: @PassThroughToGenericMethod.%Generic.type.loc21_54.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc21_41.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc21_54.2 [symbolic = %pattern_type (constants.%pattern_type.80f)] +// CHECK:STDOUT: %U.patt.loc21_41.2: @PassThroughToGenericMethod.%pattern_type (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc21_41.2 (constants.%U.patt.5df)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %CallGenericMethod.specific_fn.loc22_3.2: = specific_function constants.%CallGenericMethod, @CallGenericMethod(%T.loc21_31.2, %U.loc21_41.2) [symbolic = %CallGenericMethod.specific_fn.loc22_3.2 (constants.%CallGenericMethod.specific_fn.a24)] @@ -322,7 +327,8 @@ fn G() { // CHECK:STDOUT: %T.patt.loc15_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc15_45.2 => constants.%Generic.type.91ccba.2 // CHECK:STDOUT: %U.loc15_32.2 => constants.%U -// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.9a6 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.80f +// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.5df // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -334,7 +340,8 @@ fn G() { // CHECK:STDOUT: %T.patt.loc15_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc15_45.2 => constants.%Generic.type.769 // CHECK:STDOUT: %U.loc15_32.2 => constants.%Generic.facet -// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.8ea +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ded +// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.559 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -344,7 +351,8 @@ fn G() { // CHECK:STDOUT: %T.patt.loc21_31.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc21_54.2 => constants.%Generic.type.91ccba.2 // CHECK:STDOUT: %U.loc21_41.2 => constants.%U -// CHECK:STDOUT: %U.patt.loc21_41.2 => constants.%U.patt.9a6 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.80f +// CHECK:STDOUT: %U.patt.loc21_41.2 => constants.%U.patt.5df // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(@PassThroughToGenericMethod.%T.loc21_31.2) {} @@ -356,7 +364,8 @@ fn G() { // CHECK:STDOUT: %T.patt.loc21_31.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc21_54.2 => constants.%Generic.type.769 // CHECK:STDOUT: %U.loc21_41.2 => constants.%Generic.facet -// CHECK:STDOUT: %U.patt.loc21_41.2 => constants.%U.patt.8ea +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ded +// CHECK:STDOUT: %U.patt.loc21_41.2 => constants.%U.patt.559 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %CallGenericMethod.specific_fn.loc22_3.2 => constants.%CallGenericMethod.specific_fn.2ff @@ -366,7 +375,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Scalar: type = bind_symbolic_name Scalar, 0 [symbolic] -// CHECK:STDOUT: %Scalar.patt: type = symbolic_binding_pattern Scalar, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.c21: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type.c21 = struct_value () [concrete] @@ -391,17 +401,21 @@ fn G() { // CHECK:STDOUT: %F.a56: %F.type.17b = struct_value () [concrete] // CHECK:STDOUT: %Generic.facet: %Generic.type.769 = facet_value %ImplsGeneric, (%Generic.impl_witness) [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.91ccba.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %U: %Generic.type.91ccba.2 = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt.9a6: %Generic.type.91ccba.2 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.80f: type = pattern_type %Generic.type.91ccba.2 [symbolic] +// CHECK:STDOUT: %U.patt.5df: %pattern_type.80f = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %GenericParam.val: %GenericParam = struct_value () [concrete] -// CHECK:STDOUT: %U.patt.8ea: %Generic.type.769 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.ded: type = pattern_type %Generic.type.769 [concrete] +// CHECK:STDOUT: %U.patt.559: %pattern_type.ded = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.589: type = pattern_type %GenericParam [concrete] // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -422,7 +436,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.c21 = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt.loc4_19.1: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Scalar.loc4_19.1: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc4_19.2 (constants.%Scalar)] // CHECK:STDOUT: } @@ -437,10 +451,10 @@ fn G() { // CHECK:STDOUT: %Generic.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %Generic.impl_witness: = impl_witness %Generic.impl_witness_table [concrete = constants.%Generic.impl_witness] // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt.loc15_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc15_32.1: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.9a6)] -// CHECK:STDOUT: %t.patt: @CallGenericMethod.%T.loc15_22.2 (%T) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @CallGenericMethod.%T.loc15_22.2 (%T) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc15_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc15_32.1: @CallGenericMethod.%pattern_type.loc15_32 (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.5df)] +// CHECK:STDOUT: %t.patt: @CallGenericMethod.%pattern_type.loc15_48 (%pattern_type.7dc) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @CallGenericMethod.%pattern_type.loc15_48 (%pattern_type.7dc) = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc15_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_22.2 (constants.%T)] // CHECK:STDOUT: %.loc15: type = splice_block %Generic.type.loc15_45.1 [symbolic = %Generic.type.loc15_45.2 (constants.%Generic.type.91ccba.2)] { @@ -458,7 +472,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc4_19.1: type) { // CHECK:STDOUT: %Scalar.loc4_19.2: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc4_19.2 (constants.%Scalar)] -// CHECK:STDOUT: %Scalar.patt.loc4_19.2: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%Scalar.loc4_19.2)> [symbolic = %Generic.type (constants.%Generic.type.91ccba.1)] @@ -517,10 +531,12 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc15_22.1: type, %U.loc15_32.1: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2)) { // CHECK:STDOUT: %T.loc15_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc15_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] // CHECK:STDOUT: %Generic.type.loc15_45.2: type = facet_type <@Generic, @Generic(%T.loc15_22.2)> [symbolic = %Generic.type.loc15_45.2 (constants.%Generic.type.91ccba.2)] // CHECK:STDOUT: %U.loc15_32.2: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = bind_symbolic_name U, 1 [symbolic = %U.loc15_32.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc15_32.2: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %pattern_type.loc15_32: type = pattern_type %Generic.type.loc15_45.2 [symbolic = %pattern_type.loc15_32 (constants.%pattern_type.80f)] +// CHECK:STDOUT: %U.patt.loc15_32.2: @CallGenericMethod.%pattern_type.loc15_32 (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.5df)] +// CHECK:STDOUT: %pattern_type.loc15_48: type = pattern_type %T.loc15_22.2 [symbolic = %pattern_type.loc15_48 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc15_22.2 [symbolic = %require_complete (constants.%require_complete)] @@ -583,7 +599,9 @@ fn G() { // CHECK:STDOUT: %T.patt.loc15_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc15_45.2 => constants.%Generic.type.91ccba.2 // CHECK:STDOUT: %U.loc15_32.2 => constants.%U -// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.9a6 +// CHECK:STDOUT: %pattern_type.loc15_32 => constants.%pattern_type.80f +// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.5df +// CHECK:STDOUT: %pattern_type.loc15_48 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(@CallGenericMethod.%T.loc15_22.2) {} @@ -593,7 +611,9 @@ fn G() { // CHECK:STDOUT: %T.patt.loc15_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc15_45.2 => constants.%Generic.type.769 // CHECK:STDOUT: %U.loc15_32.2 => constants.%Generic.facet -// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.8ea +// CHECK:STDOUT: %pattern_type.loc15_32 => constants.%pattern_type.ded +// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.559 +// CHECK:STDOUT: %pattern_type.loc15_48 => constants.%pattern_type.589 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -603,12 +623,15 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -618,6 +641,7 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -630,12 +654,12 @@ fn G() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -643,7 +667,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -656,10 +680,10 @@ fn G() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -685,7 +709,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -698,10 +722,10 @@ fn G() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -730,6 +754,8 @@ fn G() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -739,6 +765,8 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -753,6 +781,8 @@ fn G() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -769,6 +799,8 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_class_value_to_facet_value_value.carbon b/toolchain/check/testdata/facet/min_prelude/convert_class_value_to_facet_value_value.carbon index 35c9e7e2624e..8fbc5a49b71e 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_class_value_to_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_class_value_to_facet_value_value.carbon @@ -28,8 +28,10 @@ fn F() { // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: %Animal.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Animal.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.3b0: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.36a: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %WalkAnimal.type: type = fn_type @WalkAnimal [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %WalkAnimal: %WalkAnimal.type = struct_value () [concrete] @@ -42,6 +44,7 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Goat.val: %Goat = struct_value () [concrete] // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.ab7: type = pattern_type %Goat [concrete] // CHECK:STDOUT: %WalkAnimal.specific_fn: = specific_function %WalkAnimal, @WalkAnimal(%Animal.facet) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -62,9 +65,9 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %WalkAnimal.decl: %WalkAnimal.type = fn_decl @WalkAnimal [concrete = constants.%WalkAnimal] { -// CHECK:STDOUT: %T.patt.loc16_15.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %a.patt: @WalkAnimal.%T.as_type.loc16_30.2 (%T.as_type) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @WalkAnimal.%T.as_type.loc16_30.2 (%T.as_type) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc16_15.1: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.patt: @WalkAnimal.%pattern_type (%pattern_type.36a) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @WalkAnimal.%pattern_type (%pattern_type.36a) = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %T.loc16_15.1: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_15.2 (constants.%T)] @@ -110,8 +113,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WalkAnimal(%T.loc16_15.1: %Animal.type) { // CHECK:STDOUT: %T.loc16_15.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc16_15.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_15.2: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc16_30.2: type = facet_access_type %T.loc16_15.2 [symbolic = %T.as_type.loc16_30.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc16_30.2 [symbolic = %pattern_type (constants.%pattern_type.36a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc16_30.2 [symbolic = %require_complete (constants.%require_complete)] @@ -145,12 +149,14 @@ fn F() { // CHECK:STDOUT: %T.loc16_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc16_15.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc16_30.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.36a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WalkAnimal(constants.%Animal.facet) { // CHECK:STDOUT: %T.loc16_15.2 => constants.%Animal.facet // CHECK:STDOUT: %T.patt.loc16_15.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc16_30.2 => constants.%Goat +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ab7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -160,12 +166,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -175,6 +184,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -187,12 +197,12 @@ fn F() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -200,7 +210,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -213,10 +223,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -242,7 +252,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -255,10 +265,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -287,6 +297,8 @@ fn F() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -296,6 +308,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -310,6 +324,8 @@ fn F() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -326,6 +342,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_class_value_to_generic_facet_value_value.carbon b/toolchain/check/testdata/facet/min_prelude/convert_class_value_to_generic_facet_value_value.carbon index 912a3a44c5ca..49e8e3be5db9 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_class_value_to_generic_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_class_value_to_generic_facet_value_value.carbon @@ -97,7 +97,8 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Scalar: type = bind_symbolic_name Scalar, 0 [symbolic] -// CHECK:STDOUT: %Scalar.patt: type = symbolic_binding_pattern Scalar, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.c21: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type.c21 = struct_value () [concrete] @@ -122,11 +123,14 @@ fn B() { // CHECK:STDOUT: %F.a56: %F.type.17b = struct_value () [concrete] // CHECK:STDOUT: %Generic.facet.8ff: %Generic.type.769 = facet_value %ImplsGeneric, (%Generic.impl_witness) [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.91ccba.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %U: %Generic.type.91ccba.2 = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt.9a6: %Generic.type.91ccba.2 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.80f: type = pattern_type %Generic.type.91ccba.2 [symbolic] +// CHECK:STDOUT: %U.patt.5df: %pattern_type.80f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] +// CHECK:STDOUT: %pattern_type.f48: type = pattern_type %U.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.7b2: = require_complete_type %U.as_type [symbolic] @@ -146,7 +150,10 @@ fn B() { // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %ImplsGeneric.val: %ImplsGeneric = struct_value () [concrete] // CHECK:STDOUT: %GenericParam.val: %GenericParam = struct_value () [concrete] -// CHECK:STDOUT: %U.patt.8ea: %Generic.type.769 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.ded: type = pattern_type %Generic.type.769 [concrete] +// CHECK:STDOUT: %U.patt.559: %pattern_type.ded = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.c8d: type = pattern_type %ImplsGeneric [concrete] +// CHECK:STDOUT: %pattern_type.589: type = pattern_type %GenericParam [concrete] // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet.8ff) [concrete] // CHECK:STDOUT: %complete_type.997: = complete_type_witness %Generic.type.769 [concrete] // CHECK:STDOUT: %.3e6: type = fn_type_with_self_type %F.type.4cf, %Generic.facet.8ff [concrete] @@ -169,7 +176,7 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.c21 = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt.loc4_19.1: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Scalar.loc4_19.1: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc4_19.2 (constants.%Scalar)] // CHECK:STDOUT: } @@ -184,12 +191,12 @@ fn B() { // CHECK:STDOUT: %Generic.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %Generic.impl_witness: = impl_witness %Generic.impl_witness_table [concrete = constants.%Generic.impl_witness] // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt.loc15_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc15_32.1: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.9a6)] -// CHECK:STDOUT: %a.patt: @CallGenericMethod.%U.as_type.loc15_51.2 (%U.as_type) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @CallGenericMethod.%U.as_type.loc15_51.2 (%U.as_type) = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %s.patt: @CallGenericMethod.%T.loc15_22.2 (%T) = binding_pattern s -// CHECK:STDOUT: %s.param_patt: @CallGenericMethod.%T.loc15_22.2 (%T) = value_param_pattern %s.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc15_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc15_32.1: @CallGenericMethod.%pattern_type.loc15_32 (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.5df)] +// CHECK:STDOUT: %a.patt: @CallGenericMethod.%pattern_type.loc15_48 (%pattern_type.f48) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @CallGenericMethod.%pattern_type.loc15_48 (%pattern_type.f48) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %s.patt: @CallGenericMethod.%pattern_type.loc15_54 (%pattern_type.7dc) = binding_pattern s +// CHECK:STDOUT: %s.param_patt: @CallGenericMethod.%pattern_type.loc15_54 (%pattern_type.7dc) = value_param_pattern %s.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc15_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_22.2 (constants.%T)] // CHECK:STDOUT: %.loc15_45: type = splice_block %Generic.type.loc15_45.1 [symbolic = %Generic.type.loc15_45.2 (constants.%Generic.type.91ccba.2)] { @@ -214,7 +221,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc4_19.1: type) { // CHECK:STDOUT: %Scalar.loc4_19.2: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc4_19.2 (constants.%Scalar)] -// CHECK:STDOUT: %Scalar.patt.loc4_19.2: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc4_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%Scalar.loc4_19.2)> [symbolic = %Generic.type (constants.%Generic.type.91ccba.1)] @@ -273,11 +280,14 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc15_22.1: type, %U.loc15_32.1: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2)) { // CHECK:STDOUT: %T.loc15_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc15_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] // CHECK:STDOUT: %Generic.type.loc15_45.2: type = facet_type <@Generic, @Generic(%T.loc15_22.2)> [symbolic = %Generic.type.loc15_45.2 (constants.%Generic.type.91ccba.2)] // CHECK:STDOUT: %U.loc15_32.2: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = bind_symbolic_name U, 1 [symbolic = %U.loc15_32.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc15_32.2: @CallGenericMethod.%Generic.type.loc15_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %pattern_type.loc15_32: type = pattern_type %Generic.type.loc15_45.2 [symbolic = %pattern_type.loc15_32 (constants.%pattern_type.80f)] +// CHECK:STDOUT: %U.patt.loc15_32.2: @CallGenericMethod.%pattern_type.loc15_32 (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc15_32.2 (constants.%U.patt.5df)] // CHECK:STDOUT: %U.as_type.loc15_51.2: type = facet_access_type %U.loc15_32.2 [symbolic = %U.as_type.loc15_51.2 (constants.%U.as_type)] +// CHECK:STDOUT: %pattern_type.loc15_48: type = pattern_type %U.as_type.loc15_51.2 [symbolic = %pattern_type.loc15_48 (constants.%pattern_type.f48)] +// CHECK:STDOUT: %pattern_type.loc15_54: type = pattern_type %T.loc15_22.2 [symbolic = %pattern_type.loc15_54 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15_49: = require_complete_type %U.as_type.loc15_51.2 [symbolic = %require_complete.loc15_49 (constants.%require_complete.7b2)] @@ -372,8 +382,11 @@ fn B() { // CHECK:STDOUT: %T.patt.loc15_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc15_45.2 => constants.%Generic.type.91ccba.2 // CHECK:STDOUT: %U.loc15_32.2 => constants.%U -// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.9a6 +// CHECK:STDOUT: %pattern_type.loc15_32 => constants.%pattern_type.80f +// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.5df // CHECK:STDOUT: %U.as_type.loc15_51.2 => constants.%U.as_type +// CHECK:STDOUT: %pattern_type.loc15_48 => constants.%pattern_type.f48 +// CHECK:STDOUT: %pattern_type.loc15_54 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(@CallGenericMethod.%T.loc15_22.2) {} @@ -387,8 +400,11 @@ fn B() { // CHECK:STDOUT: %T.patt.loc15_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc15_45.2 => constants.%Generic.type.769 // CHECK:STDOUT: %U.loc15_32.2 => constants.%Generic.facet.8ff -// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.8ea +// CHECK:STDOUT: %pattern_type.loc15_32 => constants.%pattern_type.ded +// CHECK:STDOUT: %U.patt.loc15_32.2 => constants.%U.patt.559 // CHECK:STDOUT: %U.as_type.loc15_51.2 => constants.%ImplsGeneric +// CHECK:STDOUT: %pattern_type.loc15_48 => constants.%pattern_type.c8d +// CHECK:STDOUT: %pattern_type.loc15_54 => constants.%pattern_type.589 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc15_49 => constants.%complete_type.357 @@ -408,9 +424,10 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %V: type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %W: type = bind_symbolic_name W, 1 [symbolic] -// CHECK:STDOUT: %W.patt: type = symbolic_binding_pattern W, 1 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] @@ -420,15 +437,17 @@ fn B() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.type.bea: type = facet_type <@I, @I(%T.8b3, %empty_tuple.type)> [symbolic] // CHECK:STDOUT: %Self.ec5: %I.type.bea = bind_symbolic_name Self, 2 [symbolic] // CHECK:STDOUT: %require_complete.5ce: = require_complete_type %I.type.bea [symbolic] // CHECK:STDOUT: %I.impl_witness.989: = impl_witness file.%I.impl_witness_table, @impl(%T.8b3) [symbolic] // CHECK:STDOUT: %I.type.202: type = facet_type <@I, @I(%empty_struct_type, %empty_tuple.type)> [concrete] // CHECK:STDOUT: %T.e96: %I.type.202 = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.5b9: %I.type.202 = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.a84: type = pattern_type %I.type.202 [concrete] +// CHECK:STDOUT: %T.patt.df1: %pattern_type.a84 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.e96 [symbolic] +// CHECK:STDOUT: %pattern_type.3ff: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.c8b: = require_complete_type %T.as_type [symbolic] @@ -439,6 +458,7 @@ fn B() { // CHECK:STDOUT: %complete_type.3d9: = complete_type_witness %I.type.202 [concrete] // CHECK:STDOUT: %I.impl_witness.806: = impl_witness file.%I.impl_witness_table, @impl(%empty_struct_type) [concrete] // CHECK:STDOUT: %I.facet: %I.type.202 = facet_value %C, (%I.impl_witness.806) [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %A.specific_fn: = specific_function %A, @A(%I.facet) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -458,15 +478,15 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %V.patt.loc3_13.1: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_13.2 (constants.%V.patt)] -// CHECK:STDOUT: %W.patt.loc3_23.1: type = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_23.2 (constants.%W.patt)] +// CHECK:STDOUT: %V.patt.loc3_13.1: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_13.2 (constants.%V.patt)] +// CHECK:STDOUT: %W.patt.loc3_23.1: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_23.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %V.loc3_13.1: type = bind_symbolic_name V, 0 [symbolic = %V.loc3_13.2 (constants.%V)] // CHECK:STDOUT: %W.loc3_23.1: type = bind_symbolic_name W, 1 [symbolic = %W.loc3_23.2 (constants.%W)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc7_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc7_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -479,9 +499,9 @@ fn B() { // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @impl(constants.%T.8b3) [symbolic = @impl.%I.impl_witness (constants.%I.impl_witness.989)] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %T.patt.loc9_6.1: %I.type.202 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.5b9)] -// CHECK:STDOUT: %t.patt: @A.%T.as_type.loc9_24.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @A.%T.as_type.loc9_24.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc9_6.1: %pattern_type.a84 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.df1)] +// CHECK:STDOUT: %t.patt: @A.%pattern_type (%pattern_type.3ff) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @A.%pattern_type (%pattern_type.3ff) = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_18.1: type = splice_block %I.type [concrete = constants.%I.type.202] { // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -505,9 +525,9 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%V.loc3_13.1: type, %W.loc3_23.1: type) { // CHECK:STDOUT: %V.loc3_13.2: type = bind_symbolic_name V, 0 [symbolic = %V.loc3_13.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc3_13.2: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_13.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc3_13.2: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_13.2 (constants.%V.patt)] // CHECK:STDOUT: %W.loc3_23.2: type = bind_symbolic_name W, 1 [symbolic = %W.loc3_23.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc3_23.2: type = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_23.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc3_23.2: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_23.2 (constants.%W.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%V.loc3_13.2, %W.loc3_23.2)> [symbolic = %I.type (constants.%I.type.f76)] @@ -524,7 +544,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc7_14.1: type) { // CHECK:STDOUT: %T.loc7_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_14.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc7_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc7_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: %I.type.loc7_36.2: type = facet_type <@I, @I(%T.loc7_14.2, constants.%empty_tuple.type)> [symbolic = %I.type.loc7_36.2 (constants.%I.type.bea)] // CHECK:STDOUT: %require_complete: = require_complete_type %I.type.loc7_36.2 [symbolic = %require_complete (constants.%require_complete.5ce)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table, @impl(%T.loc7_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.989)] @@ -548,8 +568,9 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_6.1: %I.type.202) { // CHECK:STDOUT: %T.loc9_6.2: %I.type.202 = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T.e96)] -// CHECK:STDOUT: %T.patt.loc9_6.2: %I.type.202 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.5b9)] +// CHECK:STDOUT: %T.patt.loc9_6.2: %pattern_type.a84 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.df1)] // CHECK:STDOUT: %T.as_type.loc9_24.2: type = facet_access_type %T.loc9_6.2 [symbolic = %T.as_type.loc9_24.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_24.2 [symbolic = %pattern_type (constants.%pattern_type.3ff)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc9_24.2 [symbolic = %require_complete (constants.%require_complete.c8b)] @@ -601,7 +622,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T.8b3) { // CHECK:STDOUT: %T.loc7_14.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %I.type.loc7_36.2 => constants.%I.type.bea // CHECK:STDOUT: %require_complete => constants.%require_complete.5ce // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.989 @@ -624,13 +645,14 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.e96) { // CHECK:STDOUT: %T.loc9_6.2 => constants.%T.e96 -// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.5b9 +// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.df1 // CHECK:STDOUT: %T.as_type.loc9_24.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3ff // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%empty_struct_type) { // CHECK:STDOUT: %T.loc7_14.2 => constants.%empty_struct_type -// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %I.type.loc7_36.2 => constants.%I.type.202 // CHECK:STDOUT: %require_complete => constants.%complete_type.3d9 // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.806 @@ -640,8 +662,9 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%I.facet) { // CHECK:STDOUT: %T.loc9_6.2 => constants.%I.facet -// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.5b9 +// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.df1 // CHECK:STDOUT: %T.as_type.loc9_24.2 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 @@ -651,9 +674,10 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %V: type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %W: type = bind_symbolic_name W, 1 [symbolic] -// CHECK:STDOUT: %W.patt: type = symbolic_binding_pattern W, 1 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] @@ -663,15 +687,17 @@ fn B() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.type.bea: type = facet_type <@I, @I(%T.8b3, %empty_tuple.type)> [symbolic] // CHECK:STDOUT: %Self.ec5: %I.type.bea = bind_symbolic_name Self, 2 [symbolic] // CHECK:STDOUT: %require_complete.5ce: = require_complete_type %I.type.bea [symbolic] // CHECK:STDOUT: %I.impl_witness.989: = impl_witness file.%I.impl_witness_table, @impl(%T.8b3) [symbolic] // CHECK:STDOUT: %I.type.906: type = facet_type <@I, @I(%empty_struct_type, %empty_struct_type)> [concrete] // CHECK:STDOUT: %T.4b2: %I.type.906 = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.6fc: %I.type.906 = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.a62: type = pattern_type %I.type.906 [concrete] +// CHECK:STDOUT: %T.patt.aa7: %pattern_type.a62 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.4b2 [symbolic] +// CHECK:STDOUT: %pattern_type.f1c: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d5b: = require_complete_type %T.as_type [symbolic] @@ -700,15 +726,15 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %V.patt.loc3_13.1: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_13.2 (constants.%V.patt)] -// CHECK:STDOUT: %W.patt.loc3_23.1: type = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_23.2 (constants.%W.patt)] +// CHECK:STDOUT: %V.patt.loc3_13.1: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_13.2 (constants.%V.patt)] +// CHECK:STDOUT: %W.patt.loc3_23.1: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_23.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %V.loc3_13.1: type = bind_symbolic_name V, 0 [symbolic = %V.loc3_13.2 (constants.%V)] // CHECK:STDOUT: %W.loc3_23.1: type = bind_symbolic_name W, 1 [symbolic = %W.loc3_23.2 (constants.%W)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc7_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc7_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -721,9 +747,9 @@ fn B() { // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @impl(constants.%T.8b3) [symbolic = @impl.%I.impl_witness (constants.%I.impl_witness.989)] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %T.patt.loc9_6.1: %I.type.906 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.6fc)] -// CHECK:STDOUT: %t.patt: @A.%T.as_type.loc9_24.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @A.%T.as_type.loc9_24.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc9_6.1: %pattern_type.a62 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.aa7)] +// CHECK:STDOUT: %t.patt: @A.%pattern_type (%pattern_type.f1c) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @A.%pattern_type (%pattern_type.f1c) = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_18.1: type = splice_block %I.type [concrete = constants.%I.type.906] { // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -747,9 +773,9 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%V.loc3_13.1: type, %W.loc3_23.1: type) { // CHECK:STDOUT: %V.loc3_13.2: type = bind_symbolic_name V, 0 [symbolic = %V.loc3_13.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc3_13.2: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_13.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc3_13.2: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc3_13.2 (constants.%V.patt)] // CHECK:STDOUT: %W.loc3_23.2: type = bind_symbolic_name W, 1 [symbolic = %W.loc3_23.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc3_23.2: type = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_23.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc3_23.2: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc3_23.2 (constants.%W.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%V.loc3_13.2, %W.loc3_23.2)> [symbolic = %I.type (constants.%I.type.f76)] @@ -766,7 +792,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc7_14.1: type) { // CHECK:STDOUT: %T.loc7_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_14.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc7_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc7_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: %I.type.loc7_36.2: type = facet_type <@I, @I(%T.loc7_14.2, constants.%empty_tuple.type)> [symbolic = %I.type.loc7_36.2 (constants.%I.type.bea)] // CHECK:STDOUT: %require_complete: = require_complete_type %I.type.loc7_36.2 [symbolic = %require_complete (constants.%require_complete.5ce)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table, @impl(%T.loc7_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.989)] @@ -790,8 +816,9 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_6.1: %I.type.906) { // CHECK:STDOUT: %T.loc9_6.2: %I.type.906 = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T.4b2)] -// CHECK:STDOUT: %T.patt.loc9_6.2: %I.type.906 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.6fc)] +// CHECK:STDOUT: %T.patt.loc9_6.2: %pattern_type.a62 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.aa7)] // CHECK:STDOUT: %T.as_type.loc9_24.2: type = facet_access_type %T.loc9_6.2 [symbolic = %T.as_type.loc9_24.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_24.2 [symbolic = %pattern_type (constants.%pattern_type.f1c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc9_24.2 [symbolic = %require_complete (constants.%require_complete.d5b)] @@ -836,7 +863,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T.8b3) { // CHECK:STDOUT: %T.loc7_14.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %I.type.loc7_36.2 => constants.%I.type.bea // CHECK:STDOUT: %require_complete => constants.%require_complete.5ce // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.989 @@ -855,13 +882,14 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.4b2) { // CHECK:STDOUT: %T.loc9_6.2 => constants.%T.4b2 -// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.6fc +// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.aa7 // CHECK:STDOUT: %T.as_type.loc9_24.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f1c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%empty_struct_type) { // CHECK:STDOUT: %T.loc7_14.2 => constants.%empty_struct_type -// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %I.type.loc7_36.2 => constants.%I.type.202 // CHECK:STDOUT: %require_complete => constants.%complete_type.3d9 // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.806 @@ -884,9 +912,10 @@ fn B() { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %V: type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %W: type = bind_symbolic_name W, 1 [symbolic] -// CHECK:STDOUT: %W.patt: type = symbolic_binding_pattern W, 1 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -894,12 +923,14 @@ fn B() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.463: type = class_type @C, @C(%T.8b3, %empty_tuple.type) [symbolic] // CHECK:STDOUT: %I.impl_witness.45b: = impl_witness file.%I.impl_witness_table, @impl(%T.8b3) [symbolic] // CHECK:STDOUT: %T.826: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.3ad: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt.132: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.826 [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] @@ -928,14 +959,14 @@ fn B() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %V.patt.loc5_9.1: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc5_9.2 (constants.%V.patt)] -// CHECK:STDOUT: %W.patt.loc5_19.1: type = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc5_19.2 (constants.%W.patt)] +// CHECK:STDOUT: %V.patt.loc5_9.1: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc5_9.2 (constants.%V.patt)] +// CHECK:STDOUT: %W.patt.loc5_19.1: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc5_19.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %V.loc5_9.1: type = bind_symbolic_name V, 0 [symbolic = %V.loc5_9.2 (constants.%V)] // CHECK:STDOUT: %W.loc5_19.1: type = bind_symbolic_name W, 1 [symbolic = %W.loc5_19.2 (constants.%W)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc7_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc7_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc7_14.1 [symbolic = %T.loc7_14.2 (constants.%T.8b3)] @@ -948,9 +979,9 @@ fn B() { // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @impl(constants.%T.8b3) [symbolic = @impl.%I.impl_witness (constants.%I.impl_witness.45b)] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %T.patt.loc9_6.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.3ad)] -// CHECK:STDOUT: %t.patt: @A.%T.as_type.loc9_16.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @A.%T.as_type.loc9_16.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc9_6.1: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.132)] +// CHECK:STDOUT: %t.patt: @A.%pattern_type (%pattern_type.6de) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @A.%pattern_type (%pattern_type.6de) = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: %T.loc9_6.1: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T.826)] @@ -975,7 +1006,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc7_14.1: type) { // CHECK:STDOUT: %T.loc7_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_14.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc7_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc7_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: %C.loc7_31.2: type = class_type @C, @C(%T.loc7_14.2, constants.%empty_tuple.type) [symbolic = %C.loc7_31.2 (constants.%C.463)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table, @impl(%T.loc7_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.45b)] // CHECK:STDOUT: @@ -989,9 +1020,9 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%V.loc5_9.1: type, %W.loc5_19.1: type) { // CHECK:STDOUT: %V.loc5_9.2: type = bind_symbolic_name V, 0 [symbolic = %V.loc5_9.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc5_9.2: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc5_9.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc5_9.2: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc5_9.2 (constants.%V.patt)] // CHECK:STDOUT: %W.loc5_19.2: type = bind_symbolic_name W, 1 [symbolic = %W.loc5_19.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc5_19.2: type = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc5_19.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc5_19.2: %pattern_type.98f = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc5_19.2 (constants.%W.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1007,8 +1038,9 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc9_6.1: %I.type) { // CHECK:STDOUT: %T.loc9_6.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T.826)] -// CHECK:STDOUT: %T.patt.loc9_6.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.3ad)] +// CHECK:STDOUT: %T.patt.loc9_6.2: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.132)] // CHECK:STDOUT: %T.as_type.loc9_16.2: type = facet_access_type %T.loc9_6.2 [symbolic = %T.as_type.loc9_16.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_16.2 [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc9_16.2 [symbolic = %require_complete (constants.%require_complete)] @@ -1052,7 +1084,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T.8b3) { // CHECK:STDOUT: %T.loc7_14.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %C.loc7_31.2 => constants.%C.463 // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.45b // CHECK:STDOUT: } @@ -1063,8 +1095,9 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.826) { // CHECK:STDOUT: %T.loc9_6.2 => constants.%T.826 -// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.3ad +// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.132 // CHECK:STDOUT: %T.as_type.loc9_16.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%empty_struct_type, constants.%empty_struct_type) { @@ -1078,7 +1111,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%empty_struct_type) { // CHECK:STDOUT: %T.loc7_14.2 => constants.%empty_struct_type -// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc7_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %C.loc7_31.2 => constants.%C.83b // CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.80e // CHECK:STDOUT: } @@ -1094,12 +1127,15 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -1109,6 +1145,7 @@ fn B() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -1121,12 +1158,12 @@ fn B() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -1134,7 +1171,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -1147,10 +1184,10 @@ fn B() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -1176,7 +1213,7 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -1189,10 +1226,10 @@ fn B() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -1221,6 +1258,8 @@ fn B() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -1230,6 +1269,8 @@ fn B() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -1244,6 +1285,8 @@ fn B() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -1260,6 +1303,8 @@ fn B() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_as_type_knows_original_type.carbon b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_as_type_knows_original_type.carbon index 150fecfb060c..747bb07a99ad 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_as_type_knows_original_type.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_as_type_knows_original_type.carbon @@ -71,7 +71,8 @@ fn F() { // CHECK:STDOUT: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness file.%Eats.impl_witness_table [concrete] // CHECK:STDOUT: %e: %Eats.type = bind_symbolic_name e, 0 [symbolic] -// CHECK:STDOUT: %e.patt: %Eats.type = symbolic_binding_pattern e, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Eats.type [concrete] +// CHECK:STDOUT: %e.patt: %pattern_type = symbolic_binding_pattern e, 0 [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] @@ -114,7 +115,7 @@ fn F() { // CHECK:STDOUT: %Eats.impl_witness_table = impl_witness_table (), @impl.b88 [concrete] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness %Eats.impl_witness_table [concrete = constants.%Eats.impl_witness] // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %e.patt.loc11_9.1: %Eats.type = symbolic_binding_pattern e, 0 [symbolic = %e.patt.loc11_9.2 (constants.%e.patt)] +// CHECK:STDOUT: %e.patt.loc11_9.1: %pattern_type = symbolic_binding_pattern e, 0 [symbolic = %e.patt.loc11_9.2 (constants.%e.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] // CHECK:STDOUT: %e.loc11_9.1: %Eats.type = bind_symbolic_name e, 0 [symbolic = %e.loc11_9.2 (constants.%e)] @@ -159,7 +160,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%e.loc11_9.1: %Eats.type) { // CHECK:STDOUT: %e.loc11_9.2: %Eats.type = bind_symbolic_name e, 0 [symbolic = %e.loc11_9.2 (constants.%e)] -// CHECK:STDOUT: %e.patt.loc11_9.2: %Eats.type = symbolic_binding_pattern e, 0 [symbolic = %e.patt.loc11_9.2 (constants.%e.patt)] +// CHECK:STDOUT: %e.patt.loc11_9.2: %pattern_type = symbolic_binding_pattern e, 0 [symbolic = %e.patt.loc11_9.2 (constants.%e.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -222,6 +223,7 @@ fn F() { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Goat [concrete] // CHECK:STDOUT: %Goat.val: %Goat = struct_value () [concrete] // CHECK:STDOUT: %.f6e: type = fn_type_with_self_type %Eat.type.e5d, %Eats.facet [concrete] // CHECK:STDOUT: } @@ -323,7 +325,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %Goat = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %.loc22_28.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %Goat.ref.loc22_33: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat] @@ -387,12 +389,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -402,6 +407,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -414,12 +420,12 @@ fn F() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -427,7 +433,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -440,10 +446,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -469,7 +475,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -482,10 +488,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -514,6 +520,8 @@ fn F() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -523,6 +531,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -537,6 +547,8 @@ fn F() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -553,6 +565,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_itself.carbon b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_itself.carbon index 9fcd983a489b..4ba6867bfe24 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_itself.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_itself.carbon @@ -30,7 +30,8 @@ fn F() { // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: %Animal.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Animal.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %FeedAnimal.type: type = fn_type @FeedAnimal [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %FeedAnimal: %FeedAnimal.type = struct_value () [concrete] @@ -66,13 +67,13 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %FeedAnimal.decl: %FeedAnimal.type = fn_decl @FeedAnimal [concrete = constants.%FeedAnimal] { -// CHECK:STDOUT: %T.patt.loc16_15.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %T.loc16_15.1: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt.loc18_17.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc18_17.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %T.loc18_17.1: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc18_17.2 (constants.%T)] @@ -111,7 +112,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedAnimal(%T.loc16_15.1: %Animal.type) { // CHECK:STDOUT: %T.loc16_15.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc16_15.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -123,7 +124,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc18_17.1: %Animal.type) { // CHECK:STDOUT: %T.loc18_17.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc18_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc18_17.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc18_17.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %FeedAnimal.specific_fn.loc18_31.2: = specific_function constants.%FeedAnimal, @FeedAnimal(%T.loc18_17.2) [symbolic = %FeedAnimal.specific_fn.loc18_31.2 (constants.%FeedAnimal.specific_fn.ec8)] @@ -182,12 +183,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -197,6 +201,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -209,12 +214,12 @@ fn F() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -222,7 +227,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -235,10 +240,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -264,7 +269,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -277,10 +282,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -309,6 +314,8 @@ fn F() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -318,6 +325,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -332,6 +341,8 @@ fn F() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -348,6 +359,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_narrowed_facet_type.carbon b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_narrowed_facet_type.carbon index 9b9bff1f2bea..bf2aa4831304 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_narrowed_facet_type.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_to_narrowed_facet_type.carbon @@ -96,8 +96,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self.fd4: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T.1b5: %Eats.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.6be: %Eats.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.a05: type = pattern_type %Eats.type [concrete] +// CHECK:STDOUT: %T.patt.cea: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.1b5 [symbolic] +// CHECK:STDOUT: %pattern_type.2b4: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] @@ -108,12 +110,15 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %assoc0: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl(%T.8b3) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl(%T.8b3) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T.8b3 [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl(type) [concrete] @@ -126,8 +131,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %bound_method: = bound_method %Animal.type, %Op.specific_fn [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@Eats & @Animal> [concrete] // CHECK:STDOUT: %U: %facet_type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %facet_type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.787: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.787 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] +// CHECK:STDOUT: %pattern_type.56f: type = pattern_type %U.as_type [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.680: = require_complete_type %U.as_type [symbolic] @@ -141,10 +148,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.%T (constants.%T.8b3)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.%T (constants.%T.8b3)] @@ -164,9 +171,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Eats.decl: type = interface_decl @Eats [concrete = constants.%Eats.type] {} {} // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %T.patt.loc6_9.1: %Eats.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt.6be)] -// CHECK:STDOUT: %e.patt: @Feed.%T.as_type.loc6_22.2 (%T.as_type) = binding_pattern e -// CHECK:STDOUT: %e.param_patt: @Feed.%T.as_type.loc6_22.2 (%T.as_type) = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc6_9.1: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt.cea)] +// CHECK:STDOUT: %e.patt: @Feed.%pattern_type (%pattern_type.2b4) = binding_pattern e +// CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type (%pattern_type.2b4) = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] // CHECK:STDOUT: %T.loc6_9.1: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T.1b5)] @@ -179,9 +186,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %e: @Feed.%T.as_type.loc6_22.2 (%T.as_type) = bind_name e, %e.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %U.patt.loc8_17.1: %facet_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_17.2 (constants.%U.patt)] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%U.as_type.loc8_39.2 (%U.as_type) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%U.as_type.loc8_39.2 (%U.as_type) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc8_17.1: %pattern_type.787 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type (%pattern_type.56f) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type (%pattern_type.56f) = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_28.1: type = splice_block %.loc8_28.3 [concrete = constants.%facet_type] { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] @@ -230,7 +237,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.250)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -246,8 +253,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc6_9.1: %Eats.type) { // CHECK:STDOUT: %T.loc6_9.2: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T.1b5)] -// CHECK:STDOUT: %T.patt.loc6_9.2: %Eats.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt.6be)] +// CHECK:STDOUT: %T.patt.loc6_9.2: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt.cea)] // CHECK:STDOUT: %T.as_type.loc6_22.2: type = facet_access_type %T.loc6_9.2 [symbolic = %T.as_type.loc6_22.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc6_22.2 [symbolic = %pattern_type (constants.%pattern_type.2b4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc6_22.2 [symbolic = %require_complete (constants.%require_complete.c75)] @@ -261,12 +269,14 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -275,8 +285,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%U.loc8_17.1: %facet_type) { // CHECK:STDOUT: %U.loc8_17.2: %facet_type = bind_symbolic_name U, 0 [symbolic = %U.loc8_17.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc8_17.2: %facet_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc8_17.2: %pattern_type.787 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_17.2 (constants.%U.patt)] // CHECK:STDOUT: %U.as_type.loc8_39.2: type = facet_access_type %U.loc8_17.2 [symbolic = %U.as_type.loc8_39.2 (constants.%U.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc8_39.2 [symbolic = %pattern_type (constants.%pattern_type.56f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc8_39.2 [symbolic = %require_complete (constants.%require_complete.680)] @@ -300,18 +311,20 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%T.1b5) { // CHECK:STDOUT: %T.loc6_9.2 => constants.%T.1b5 -// CHECK:STDOUT: %T.patt.loc6_9.2 => constants.%T.patt.6be +// CHECK:STDOUT: %T.patt.loc6_9.2 => constants.%T.patt.cea // CHECK:STDOUT: %T.as_type.loc6_22.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2b4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %T.patt => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt => constants.%T.patt.250 // CHECK:STDOUT: %BitAnd.impl_witness => constants.%BitAnd.impl_witness.b7b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -319,11 +332,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(type) { // CHECK:STDOUT: %T => type -// CHECK:STDOUT: %T.patt => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt => constants.%T.patt.250 // CHECK:STDOUT: %BitAnd.impl_witness => constants.%BitAnd.impl_witness.0e5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -334,6 +348,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -342,12 +357,14 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %U.loc8_17.2 => constants.%U // CHECK:STDOUT: %U.patt.loc8_17.2 => constants.%U.patt // CHECK:STDOUT: %U.as_type.loc8_39.2 => constants.%U.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.56f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Eats.facet) { // CHECK:STDOUT: %T.loc6_9.2 => constants.%Eats.facet -// CHECK:STDOUT: %T.patt.loc6_9.2 => constants.%T.patt.6be +// CHECK:STDOUT: %T.patt.loc6_9.2 => constants.%T.patt.cea // CHECK:STDOUT: %T.as_type.loc6_22.2 => constants.%U.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.56f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.680 @@ -371,12 +388,15 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl(type) [concrete] @@ -389,8 +409,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %bound_method.a56: = bound_method %Tame.type, %Op.specific_fn [concrete] // CHECK:STDOUT: %facet_type.6ff: type = facet_type <@Eats & @Tame> [concrete] // CHECK:STDOUT: %V: %facet_type.6ff = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %facet_type.6ff = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.9f3: type = pattern_type %facet_type.6ff [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.9f3 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] +// CHECK:STDOUT: %pattern_type.760: type = pattern_type %V.as_type [symbolic] // CHECK:STDOUT: %FeedTame.type: type = fn_type @FeedTame [concrete] // CHECK:STDOUT: %FeedTame: %FeedTame.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.940: = require_complete_type %V.as_type [symbolic] @@ -401,8 +423,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %bound_method.7fc: = bound_method %facet_type.c3f, %Op.specific_fn [concrete] // CHECK:STDOUT: %facet_type.a95: type = facet_type <@Eats & @Animal & @Tame> [concrete] // CHECK:STDOUT: %W: %facet_type.a95 = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: %facet_type.a95 = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.f1b: type = pattern_type %facet_type.a95 [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type.f1b = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %W.as_type: type = facet_access_type %W [symbolic] +// CHECK:STDOUT: %pattern_type.002: type = pattern_type %W.as_type [symbolic] // CHECK:STDOUT: %HandleTameAnimal.type: type = fn_type @HandleTameAnimal [concrete] // CHECK:STDOUT: %HandleTameAnimal: %HandleTameAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.40f: = require_complete_type %W.as_type [symbolic] @@ -417,10 +441,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.%T (constants.%T)] @@ -442,9 +466,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Tame.decl: type = interface_decl @Tame [concrete = constants.%Tame.type] {} {} // CHECK:STDOUT: %FeedTame.decl: %FeedTame.type = fn_decl @FeedTame [concrete = constants.%FeedTame] { -// CHECK:STDOUT: %V.patt.loc7_13.1: %facet_type.6ff = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc7_13.2 (constants.%V.patt)] -// CHECK:STDOUT: %v.patt: @FeedTame.%V.as_type.loc7_33.2 (%V.as_type) = binding_pattern v -// CHECK:STDOUT: %v.param_patt: @FeedTame.%V.as_type.loc7_33.2 (%V.as_type) = value_param_pattern %v.patt, call_param0 +// CHECK:STDOUT: %V.patt.loc7_13.1: %pattern_type.9f3 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc7_13.2 (constants.%V.patt)] +// CHECK:STDOUT: %v.patt: @FeedTame.%pattern_type (%pattern_type.760) = binding_pattern v +// CHECK:STDOUT: %v.param_patt: @FeedTame.%pattern_type (%pattern_type.760) = value_param_pattern %v.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_22.1: type = splice_block %.loc7_22.3 [concrete = constants.%facet_type.6ff] { // CHECK:STDOUT: %Tame.ref: type = name_ref Tame, file.%Tame.decl [concrete = constants.%Tame.type] @@ -467,9 +491,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %v: @FeedTame.%V.as_type.loc7_33.2 (%V.as_type) = bind_name v, %v.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleTameAnimal.decl: %HandleTameAnimal.type = fn_decl @HandleTameAnimal [concrete = constants.%HandleTameAnimal] { -// CHECK:STDOUT: %W.patt.loc9_21.1: %facet_type.a95 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc9_21.2 (constants.%W.patt)] -// CHECK:STDOUT: %w.patt: @HandleTameAnimal.%W.as_type.loc9_50.2 (%W.as_type) = binding_pattern w -// CHECK:STDOUT: %w.param_patt: @HandleTameAnimal.%W.as_type.loc9_50.2 (%W.as_type) = value_param_pattern %w.patt, call_param0 +// CHECK:STDOUT: %W.patt.loc9_21.1: %pattern_type.f1b = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc9_21.2 (constants.%W.patt)] +// CHECK:STDOUT: %w.patt: @HandleTameAnimal.%pattern_type (%pattern_type.002) = binding_pattern w +// CHECK:STDOUT: %w.param_patt: @HandleTameAnimal.%pattern_type (%pattern_type.002) = value_param_pattern %w.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_39.1: type = splice_block %.loc9_39.3 [concrete = constants.%facet_type.a95] { // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] @@ -534,7 +558,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -551,12 +575,14 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -565,8 +591,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedTame(%V.loc7_13.1: %facet_type.6ff) { // CHECK:STDOUT: %V.loc7_13.2: %facet_type.6ff = bind_symbolic_name V, 0 [symbolic = %V.loc7_13.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc7_13.2: %facet_type.6ff = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc7_13.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc7_13.2: %pattern_type.9f3 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc7_13.2 (constants.%V.patt)] // CHECK:STDOUT: %V.as_type.loc7_33.2: type = facet_access_type %V.loc7_13.2 [symbolic = %V.as_type.loc7_33.2 (constants.%V.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %V.as_type.loc7_33.2 [symbolic = %pattern_type (constants.%pattern_type.760)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %V.as_type.loc7_33.2 [symbolic = %require_complete (constants.%require_complete.940)] @@ -579,8 +606,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleTameAnimal(%W.loc9_21.1: %facet_type.a95) { // CHECK:STDOUT: %W.loc9_21.2: %facet_type.a95 = bind_symbolic_name W, 0 [symbolic = %W.loc9_21.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc9_21.2: %facet_type.a95 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc9_21.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc9_21.2: %pattern_type.f1b = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc9_21.2 (constants.%W.patt)] // CHECK:STDOUT: %W.as_type.loc9_50.2: type = facet_access_type %W.loc9_21.2 [symbolic = %W.as_type.loc9_50.2 (constants.%W.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %W.as_type.loc9_50.2 [symbolic = %pattern_type (constants.%pattern_type.002)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %W.as_type.loc9_50.2 [symbolic = %require_complete (constants.%require_complete.40f)] @@ -606,6 +634,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -618,6 +647,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(type) { @@ -633,6 +663,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -641,18 +672,21 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %V.loc7_13.2 => constants.%V // CHECK:STDOUT: %V.patt.loc7_13.2 => constants.%V.patt // CHECK:STDOUT: %V.as_type.loc7_33.2 => constants.%V.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.760 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleTameAnimal(constants.%W) { // CHECK:STDOUT: %W.loc9_21.2 => constants.%W // CHECK:STDOUT: %W.patt.loc9_21.2 => constants.%W.patt // CHECK:STDOUT: %W.as_type.loc9_50.2 => constants.%W.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.002 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedTame(constants.%facet_value) { // CHECK:STDOUT: %V.loc7_13.2 => constants.%facet_value // CHECK:STDOUT: %V.patt.loc7_13.2 => constants.%V.patt // CHECK:STDOUT: %V.as_type.loc7_33.2 => constants.%W.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.002 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.40f @@ -670,7 +704,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Tame.type: type = facet_type <@Tame> [concrete] // CHECK:STDOUT: %Self.7ee: %Tame.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %A: %Animal.type = bind_symbolic_name A, 0 [symbolic] -// CHECK:STDOUT: %A.patt: %Animal.type = symbolic_binding_pattern A, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.3b0: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.3b0 = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A.as_type: type = facet_access_type %A [symbolic] // CHECK:STDOUT: %Eats.impl_witness.8ab: = impl_witness file.%Eats.impl_witness_table, @impl.e7b(%A) [symbolic] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] @@ -680,12 +715,15 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl.f92 [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl.f92(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] @@ -698,8 +736,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %bound_method.a56: = bound_method %Tame.type, %Op.specific_fn [concrete] // CHECK:STDOUT: %facet_type.6ff: type = facet_type <@Eats & @Tame> [concrete] // CHECK:STDOUT: %V: %facet_type.6ff = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %facet_type.6ff = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.9f3: type = pattern_type %facet_type.6ff [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.9f3 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] +// CHECK:STDOUT: %pattern_type.760: type = pattern_type %V.as_type [symbolic] // CHECK:STDOUT: %FeedTame2.type: type = fn_type @FeedTame2 [concrete] // CHECK:STDOUT: %FeedTame2: %FeedTame2.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.940: = require_complete_type %V.as_type [symbolic] @@ -707,8 +747,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %bound_method.a26: = bound_method %Animal.type, %Op.specific_fn [concrete] // CHECK:STDOUT: %facet_type.65c: type = facet_type <@Animal & @Tame> [concrete] // CHECK:STDOUT: %W: %facet_type.65c = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: %facet_type.65c = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.6e8: type = pattern_type %facet_type.65c [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type.6e8 = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %W.as_type: type = facet_access_type %W [symbolic] +// CHECK:STDOUT: %pattern_type.5d1: type = pattern_type %W.as_type [symbolic] // CHECK:STDOUT: %HandleTameAnimal2.type: type = fn_type @HandleTameAnimal2 [concrete] // CHECK:STDOUT: %HandleTameAnimal2: %HandleTameAnimal2.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.ba9: = require_complete_type %W.as_type [symbolic] @@ -726,10 +768,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.f92.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.f92.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.f92.%T (constants.%T)] @@ -751,7 +793,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Tame.decl: type = interface_decl @Tame [concrete = constants.%Tame.type] {} {} // CHECK:STDOUT: impl_decl @impl.e7b [concrete] { -// CHECK:STDOUT: %A.patt.loc7_14.1: %Animal.type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc7_14.2 (constants.%A.patt)] +// CHECK:STDOUT: %A.patt.loc7_14.1: %pattern_type.3b0 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc7_14.2 (constants.%A.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: %Animal.type = name_ref A, %A.loc7_14.1 [symbolic = %A.loc7_14.2 (constants.%A)] // CHECK:STDOUT: %A.as_type.loc7_26.1: type = facet_access_type %A.ref [symbolic = %A.as_type.loc7_26.2 (constants.%A.as_type)] @@ -763,9 +805,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Eats.impl_witness_table = impl_witness_table (), @impl.e7b [concrete] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness %Eats.impl_witness_table, @impl.e7b(constants.%A) [symbolic = @impl.e7b.%Eats.impl_witness (constants.%Eats.impl_witness.8ab)] // CHECK:STDOUT: %FeedTame2.decl: %FeedTame2.type = fn_decl @FeedTame2 [concrete = constants.%FeedTame2] { -// CHECK:STDOUT: %V.patt.loc9_14.1: %facet_type.6ff = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_14.2 (constants.%V.patt)] -// CHECK:STDOUT: %v.patt: @FeedTame2.%V.as_type.loc9_34.2 (%V.as_type) = binding_pattern v -// CHECK:STDOUT: %v.param_patt: @FeedTame2.%V.as_type.loc9_34.2 (%V.as_type) = value_param_pattern %v.patt, call_param0 +// CHECK:STDOUT: %V.patt.loc9_14.1: %pattern_type.9f3 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %v.patt: @FeedTame2.%pattern_type (%pattern_type.760) = binding_pattern v +// CHECK:STDOUT: %v.param_patt: @FeedTame2.%pattern_type (%pattern_type.760) = value_param_pattern %v.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_23.1: type = splice_block %.loc9_23.3 [concrete = constants.%facet_type.6ff] { // CHECK:STDOUT: %Tame.ref: type = name_ref Tame, file.%Tame.decl [concrete = constants.%Tame.type] @@ -788,9 +830,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %v: @FeedTame2.%V.as_type.loc9_34.2 (%V.as_type) = bind_name v, %v.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleTameAnimal2.decl: %HandleTameAnimal2.type = fn_decl @HandleTameAnimal2 [concrete = constants.%HandleTameAnimal2] { -// CHECK:STDOUT: %W.patt.loc11_22.1: %facet_type.65c = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_22.2 (constants.%W.patt)] -// CHECK:STDOUT: %w.patt: @HandleTameAnimal2.%W.as_type.loc11_44.2 (%W.as_type) = binding_pattern w -// CHECK:STDOUT: %w.param_patt: @HandleTameAnimal2.%W.as_type.loc11_44.2 (%W.as_type) = value_param_pattern %w.patt, call_param0 +// CHECK:STDOUT: %W.patt.loc11_22.1: %pattern_type.6e8 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_22.2 (constants.%W.patt)] +// CHECK:STDOUT: %w.patt: @HandleTameAnimal2.%pattern_type (%pattern_type.5d1) = binding_pattern w +// CHECK:STDOUT: %w.param_patt: @HandleTameAnimal2.%pattern_type (%pattern_type.5d1) = value_param_pattern %w.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_33.1: type = splice_block %.loc11_33.3 [concrete = constants.%facet_type.65c] { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] @@ -847,7 +889,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.e7b(%A.loc7_14.1: %Animal.type) { // CHECK:STDOUT: %A.loc7_14.2: %Animal.type = bind_symbolic_name A, 0 [symbolic = %A.loc7_14.2 (constants.%A)] -// CHECK:STDOUT: %A.patt.loc7_14.2: %Animal.type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc7_14.2 (constants.%A.patt)] +// CHECK:STDOUT: %A.patt.loc7_14.2: %pattern_type.3b0 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc7_14.2 (constants.%A.patt)] // CHECK:STDOUT: %A.as_type.loc7_26.2: type = facet_access_type %A.loc7_14.2 [symbolic = %A.as_type.loc7_26.2 (constants.%A.as_type)] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness file.%Eats.impl_witness_table, @impl.e7b(%A.loc7_14.2) [symbolic = %Eats.impl_witness (constants.%Eats.impl_witness.8ab)] // CHECK:STDOUT: @@ -861,7 +903,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.f92(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl.f92(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -878,12 +920,14 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -892,8 +936,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedTame2(%V.loc9_14.1: %facet_type.6ff) { // CHECK:STDOUT: %V.loc9_14.2: %facet_type.6ff = bind_symbolic_name V, 0 [symbolic = %V.loc9_14.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc9_14.2: %facet_type.6ff = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc9_14.2: %pattern_type.9f3 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_14.2 (constants.%V.patt)] // CHECK:STDOUT: %V.as_type.loc9_34.2: type = facet_access_type %V.loc9_14.2 [symbolic = %V.as_type.loc9_34.2 (constants.%V.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %V.as_type.loc9_34.2 [symbolic = %pattern_type (constants.%pattern_type.760)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %V.as_type.loc9_34.2 [symbolic = %require_complete (constants.%require_complete.940)] @@ -906,8 +951,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleTameAnimal2(%W.loc11_22.1: %facet_type.65c) { // CHECK:STDOUT: %W.loc11_22.2: %facet_type.65c = bind_symbolic_name W, 0 [symbolic = %W.loc11_22.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc11_22.2: %facet_type.65c = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_22.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc11_22.2: %pattern_type.6e8 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_22.2 (constants.%W.patt)] // CHECK:STDOUT: %W.as_type.loc11_44.2: type = facet_access_type %W.loc11_22.2 [symbolic = %W.as_type.loc11_44.2 (constants.%W.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %W.as_type.loc11_44.2 [symbolic = %pattern_type (constants.%pattern_type.5d1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %W.as_type.loc11_44.2 [symbolic = %require_complete (constants.%require_complete.ba9)] @@ -952,6 +998,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(constants.%T) { @@ -964,6 +1011,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(type) { @@ -979,6 +1027,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -987,12 +1036,14 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %V.loc9_14.2 => constants.%V // CHECK:STDOUT: %V.patt.loc9_14.2 => constants.%V.patt // CHECK:STDOUT: %V.as_type.loc9_34.2 => constants.%V.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.760 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleTameAnimal2(constants.%W) { // CHECK:STDOUT: %W.loc11_22.2 => constants.%W // CHECK:STDOUT: %W.patt.loc11_22.2 => constants.%W.patt // CHECK:STDOUT: %W.as_type.loc11_44.2 => constants.%W.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.5d1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.e7b(constants.%Animal.facet) { @@ -1008,6 +1059,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %V.loc9_14.2 => constants.%facet_value // CHECK:STDOUT: %V.patt.loc9_14.2 => constants.%V.patt // CHECK:STDOUT: %V.as_type.loc9_34.2 => constants.%W.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.5d1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.ba9 @@ -1021,8 +1073,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %A.type: type = facet_type <@A> [concrete] // CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: %A.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %A.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.a2b: type = pattern_type %A.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.a2b = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.f9844e.1: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %TakesA.type: type = fn_type @TakesA [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakesA: %TakesA.type = struct_value () [concrete] @@ -1030,8 +1084,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.Self: %A.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %U: %A.type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %A.type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.a2b = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] +// CHECK:STDOUT: %pattern_type.f9844e.2: type = pattern_type %U.as_type [symbolic] // CHECK:STDOUT: %WithExtraWhere.type: type = fn_type @WithExtraWhere [concrete] // CHECK:STDOUT: %WithExtraWhere: %WithExtraWhere.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.cf45b7.2: = require_complete_type %U.as_type [symbolic] @@ -1054,9 +1109,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = interface_decl @A [concrete = constants.%A.type] {} {} // CHECK:STDOUT: %TakesA.decl: %TakesA.type = fn_decl @TakesA [concrete = constants.%TakesA] { -// CHECK:STDOUT: %T.patt.loc7_11.1: %A.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_11.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @TakesA.%T.as_type.loc7_21.2 (%T.as_type) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @TakesA.%T.as_type.loc7_21.2 (%T.as_type) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc7_11.1: %pattern_type.a2b = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @TakesA.%pattern_type (%pattern_type.f9844e.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @TakesA.%pattern_type (%pattern_type.f9844e.1) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A.type] // CHECK:STDOUT: %T.loc7_11.1: %A.type = bind_symbolic_name T, 0 [symbolic = %T.loc7_11.2 (constants.%T)] @@ -1069,9 +1124,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %x: @TakesA.%T.as_type.loc7_21.2 (%T.as_type) = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %WithExtraWhere.decl: %WithExtraWhere.type = fn_decl @WithExtraWhere [concrete = constants.%WithExtraWhere] { -// CHECK:STDOUT: %U.patt.loc9_19.1: %A.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_19.2 (constants.%U.patt)] -// CHECK:STDOUT: %y.patt: @WithExtraWhere.%U.as_type.loc9_52.2 (%U.as_type) = binding_pattern y -// CHECK:STDOUT: %y.param_patt: @WithExtraWhere.%U.as_type.loc9_52.2 (%U.as_type) = value_param_pattern %y.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc9_19.1: %pattern_type.a2b = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_19.2 (constants.%U.patt)] +// CHECK:STDOUT: %y.patt: @WithExtraWhere.%pattern_type (%pattern_type.f9844e.2) = binding_pattern y +// CHECK:STDOUT: %y.param_patt: @WithExtraWhere.%pattern_type (%pattern_type.f9844e.2) = value_param_pattern %y.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_25.1: type = splice_block %.loc9_25.2 [concrete = constants.%A.type] { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A.type] @@ -1104,8 +1159,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesA(%T.loc7_11.1: %A.type) { // CHECK:STDOUT: %T.loc7_11.2: %A.type = bind_symbolic_name T, 0 [symbolic = %T.loc7_11.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_11.2: %A.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_11.2: %pattern_type.a2b = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_11.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc7_21.2: type = facet_access_type %T.loc7_11.2 [symbolic = %T.as_type.loc7_21.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc7_21.2 [symbolic = %pattern_type (constants.%pattern_type.f9844e.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc7_21.2 [symbolic = %require_complete (constants.%require_complete.cf45b7.1)] @@ -1118,8 +1174,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WithExtraWhere(%U.loc9_19.1: %A.type) { // CHECK:STDOUT: %U.loc9_19.2: %A.type = bind_symbolic_name U, 0 [symbolic = %U.loc9_19.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc9_19.2: %A.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_19.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc9_19.2: %pattern_type.a2b = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_19.2 (constants.%U.patt)] // CHECK:STDOUT: %U.as_type.loc9_52.2: type = facet_access_type %U.loc9_19.2 [symbolic = %U.as_type.loc9_52.2 (constants.%U.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc9_52.2 [symbolic = %pattern_type (constants.%pattern_type.f9844e.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc9_52.2 [symbolic = %require_complete (constants.%require_complete.cf45b7.2)] @@ -1141,18 +1198,21 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %T.loc7_11.2 => constants.%T // CHECK:STDOUT: %T.patt.loc7_11.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc7_21.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f9844e.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @WithExtraWhere(constants.%U) { // CHECK:STDOUT: %U.loc9_19.2 => constants.%U // CHECK:STDOUT: %U.patt.loc9_19.2 => constants.%U.patt // CHECK:STDOUT: %U.as_type.loc9_52.2 => constants.%U.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f9844e.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesA(constants.%U) { // CHECK:STDOUT: %T.loc7_11.2 => constants.%U // CHECK:STDOUT: %T.patt.loc7_11.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc7_21.2 => constants.%U.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f9844e.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.cf45b7.2 @@ -1164,7 +1224,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %TakesTypeDeduced.type: type = fn_type @TakesTypeDeduced [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakesTypeDeduced: %TakesTypeDeduced.type = struct_value () [concrete] @@ -1172,8 +1234,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %U: %type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.d06: type = pattern_type %type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.d06 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] +// CHECK:STDOUT: %pattern_type.772: type = pattern_type %U.as_type [symbolic] // CHECK:STDOUT: %CallsWithExtraWhere.type: type = fn_type @CallsWithExtraWhere [concrete] // CHECK:STDOUT: %CallsWithExtraWhere: %CallsWithExtraWhere.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.5eb: = require_complete_type %U.as_type [symbolic] @@ -1201,9 +1265,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TakesTypeDeduced.decl: %TakesTypeDeduced.type = fn_decl @TakesTypeDeduced [concrete = constants.%TakesTypeDeduced] { -// CHECK:STDOUT: %T.patt.loc3_21.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_21.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @TakesTypeDeduced.%T.loc3_21.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @TakesTypeDeduced.%T.loc3_21.2 (%T) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc3_21.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @TakesTypeDeduced.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @TakesTypeDeduced.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc3_21.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_21.2 (constants.%T)] // CHECK:STDOUT: %x.param: @TakesTypeDeduced.%T.loc3_21.2 (%T) = value_param call_param0 @@ -1211,9 +1275,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %x: @TakesTypeDeduced.%T.loc3_21.2 (%T) = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallsWithExtraWhere.decl: %CallsWithExtraWhere.type = fn_decl @CallsWithExtraWhere [concrete = constants.%CallsWithExtraWhere] { -// CHECK:STDOUT: %U.patt.loc4_24.1: %type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_24.2 (constants.%U.patt)] -// CHECK:STDOUT: %y.patt: @CallsWithExtraWhere.%U.as_type.loc4_60.2 (%U.as_type) = binding_pattern y -// CHECK:STDOUT: %y.param_patt: @CallsWithExtraWhere.%U.as_type.loc4_60.2 (%U.as_type) = value_param_pattern %y.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc4_24.1: %pattern_type.d06 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_24.2 (constants.%U.patt)] +// CHECK:STDOUT: %y.patt: @CallsWithExtraWhere.%pattern_type (%pattern_type.772) = binding_pattern y +// CHECK:STDOUT: %y.param_patt: @CallsWithExtraWhere.%pattern_type (%pattern_type.772) = value_param_pattern %y.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_33.1: type = splice_block %.loc4_33.2 [concrete = constants.%type] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -1232,12 +1296,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %y: @CallsWithExtraWhere.%U.as_type.loc4_60.2 (%U.as_type) = bind_name y, %y.param // CHECK:STDOUT: } // CHECK:STDOUT: %TakesTypeExplicit.decl: %TakesTypeExplicit.type = fn_decl @TakesTypeExplicit [concrete = constants.%TakesTypeExplicit] { -// CHECK:STDOUT: %T.patt.loc8_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_22.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_22.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallsWithExtraWhereExplicit.decl: %CallsWithExtraWhereExplicit.type = fn_decl @CallsWithExtraWhereExplicit [concrete = constants.%CallsWithExtraWhereExplicit] { -// CHECK:STDOUT: %U.patt.loc9_32.1: %type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_32.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc9_32.1: %pattern_type.d06 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_32.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_41.1: type = splice_block %.loc9_41.2 [concrete = constants.%type] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -1252,7 +1316,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesTypeDeduced(%T.loc3_21.1: type) { // CHECK:STDOUT: %T.loc3_21.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_21.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc3_21.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc3_21.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc3_21.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc3_21.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -1265,8 +1330,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallsWithExtraWhere(%U.loc4_24.1: %type) { // CHECK:STDOUT: %U.loc4_24.2: %type = bind_symbolic_name U, 0 [symbolic = %U.loc4_24.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc4_24.2: %type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_24.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc4_24.2: %pattern_type.d06 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_24.2 (constants.%U.patt)] // CHECK:STDOUT: %U.as_type.loc4_60.2: type = facet_access_type %U.loc4_24.2 [symbolic = %U.as_type.loc4_60.2 (constants.%U.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc4_60.2 [symbolic = %pattern_type (constants.%pattern_type.772)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc4_60.2 [symbolic = %require_complete (constants.%require_complete.5eb)] @@ -1284,7 +1350,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesTypeExplicit(%T.loc8_22.1: type) { // CHECK:STDOUT: %T.loc8_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_22.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1296,7 +1362,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallsWithExtraWhereExplicit(%U.loc9_32.1: %type) { // CHECK:STDOUT: %U.loc9_32.2: %type = bind_symbolic_name U, 0 [symbolic = %U.loc9_32.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc9_32.2: %type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_32.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc9_32.2: %pattern_type.d06 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_32.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %U.as_type.loc10_22.2: type = facet_access_type %U.loc9_32.2 [symbolic = %U.as_type.loc10_22.2 (constants.%U.as_type)] @@ -1317,17 +1383,20 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: specific @TakesTypeDeduced(constants.%T) { // CHECK:STDOUT: %T.loc3_21.2 => constants.%T // CHECK:STDOUT: %T.patt.loc3_21.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallsWithExtraWhere(constants.%U) { // CHECK:STDOUT: %U.loc4_24.2 => constants.%U // CHECK:STDOUT: %U.patt.loc4_24.2 => constants.%U.patt // CHECK:STDOUT: %U.as_type.loc4_60.2 => constants.%U.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.772 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesTypeDeduced(constants.%U.as_type) { // CHECK:STDOUT: %T.loc3_21.2 => constants.%U.as_type // CHECK:STDOUT: %T.patt.loc3_21.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.772 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.5eb @@ -1360,14 +1429,18 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %T: %type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.d06: type = pattern_type %type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.d06 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.772: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %TakesExtraWhereDeduced.type: type = fn_type @TakesExtraWhereDeduced [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TakesExtraWhereDeduced: %TakesExtraWhereDeduced.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.5eb: = require_complete_type %T.as_type [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %U [symbolic] // CHECK:STDOUT: %CallsWithType.type: type = fn_type @CallsWithType [concrete] // CHECK:STDOUT: %CallsWithType: %CallsWithType.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %U [symbolic] @@ -1396,9 +1469,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TakesExtraWhereDeduced.decl: %TakesExtraWhereDeduced.type = fn_decl @TakesExtraWhereDeduced [concrete = constants.%TakesExtraWhereDeduced] { -// CHECK:STDOUT: %T.patt.loc3_27.1: %type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_27.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @TakesExtraWhereDeduced.%T.as_type.loc3_63.2 (%T.as_type) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @TakesExtraWhereDeduced.%T.as_type.loc3_63.2 (%T.as_type) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc3_27.1: %pattern_type.d06 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @TakesExtraWhereDeduced.%pattern_type (%pattern_type.772) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @TakesExtraWhereDeduced.%pattern_type (%pattern_type.772) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc3_36.1: type = splice_block %.loc3_36.2 [concrete = constants.%type] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -1417,9 +1490,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %x: @TakesExtraWhereDeduced.%T.as_type.loc3_63.2 (%T.as_type) = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallsWithType.decl: %CallsWithType.type = fn_decl @CallsWithType [concrete = constants.%CallsWithType] { -// CHECK:STDOUT: %U.patt.loc4_18.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_18.2 (constants.%U.patt)] -// CHECK:STDOUT: %y.patt: @CallsWithType.%U.loc4_18.2 (%U) = binding_pattern y -// CHECK:STDOUT: %y.param_patt: @CallsWithType.%U.loc4_18.2 (%U) = value_param_pattern %y.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc4_18.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_18.2 (constants.%U.patt)] +// CHECK:STDOUT: %y.patt: @CallsWithType.%pattern_type (%pattern_type.7dc) = binding_pattern y +// CHECK:STDOUT: %y.param_patt: @CallsWithType.%pattern_type (%pattern_type.7dc) = value_param_pattern %y.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc4_18.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc4_18.2 (constants.%U)] // CHECK:STDOUT: %y.param: @CallsWithType.%U.loc4_18.2 (%U) = value_param call_param0 @@ -1427,7 +1500,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %y: @CallsWithType.%U.loc4_18.2 (%U) = bind_name y, %y.param // CHECK:STDOUT: } // CHECK:STDOUT: %TakesExtraWhereExplicit.decl: %TakesExtraWhereExplicit.type = fn_decl @TakesExtraWhereExplicit [concrete = constants.%TakesExtraWhereExplicit] { -// CHECK:STDOUT: %T.patt.loc8_28.1: %type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_28.1: %pattern_type.d06 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_28.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_37.1: type = splice_block %.loc8_37.2 [concrete = constants.%type] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -1439,7 +1512,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %T.loc8_28.1: %type = bind_symbolic_name T, 0 [symbolic = %T.loc8_28.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallsWithTypeExplicit.decl: %CallsWithTypeExplicit.type = fn_decl @CallsWithTypeExplicit [concrete = constants.%CallsWithTypeExplicit] { -// CHECK:STDOUT: %U.patt.loc9_26.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_26.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc9_26.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_26.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc9_26.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc9_26.2 (constants.%U)] // CHECK:STDOUT: } @@ -1447,8 +1520,9 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesExtraWhereDeduced(%T.loc3_27.1: %type) { // CHECK:STDOUT: %T.loc3_27.2: %type = bind_symbolic_name T, 0 [symbolic = %T.loc3_27.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc3_27.2: %type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc3_27.2: %pattern_type.d06 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_27.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc3_63.2: type = facet_access_type %T.loc3_27.2 [symbolic = %T.as_type.loc3_63.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc3_63.2 [symbolic = %pattern_type (constants.%pattern_type.772)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc3_63.2 [symbolic = %require_complete (constants.%require_complete.5eb)] @@ -1461,7 +1535,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallsWithType(%U.loc4_18.1: type) { // CHECK:STDOUT: %U.loc4_18.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc4_18.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc4_18.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_18.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc4_18.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc4_18.2 (constants.%U.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U.loc4_18.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.loc4_18.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -1484,7 +1559,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesExtraWhereExplicit(%T.loc8_28.1: %type) { // CHECK:STDOUT: %T.loc8_28.2: %type = bind_symbolic_name T, 0 [symbolic = %T.loc8_28.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_28.2: %type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_28.2: %pattern_type.d06 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_28.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1496,7 +1571,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallsWithTypeExplicit(%U.loc9_26.1: type) { // CHECK:STDOUT: %U.loc9_26.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc9_26.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc9_26.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_26.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc9_26.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc9_26.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %facet_value.loc10_28.2: %type = facet_value %U.loc9_26.2, () [symbolic = %facet_value.loc10_28.2 (constants.%facet_value)] @@ -1518,17 +1593,20 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %T.loc3_27.2 => constants.%T // CHECK:STDOUT: %T.patt.loc3_27.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc3_63.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.772 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @CallsWithType(constants.%U) { // CHECK:STDOUT: %U.loc4_18.2 => constants.%U // CHECK:STDOUT: %U.patt.loc4_18.2 => constants.%U.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TakesExtraWhereDeduced(constants.%facet_value) { // CHECK:STDOUT: %T.loc3_27.2 => constants.%facet_value // CHECK:STDOUT: %T.patt.loc3_27.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc3_63.2 => constants.%U +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -1559,12 +1637,15 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -1574,6 +1655,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -1581,13 +1663,15 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Self.e44: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.560: type = facet_access_type %Self.e44 [symbolic] +// CHECK:STDOUT: %pattern_type.a80: type = pattern_type %Self.as_type.560 [symbolic] // CHECK:STDOUT: %Op.type.613: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d98: %Op.type.613 = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.assoc_type: type = assoc_entity_type @BitAnd [concrete] // CHECK:STDOUT: %assoc0.220: %BitAnd.assoc_type = assoc_entity element0, @BitAnd.%Op.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Op.type.28d: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.902: %Op.type.28d = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -1601,18 +1685,18 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: .BitAnd = %BitAnd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc9_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc9_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc13_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc13_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %BitAnd.decl: type = interface_decl @BitAnd [concrete = constants.%BitAnd.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc21_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc21_14.1 [symbolic = %T.loc21_14.2 (constants.%T)] // CHECK:STDOUT: %BitAnd.ref: type = name_ref BitAnd, file.%BitAnd.decl [concrete = constants.%BitAnd.type] @@ -1624,7 +1708,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc9_14.1: type) { // CHECK:STDOUT: %Dest.loc9_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc9_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc9_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -1637,10 +1721,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc9_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -1666,7 +1750,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc13_22.1: type) { // CHECK:STDOUT: %Dest.loc13_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc13_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc13_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -1679,10 +1763,10 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc13_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -1709,12 +1793,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: interface @BitAnd { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.e44] // CHECK:STDOUT: %Op.decl: %Op.type.613 = fn_decl @Op.1 [concrete = constants.%Op.d98] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.a80) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18_37: %BitAnd.type = name_ref Self, @BitAnd.%Self [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_37: type = facet_access_type %Self.ref.loc18_37 [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] @@ -1746,7 +1830,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc21_14.1: type) { // CHECK:STDOUT: %T.loc21_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T.loc21_14.2) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1756,12 +1840,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %BitAnd.ref { // CHECK:STDOUT: %Op.decl: @impl.%Op.type (%Op.type.28d) = fn_decl @Op.2 [symbolic = @impl.%Op (constants.%Op.902)] { -// CHECK:STDOUT: %self.patt: @Op.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.2.%T (%T) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.2.%T (%T) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.2.%T (%T) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.2.%T (%T) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc22_37: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Op.2.%T (%T) = value_param call_param0 @@ -1785,6 +1869,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc10_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc10_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc10_14: type = pattern_type %Self.as_type.loc10_20.1 [symbolic = %pattern_type.loc10_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc10_28: type = pattern_type %Dest [symbolic = %pattern_type.loc10_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -1794,6 +1880,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -1801,12 +1889,14 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: generic fn @Op.1(@BitAnd.%Self: %BitAnd.type) { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_15.1 [symbolic = %pattern_type (constants.%pattern_type.a80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560), %other.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560)) -> @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(@impl.%T.loc21_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1823,6 +1913,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc10_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc10_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc10_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -1839,6 +1931,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} @@ -1848,6 +1942,7 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: specific @Op.1(constants.%Self.e44) { // CHECK:STDOUT: %Self => constants.%Self.e44 // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%Self.as_type.560 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -1860,10 +1955,12 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%BitAnd.facet) { // CHECK:STDOUT: %Self => constants.%BitAnd.facet // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_blanket_impl.carbon b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_blanket_impl.carbon index 00dbd1064f75..33f274a7d292 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_blanket_impl.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_blanket_impl.carbon @@ -28,19 +28,23 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self.fd4: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %A: %Animal.type = bind_symbolic_name A, 0 [symbolic] -// CHECK:STDOUT: %A.patt: %Animal.type = symbolic_binding_pattern A, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.3b0: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %A.patt: %pattern_type.3b0 = symbolic_binding_pattern A, 0 [symbolic] // CHECK:STDOUT: %A.as_type: type = facet_access_type %A [symbolic] // CHECK:STDOUT: %Eats.impl_witness.8abeaf.1: = impl_witness file.%Eats.impl_witness_table, @impl(%A) [symbolic] // CHECK:STDOUT: %T.1b5: %Eats.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.6be: %Eats.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.a05: type = pattern_type %Eats.type [concrete] +// CHECK:STDOUT: %T.patt.cea: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.27d: type = facet_access_type %T.1b5 [symbolic] +// CHECK:STDOUT: %pattern_type.2b4: type = pattern_type %T.as_type.27d [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.c75: = require_complete_type %T.as_type.27d [symbolic] // CHECK:STDOUT: %T.fd4: %Animal.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.a9c: %Animal.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt.e5b: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.2ad: type = facet_access_type %T.fd4 [symbolic] +// CHECK:STDOUT: %pattern_type.36a: type = pattern_type %T.as_type.2ad [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.234: = require_complete_type %T.as_type.2ad [symbolic] @@ -68,7 +72,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %Eats.decl: type = interface_decl @Eats [concrete = constants.%Eats.type] {} {} // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %A.patt.loc17_14.1: %Animal.type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc17_14.2 (constants.%A.patt)] +// CHECK:STDOUT: %A.patt.loc17_14.1: %pattern_type.3b0 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc17_14.2 (constants.%A.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: %Animal.type = name_ref A, %A.loc17_14.1 [symbolic = %A.loc17_14.2 (constants.%A)] // CHECK:STDOUT: %A.as_type.loc17_26.1: type = facet_access_type %A.ref [symbolic = %A.as_type.loc17_26.2 (constants.%A.as_type)] @@ -80,9 +84,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %Eats.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness %Eats.impl_witness_table, @impl(constants.%A) [symbolic = @impl.%Eats.impl_witness (constants.%Eats.impl_witness.8abeaf.1)] // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %T.patt.loc19_9.1: %Eats.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_9.2 (constants.%T.patt.6be)] -// CHECK:STDOUT: %e.patt: @Feed.%T.as_type.loc19_22.2 (%T.as_type.27d) = binding_pattern e -// CHECK:STDOUT: %e.param_patt: @Feed.%T.as_type.loc19_22.2 (%T.as_type.27d) = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc19_9.1: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_9.2 (constants.%T.patt.cea)] +// CHECK:STDOUT: %e.patt: @Feed.%pattern_type (%pattern_type.2b4) = binding_pattern e +// CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type (%pattern_type.2b4) = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] // CHECK:STDOUT: %T.loc19_9.1: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc19_9.2 (constants.%T.1b5)] @@ -95,9 +99,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %e: @Feed.%T.as_type.loc19_22.2 (%T.as_type.27d) = bind_name e, %e.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt.loc21_17.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_17.2 (constants.%T.patt.a9c)] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%T.as_type.loc21_32.2 (%T.as_type.2ad) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%T.as_type.loc21_32.2 (%T.as_type.2ad) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc21_17.1: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_17.2 (constants.%T.patt.e5b)] +// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type (%pattern_type.36a) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type (%pattern_type.36a) = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %T.loc21_17.1: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc21_17.2 (constants.%T.fd4)] @@ -129,7 +133,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%A.loc17_14.1: %Animal.type) { // CHECK:STDOUT: %A.loc17_14.2: %Animal.type = bind_symbolic_name A, 0 [symbolic = %A.loc17_14.2 (constants.%A)] -// CHECK:STDOUT: %A.patt.loc17_14.2: %Animal.type = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc17_14.2 (constants.%A.patt)] +// CHECK:STDOUT: %A.patt.loc17_14.2: %pattern_type.3b0 = symbolic_binding_pattern A, 0 [symbolic = %A.patt.loc17_14.2 (constants.%A.patt)] // CHECK:STDOUT: %A.as_type.loc17_26.2: type = facet_access_type %A.loc17_14.2 [symbolic = %A.as_type.loc17_26.2 (constants.%A.as_type)] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness file.%Eats.impl_witness_table, @impl(%A.loc17_14.2) [symbolic = %Eats.impl_witness (constants.%Eats.impl_witness.8abeaf.1)] // CHECK:STDOUT: @@ -143,8 +147,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc19_9.1: %Eats.type) { // CHECK:STDOUT: %T.loc19_9.2: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc19_9.2 (constants.%T.1b5)] -// CHECK:STDOUT: %T.patt.loc19_9.2: %Eats.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_9.2 (constants.%T.patt.6be)] +// CHECK:STDOUT: %T.patt.loc19_9.2: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_9.2 (constants.%T.patt.cea)] // CHECK:STDOUT: %T.as_type.loc19_22.2: type = facet_access_type %T.loc19_9.2 [symbolic = %T.as_type.loc19_22.2 (constants.%T.as_type.27d)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc19_22.2 [symbolic = %pattern_type (constants.%pattern_type.2b4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc19_22.2 [symbolic = %require_complete (constants.%require_complete.c75)] @@ -157,8 +162,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc21_17.1: %Animal.type) { // CHECK:STDOUT: %T.loc21_17.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc21_17.2 (constants.%T.fd4)] -// CHECK:STDOUT: %T.patt.loc21_17.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_17.2 (constants.%T.patt.a9c)] +// CHECK:STDOUT: %T.patt.loc21_17.2: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_17.2 (constants.%T.patt.e5b)] // CHECK:STDOUT: %T.as_type.loc21_32.2: type = facet_access_type %T.loc21_17.2 [symbolic = %T.as_type.loc21_32.2 (constants.%T.as_type.2ad)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc21_32.2 [symbolic = %pattern_type (constants.%pattern_type.36a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc21_32.2 [symbolic = %require_complete (constants.%require_complete.234)] @@ -197,14 +203,16 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%T.1b5) { // CHECK:STDOUT: %T.loc19_9.2 => constants.%T.1b5 -// CHECK:STDOUT: %T.patt.loc19_9.2 => constants.%T.patt.6be +// CHECK:STDOUT: %T.patt.loc19_9.2 => constants.%T.patt.cea // CHECK:STDOUT: %T.as_type.loc19_22.2 => constants.%T.as_type.27d +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2b4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%T.fd4) { // CHECK:STDOUT: %T.loc21_17.2 => constants.%T.fd4 -// CHECK:STDOUT: %T.patt.loc21_17.2 => constants.%T.patt.a9c +// CHECK:STDOUT: %T.patt.loc21_17.2 => constants.%T.patt.e5b // CHECK:STDOUT: %T.as_type.loc21_32.2 => constants.%T.as_type.2ad +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.36a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T.fd4) { @@ -218,8 +226,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Eats.facet) { // CHECK:STDOUT: %T.loc19_9.2 => constants.%Eats.facet -// CHECK:STDOUT: %T.patt.loc19_9.2 => constants.%T.patt.6be +// CHECK:STDOUT: %T.patt.loc19_9.2 => constants.%T.patt.cea // CHECK:STDOUT: %T.as_type.loc19_22.2 => constants.%T.as_type.2ad +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.36a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.234 @@ -231,12 +240,15 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -246,6 +258,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -258,12 +271,12 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -271,7 +284,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -284,10 +297,10 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -313,7 +326,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -326,10 +339,10 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -358,6 +371,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -367,6 +382,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -381,6 +398,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -397,6 +416,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_generic_facet_value_value.carbon b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_generic_facet_value_value.carbon index 696f590d6d0c..6bb82061d3ec 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_generic_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_generic_facet_value_value.carbon @@ -46,16 +46,19 @@ fn F() { // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self.fd4: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Food.8b3: type = bind_symbolic_name Food, 0 [symbolic] -// CHECK:STDOUT: %Food.patt.e01: type = symbolic_binding_pattern Food, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Food.patt.250: %pattern_type.98f = symbolic_binding_pattern Food, 0 [symbolic] // CHECK:STDOUT: %Eats.type.ba2: type = generic_interface_type @Eats [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Eats.generic: %Eats.type.ba2 = struct_value () [concrete] // CHECK:STDOUT: %Eats.type.6c0: type = facet_type <@Eats, @Eats(%Food.8b3)> [symbolic] // CHECK:STDOUT: %Self.4eb: %Eats.type.6c0 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.fd4: %Animal.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.a9c: %Animal.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.3b0: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt.e5b: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %U: %Edible.type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: %Edible.type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.939: type = pattern_type %Edible.type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.939 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %T.as_type.2ad: type = facet_access_type %T.fd4 [symbolic] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] // CHECK:STDOUT: %Eats.type.f54c3d.1: type = facet_type <@Eats, @Eats(%U.as_type)> [symbolic] @@ -65,19 +68,24 @@ fn F() { // CHECK:STDOUT: %Goat: type = class_type @Goat [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %Food.9af: %Edible.type = bind_symbolic_name Food, 0 [symbolic] -// CHECK:STDOUT: %Food.patt.0b7: %Edible.type = symbolic_binding_pattern Food, 0 [symbolic] +// CHECK:STDOUT: %Food.patt.bba: %pattern_type.939 = symbolic_binding_pattern Food, 0 [symbolic] // CHECK:STDOUT: %Food.as_type.952: type = facet_access_type %Food.9af [symbolic] // CHECK:STDOUT: %Eats.type.b39: type = facet_type <@Eats, @Eats(%Food.as_type.952)> [symbolic] // CHECK:STDOUT: %T.223: %Eats.type.b39 = bind_symbolic_name T, 1 [symbolic] -// CHECK:STDOUT: %T.patt.f09: %Eats.type.b39 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.ed7: type = pattern_type %Eats.type.b39 [symbolic] +// CHECK:STDOUT: %T.patt.723: %pattern_type.ed7 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %T.as_type.212: type = facet_access_type %T.223 [symbolic] +// CHECK:STDOUT: %pattern_type.1a1: type = pattern_type %T.as_type.212 [symbolic] +// CHECK:STDOUT: %pattern_type.54f: type = pattern_type %Food.as_type.952 [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.fe6: = require_complete_type %T.as_type.212 [symbolic] // CHECK:STDOUT: %require_complete.005: = require_complete_type %Food.as_type.952 [symbolic] // CHECK:STDOUT: %Food.5fe: %Edible.type = bind_symbolic_name Food, 1 [symbolic] -// CHECK:STDOUT: %Food.patt.551: %Edible.type = symbolic_binding_pattern Food, 1 [symbolic] +// CHECK:STDOUT: %Food.patt.b5f: %pattern_type.939 = symbolic_binding_pattern Food, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.36a: type = pattern_type %T.as_type.2ad [symbolic] // CHECK:STDOUT: %Food.as_type.fae: type = facet_access_type %Food.5fe [symbolic] +// CHECK:STDOUT: %pattern_type.f86: type = pattern_type %Food.as_type.fae [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.234: = require_complete_type %T.as_type.2ad [symbolic] @@ -87,7 +95,8 @@ fn F() { // CHECK:STDOUT: %Eats.impl_witness.fabf92.2: = impl_witness file.%Eats.impl_witness_table, @impl.009(%T.fd4, %Food.5fe) [symbolic] // CHECK:STDOUT: %Eats.lookup_impl_witness: = lookup_impl_witness %T.fd4, @Eats, @Eats(%Food.as_type.fae) [symbolic] // CHECK:STDOUT: %Eats.facet.512: %Eats.type.f54c3d.2 = facet_value %T.as_type.2ad, (%Eats.lookup_impl_witness) [symbolic] -// CHECK:STDOUT: %T.patt.1f1: %Eats.type.f54c3d.2 = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.bb9: type = pattern_type %Eats.type.f54c3d.2 [symbolic] +// CHECK:STDOUT: %T.patt.29a: %pattern_type.bb9 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %Feed.specific_fn.ea3: = specific_function %Feed, @Feed(%Food.5fe, %Eats.facet.512) [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -95,13 +104,16 @@ fn F() { // CHECK:STDOUT: %Grass.val: %Grass = struct_value () [concrete] // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] // CHECK:STDOUT: %Edible.facet: %Edible.type = facet_value %Grass, (%Edible.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.ab7: type = pattern_type %Goat [concrete] +// CHECK:STDOUT: %pattern_type.aff: type = pattern_type %Grass [concrete] // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal, @HandleAnimal(%Animal.facet, %Edible.facet) [concrete] // CHECK:STDOUT: %Eats.type.1ae: type = facet_type <@Eats, @Eats(%Grass)> [concrete] // CHECK:STDOUT: %Self.016: %Eats.type.1ae = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %complete_type.004: = complete_type_witness %Eats.type.1ae [concrete] // CHECK:STDOUT: %Eats.impl_witness.1cf: = impl_witness file.%Eats.impl_witness_table, @impl.009(%Animal.facet, %Edible.facet) [concrete] // CHECK:STDOUT: %Eats.facet.cb1: %Eats.type.1ae = facet_value %Goat, (%Eats.impl_witness.1cf) [concrete] -// CHECK:STDOUT: %T.patt.1ac: %Eats.type.1ae = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.d77: type = pattern_type %Eats.type.1ae [concrete] +// CHECK:STDOUT: %T.patt.869: %pattern_type.d77 = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %Feed.specific_fn.86c: = specific_function %Feed, @Feed(%Edible.facet, %Eats.facet.cb1) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -134,13 +146,13 @@ fn F() { // CHECK:STDOUT: %Edible.impl_witness: = impl_witness %Edible.impl_witness_table [concrete = constants.%Edible.impl_witness] // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Eats.decl: %Eats.type.ba2 = interface_decl @Eats [concrete = constants.%Eats.generic] { -// CHECK:STDOUT: %Food.patt.loc20_16.1: type = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc20_16.2 (constants.%Food.patt.e01)] +// CHECK:STDOUT: %Food.patt.loc20_16.1: %pattern_type.98f = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc20_16.2 (constants.%Food.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Food.loc20_16.1: type = bind_symbolic_name Food, 0 [symbolic = %Food.loc20_16.2 (constants.%Food.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.009 [concrete] { -// CHECK:STDOUT: %T.patt.loc25_14.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_14.2 (constants.%T.patt.a9c)] -// CHECK:STDOUT: %U.patt.loc25_26.1: %Edible.type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc25_26.2 (constants.%U.patt)] +// CHECK:STDOUT: %T.patt.loc25_14.1: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_14.2 (constants.%T.patt.e5b)] +// CHECK:STDOUT: %U.patt.loc25_26.1: %pattern_type.939 = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc25_26.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %Animal.type = name_ref T, %T.loc25_14.1 [symbolic = %T.loc25_14.2 (constants.%T.fd4)] // CHECK:STDOUT: %T.as_type.loc25_38.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc25_38.2 (constants.%T.as_type.2ad)] @@ -165,12 +177,12 @@ fn F() { // CHECK:STDOUT: %Animal.impl_witness_table = impl_witness_table (), @impl.27e [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness %Animal.impl_witness_table [concrete = constants.%Animal.impl_witness] // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %Food.patt.loc30_9.1: %Edible.type = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc30_9.2 (constants.%Food.patt.0b7)] -// CHECK:STDOUT: %T.patt.loc30_24.1: @Feed.%Eats.type.loc30_37.2 (%Eats.type.b39) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc30_24.2 (constants.%T.patt.f09)] -// CHECK:STDOUT: %e.patt: @Feed.%T.as_type.loc30_43.2 (%T.as_type.212) = binding_pattern e -// CHECK:STDOUT: %e.param_patt: @Feed.%T.as_type.loc30_43.2 (%T.as_type.212) = value_param_pattern %e.patt, call_param0 -// CHECK:STDOUT: %food.patt: @Feed.%Food.as_type.loc30_37.2 (%Food.as_type.952) = binding_pattern food -// CHECK:STDOUT: %food.param_patt: @Feed.%Food.as_type.loc30_37.2 (%Food.as_type.952) = value_param_pattern %food.patt, call_param1 +// CHECK:STDOUT: %Food.patt.loc30_9.1: %pattern_type.939 = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc30_9.2 (constants.%Food.patt.bba)] +// CHECK:STDOUT: %T.patt.loc30_24.1: @Feed.%pattern_type.loc30_24 (%pattern_type.ed7) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc30_24.2 (constants.%T.patt.723)] +// CHECK:STDOUT: %e.patt: @Feed.%pattern_type.loc30_40 (%pattern_type.1a1) = binding_pattern e +// CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type.loc30_40 (%pattern_type.1a1) = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %food.patt: @Feed.%pattern_type.loc30_46 (%pattern_type.54f) = binding_pattern food +// CHECK:STDOUT: %food.param_patt: @Feed.%pattern_type.loc30_46 (%pattern_type.54f) = value_param_pattern %food.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Edible.ref: type = name_ref Edible, file.%Edible.decl [concrete = constants.%Edible.type] // CHECK:STDOUT: %Food.loc30_9.1: %Edible.type = bind_symbolic_name Food, 0 [symbolic = %Food.loc30_9.2 (constants.%Food.9af)] @@ -198,12 +210,12 @@ fn F() { // CHECK:STDOUT: %food: @Feed.%Food.as_type.loc30_37.2 (%Food.as_type.952) = bind_name food, %food.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt.loc31_17.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_17.2 (constants.%T.patt.a9c)] -// CHECK:STDOUT: %Food.patt.loc31_29.1: %Edible.type = symbolic_binding_pattern Food, 1 [symbolic = %Food.patt.loc31_29.2 (constants.%Food.patt.551)] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%T.as_type.loc31_47.2 (%T.as_type.2ad) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%T.as_type.loc31_47.2 (%T.as_type.2ad) = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %food.patt: @HandleAnimal.%Food.as_type.loc31_56.2 (%Food.as_type.fae) = binding_pattern food -// CHECK:STDOUT: %food.param_patt: @HandleAnimal.%Food.as_type.loc31_56.2 (%Food.as_type.fae) = value_param_pattern %food.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc31_17.1: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_17.2 (constants.%T.patt.e5b)] +// CHECK:STDOUT: %Food.patt.loc31_29.1: %pattern_type.939 = symbolic_binding_pattern Food, 1 [symbolic = %Food.patt.loc31_29.2 (constants.%Food.patt.b5f)] +// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type.loc31_44 (%pattern_type.36a) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type.loc31_44 (%pattern_type.36a) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %food.patt: @HandleAnimal.%pattern_type.loc31_50 (%pattern_type.f86) = binding_pattern food +// CHECK:STDOUT: %food.param_patt: @HandleAnimal.%pattern_type.loc31_50 (%pattern_type.f86) = value_param_pattern %food.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %T.loc31_17.1: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc31_17.2 (constants.%T.fd4)] @@ -249,7 +261,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Eats(%Food.loc20_16.1: type) { // CHECK:STDOUT: %Food.loc20_16.2: type = bind_symbolic_name Food, 0 [symbolic = %Food.loc20_16.2 (constants.%Food.8b3)] -// CHECK:STDOUT: %Food.patt.loc20_16.2: type = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc20_16.2 (constants.%Food.patt.e01)] +// CHECK:STDOUT: %Food.patt.loc20_16.2: %pattern_type.98f = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc20_16.2 (constants.%Food.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Eats.type: type = facet_type <@Eats, @Eats(%Food.loc20_16.2)> [symbolic = %Eats.type (constants.%Eats.type.6c0)] @@ -271,9 +283,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.009(%T.loc25_14.1: %Animal.type, %U.loc25_26.1: %Edible.type) { // CHECK:STDOUT: %T.loc25_14.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc25_14.2 (constants.%T.fd4)] -// CHECK:STDOUT: %T.patt.loc25_14.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_14.2 (constants.%T.patt.a9c)] +// CHECK:STDOUT: %T.patt.loc25_14.2: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_14.2 (constants.%T.patt.e5b)] // CHECK:STDOUT: %U.loc25_26.2: %Edible.type = bind_symbolic_name U, 1 [symbolic = %U.loc25_26.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc25_26.2: %Edible.type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc25_26.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc25_26.2: %pattern_type.939 = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc25_26.2 (constants.%U.patt)] // CHECK:STDOUT: %T.as_type.loc25_38.2: type = facet_access_type %T.loc25_14.2 [symbolic = %T.as_type.loc25_38.2 (constants.%T.as_type.2ad)] // CHECK:STDOUT: %U.as_type.loc25_49.2: type = facet_access_type %U.loc25_26.2 [symbolic = %U.as_type.loc25_49.2 (constants.%U.as_type)] // CHECK:STDOUT: %Eats.type.loc25_49.2: type = facet_type <@Eats, @Eats(%U.as_type.loc25_49.2)> [symbolic = %Eats.type.loc25_49.2 (constants.%Eats.type.f54c3d.1)] @@ -313,12 +325,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%Food.loc30_9.1: %Edible.type, %T.loc30_24.1: @Feed.%Eats.type.loc30_37.2 (%Eats.type.b39)) { // CHECK:STDOUT: %Food.loc30_9.2: %Edible.type = bind_symbolic_name Food, 0 [symbolic = %Food.loc30_9.2 (constants.%Food.9af)] -// CHECK:STDOUT: %Food.patt.loc30_9.2: %Edible.type = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc30_9.2 (constants.%Food.patt.0b7)] +// CHECK:STDOUT: %Food.patt.loc30_9.2: %pattern_type.939 = symbolic_binding_pattern Food, 0 [symbolic = %Food.patt.loc30_9.2 (constants.%Food.patt.bba)] // CHECK:STDOUT: %Food.as_type.loc30_37.2: type = facet_access_type %Food.loc30_9.2 [symbolic = %Food.as_type.loc30_37.2 (constants.%Food.as_type.952)] // CHECK:STDOUT: %Eats.type.loc30_37.2: type = facet_type <@Eats, @Eats(%Food.as_type.loc30_37.2)> [symbolic = %Eats.type.loc30_37.2 (constants.%Eats.type.b39)] // CHECK:STDOUT: %T.loc30_24.2: @Feed.%Eats.type.loc30_37.2 (%Eats.type.b39) = bind_symbolic_name T, 1 [symbolic = %T.loc30_24.2 (constants.%T.223)] -// CHECK:STDOUT: %T.patt.loc30_24.2: @Feed.%Eats.type.loc30_37.2 (%Eats.type.b39) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc30_24.2 (constants.%T.patt.f09)] +// CHECK:STDOUT: %pattern_type.loc30_24: type = pattern_type %Eats.type.loc30_37.2 [symbolic = %pattern_type.loc30_24 (constants.%pattern_type.ed7)] +// CHECK:STDOUT: %T.patt.loc30_24.2: @Feed.%pattern_type.loc30_24 (%pattern_type.ed7) = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc30_24.2 (constants.%T.patt.723)] // CHECK:STDOUT: %T.as_type.loc30_43.2: type = facet_access_type %T.loc30_24.2 [symbolic = %T.as_type.loc30_43.2 (constants.%T.as_type.212)] +// CHECK:STDOUT: %pattern_type.loc30_40: type = pattern_type %T.as_type.loc30_43.2 [symbolic = %pattern_type.loc30_40 (constants.%pattern_type.1a1)] +// CHECK:STDOUT: %pattern_type.loc30_46: type = pattern_type %Food.as_type.loc30_37.2 [symbolic = %pattern_type.loc30_46 (constants.%pattern_type.54f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30_41: = require_complete_type %T.as_type.loc30_43.2 [symbolic = %require_complete.loc30_41 (constants.%require_complete.fe6)] @@ -332,11 +347,13 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc31_17.1: %Animal.type, %Food.loc31_29.1: %Edible.type) { // CHECK:STDOUT: %T.loc31_17.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc31_17.2 (constants.%T.fd4)] -// CHECK:STDOUT: %T.patt.loc31_17.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_17.2 (constants.%T.patt.a9c)] +// CHECK:STDOUT: %T.patt.loc31_17.2: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_17.2 (constants.%T.patt.e5b)] // CHECK:STDOUT: %Food.loc31_29.2: %Edible.type = bind_symbolic_name Food, 1 [symbolic = %Food.loc31_29.2 (constants.%Food.5fe)] -// CHECK:STDOUT: %Food.patt.loc31_29.2: %Edible.type = symbolic_binding_pattern Food, 1 [symbolic = %Food.patt.loc31_29.2 (constants.%Food.patt.551)] +// CHECK:STDOUT: %Food.patt.loc31_29.2: %pattern_type.939 = symbolic_binding_pattern Food, 1 [symbolic = %Food.patt.loc31_29.2 (constants.%Food.patt.b5f)] // CHECK:STDOUT: %T.as_type.loc31_47.2: type = facet_access_type %T.loc31_17.2 [symbolic = %T.as_type.loc31_47.2 (constants.%T.as_type.2ad)] +// CHECK:STDOUT: %pattern_type.loc31_44: type = pattern_type %T.as_type.loc31_47.2 [symbolic = %pattern_type.loc31_44 (constants.%pattern_type.36a)] // CHECK:STDOUT: %Food.as_type.loc31_56.2: type = facet_access_type %Food.loc31_29.2 [symbolic = %Food.as_type.loc31_56.2 (constants.%Food.as_type.fae)] +// CHECK:STDOUT: %pattern_type.loc31_50: type = pattern_type %Food.as_type.loc31_56.2 [symbolic = %pattern_type.loc31_50 (constants.%pattern_type.f86)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc31_45: = require_complete_type %T.as_type.loc31_47.2 [symbolic = %require_complete.loc31_45 (constants.%require_complete.234)] @@ -397,14 +414,14 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%Food.8b3) { // CHECK:STDOUT: %Food.loc20_16.2 => constants.%Food.8b3 -// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.e01 +// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(%Food.loc20_16.2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%U.as_type) { // CHECK:STDOUT: %Food.loc20_16.2 => constants.%U.as_type -// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.e01 +// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Eats.type => constants.%Eats.type.f54c3d.1 @@ -413,7 +430,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.009(constants.%T.fd4, constants.%U) { // CHECK:STDOUT: %T.loc25_14.2 => constants.%T.fd4 -// CHECK:STDOUT: %T.patt.loc25_14.2 => constants.%T.patt.a9c +// CHECK:STDOUT: %T.patt.loc25_14.2 => constants.%T.patt.e5b // CHECK:STDOUT: %U.loc25_26.2 => constants.%U // CHECK:STDOUT: %U.patt.loc25_26.2 => constants.%U.patt // CHECK:STDOUT: %T.as_type.loc25_38.2 => constants.%T.as_type.2ad @@ -429,38 +446,43 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%Food.as_type.952) { // CHECK:STDOUT: %Food.loc20_16.2 => constants.%Food.as_type.952 -// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.e01 +// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Food.9af, constants.%T.223) { // CHECK:STDOUT: %Food.loc30_9.2 => constants.%Food.9af -// CHECK:STDOUT: %Food.patt.loc30_9.2 => constants.%Food.patt.0b7 +// CHECK:STDOUT: %Food.patt.loc30_9.2 => constants.%Food.patt.bba // CHECK:STDOUT: %Food.as_type.loc30_37.2 => constants.%Food.as_type.952 // CHECK:STDOUT: %Eats.type.loc30_37.2 => constants.%Eats.type.b39 // CHECK:STDOUT: %T.loc30_24.2 => constants.%T.223 -// CHECK:STDOUT: %T.patt.loc30_24.2 => constants.%T.patt.f09 +// CHECK:STDOUT: %pattern_type.loc30_24 => constants.%pattern_type.ed7 +// CHECK:STDOUT: %T.patt.loc30_24.2 => constants.%T.patt.723 // CHECK:STDOUT: %T.as_type.loc30_43.2 => constants.%T.as_type.212 +// CHECK:STDOUT: %pattern_type.loc30_40 => constants.%pattern_type.1a1 +// CHECK:STDOUT: %pattern_type.loc30_46 => constants.%pattern_type.54f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(@Feed.%Food.as_type.loc30_37.2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%T.fd4, constants.%Food.5fe) { // CHECK:STDOUT: %T.loc31_17.2 => constants.%T.fd4 -// CHECK:STDOUT: %T.patt.loc31_17.2 => constants.%T.patt.a9c +// CHECK:STDOUT: %T.patt.loc31_17.2 => constants.%T.patt.e5b // CHECK:STDOUT: %Food.loc31_29.2 => constants.%Food.5fe -// CHECK:STDOUT: %Food.patt.loc31_29.2 => constants.%Food.patt.551 +// CHECK:STDOUT: %Food.patt.loc31_29.2 => constants.%Food.patt.b5f // CHECK:STDOUT: %T.as_type.loc31_47.2 => constants.%T.as_type.2ad +// CHECK:STDOUT: %pattern_type.loc31_44 => constants.%pattern_type.36a // CHECK:STDOUT: %Food.as_type.loc31_56.2 => constants.%Food.as_type.fae +// CHECK:STDOUT: %pattern_type.loc31_50 => constants.%pattern_type.f86 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%Food.as_type.fae) { // CHECK:STDOUT: %Food.loc20_16.2 => constants.%Food.as_type.fae -// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.e01 +// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.009(constants.%T.fd4, constants.%Food.5fe) { // CHECK:STDOUT: %T.loc25_14.2 => constants.%T.fd4 -// CHECK:STDOUT: %T.patt.loc25_14.2 => constants.%T.patt.a9c +// CHECK:STDOUT: %T.patt.loc25_14.2 => constants.%T.patt.e5b // CHECK:STDOUT: %U.loc25_26.2 => constants.%Food.5fe // CHECK:STDOUT: %U.patt.loc25_26.2 => constants.%U.patt // CHECK:STDOUT: %T.as_type.loc25_38.2 => constants.%T.as_type.2ad @@ -474,12 +496,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Food.5fe, constants.%Eats.facet.512) { // CHECK:STDOUT: %Food.loc30_9.2 => constants.%Food.5fe -// CHECK:STDOUT: %Food.patt.loc30_9.2 => constants.%Food.patt.0b7 +// CHECK:STDOUT: %Food.patt.loc30_9.2 => constants.%Food.patt.bba // CHECK:STDOUT: %Food.as_type.loc30_37.2 => constants.%Food.as_type.fae // CHECK:STDOUT: %Eats.type.loc30_37.2 => constants.%Eats.type.f54c3d.2 // CHECK:STDOUT: %T.loc30_24.2 => constants.%Eats.facet.512 -// CHECK:STDOUT: %T.patt.loc30_24.2 => constants.%T.patt.1f1 +// CHECK:STDOUT: %pattern_type.loc30_24 => constants.%pattern_type.bb9 +// CHECK:STDOUT: %T.patt.loc30_24.2 => constants.%T.patt.29a // CHECK:STDOUT: %T.as_type.loc30_43.2 => constants.%T.as_type.2ad +// CHECK:STDOUT: %pattern_type.loc30_40 => constants.%pattern_type.36a +// CHECK:STDOUT: %pattern_type.loc30_46 => constants.%pattern_type.f86 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30_41 => constants.%require_complete.234 @@ -492,11 +517,13 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%Animal.facet, constants.%Edible.facet) { // CHECK:STDOUT: %T.loc31_17.2 => constants.%Animal.facet -// CHECK:STDOUT: %T.patt.loc31_17.2 => constants.%T.patt.a9c +// CHECK:STDOUT: %T.patt.loc31_17.2 => constants.%T.patt.e5b // CHECK:STDOUT: %Food.loc31_29.2 => constants.%Edible.facet -// CHECK:STDOUT: %Food.patt.loc31_29.2 => constants.%Food.patt.551 +// CHECK:STDOUT: %Food.patt.loc31_29.2 => constants.%Food.patt.b5f // CHECK:STDOUT: %T.as_type.loc31_47.2 => constants.%Goat +// CHECK:STDOUT: %pattern_type.loc31_44 => constants.%pattern_type.ab7 // CHECK:STDOUT: %Food.as_type.loc31_56.2 => constants.%Grass +// CHECK:STDOUT: %pattern_type.loc31_50 => constants.%pattern_type.aff // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc31_45 => constants.%complete_type.357 @@ -509,7 +536,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Eats(constants.%Grass) { // CHECK:STDOUT: %Food.loc20_16.2 => constants.%Grass -// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.e01 +// CHECK:STDOUT: %Food.patt.loc20_16.2 => constants.%Food.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Eats.type => constants.%Eats.type.1ae @@ -518,7 +545,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.009(constants.%Animal.facet, constants.%Edible.facet) { // CHECK:STDOUT: %T.loc25_14.2 => constants.%Animal.facet -// CHECK:STDOUT: %T.patt.loc25_14.2 => constants.%T.patt.a9c +// CHECK:STDOUT: %T.patt.loc25_14.2 => constants.%T.patt.e5b // CHECK:STDOUT: %U.loc25_26.2 => constants.%Edible.facet // CHECK:STDOUT: %U.patt.loc25_26.2 => constants.%U.patt // CHECK:STDOUT: %T.as_type.loc25_38.2 => constants.%Goat @@ -532,12 +559,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%Edible.facet, constants.%Eats.facet.cb1) { // CHECK:STDOUT: %Food.loc30_9.2 => constants.%Edible.facet -// CHECK:STDOUT: %Food.patt.loc30_9.2 => constants.%Food.patt.0b7 +// CHECK:STDOUT: %Food.patt.loc30_9.2 => constants.%Food.patt.bba // CHECK:STDOUT: %Food.as_type.loc30_37.2 => constants.%Grass // CHECK:STDOUT: %Eats.type.loc30_37.2 => constants.%Eats.type.1ae // CHECK:STDOUT: %T.loc30_24.2 => constants.%Eats.facet.cb1 -// CHECK:STDOUT: %T.patt.loc30_24.2 => constants.%T.patt.1ac +// CHECK:STDOUT: %pattern_type.loc30_24 => constants.%pattern_type.d77 +// CHECK:STDOUT: %T.patt.loc30_24.2 => constants.%T.patt.869 // CHECK:STDOUT: %T.as_type.loc30_43.2 => constants.%Goat +// CHECK:STDOUT: %pattern_type.loc30_40 => constants.%pattern_type.ab7 +// CHECK:STDOUT: %pattern_type.loc30_46 => constants.%pattern_type.aff // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30_41 => constants.%complete_type.357 @@ -548,12 +578,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -563,6 +596,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -575,12 +609,12 @@ fn F() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -588,7 +622,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -601,10 +635,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -630,7 +664,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -643,10 +677,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -675,6 +709,8 @@ fn F() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -684,6 +720,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -698,6 +736,8 @@ fn F() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -714,6 +754,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_itself.carbon b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_itself.carbon index bdcbc9f099db..0520b4093cc1 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_itself.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_facet_value_value_to_itself.carbon @@ -30,8 +30,10 @@ fn F() { // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: %Animal.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Animal.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.3b0: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.36a: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %FeedAnimal.type: type = fn_type @FeedAnimal [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %FeedAnimal: %FeedAnimal.type = struct_value () [concrete] @@ -47,6 +49,7 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Goat.val: %Goat = struct_value () [concrete] // CHECK:STDOUT: %Animal.facet: %Animal.type = facet_value %Goat, (%Animal.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.ab7: type = pattern_type %Goat [concrete] // CHECK:STDOUT: %HandleAnimal.specific_fn: = specific_function %HandleAnimal, @HandleAnimal(%Animal.facet) [concrete] // CHECK:STDOUT: %FeedAnimal.specific_fn.82e: = specific_function %FeedAnimal, @FeedAnimal(%Animal.facet) [concrete] // CHECK:STDOUT: } @@ -69,9 +72,9 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %FeedAnimal.decl: %FeedAnimal.type = fn_decl @FeedAnimal [concrete = constants.%FeedAnimal] { -// CHECK:STDOUT: %T.patt.loc16_15.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %a.patt: @FeedAnimal.%T.as_type.loc16_30.2 (%T.as_type) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @FeedAnimal.%T.as_type.loc16_30.2 (%T.as_type) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc16_15.1: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.patt: @FeedAnimal.%pattern_type (%pattern_type.36a) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @FeedAnimal.%pattern_type (%pattern_type.36a) = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %T.loc16_15.1: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_15.2 (constants.%T)] @@ -84,9 +87,9 @@ fn F() { // CHECK:STDOUT: %a: @FeedAnimal.%T.as_type.loc16_30.2 (%T.as_type) = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt.loc18_17.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_17.2 (constants.%T.patt)] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%T.as_type.loc18_32.2 (%T.as_type) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%T.as_type.loc18_32.2 (%T.as_type) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc18_17.1: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type (%pattern_type.36a) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type (%pattern_type.36a) = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %T.loc18_17.1: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc18_17.2 (constants.%T)] @@ -132,8 +135,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedAnimal(%T.loc16_15.1: %Animal.type) { // CHECK:STDOUT: %T.loc16_15.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc16_15.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_15.2: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_15.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc16_30.2: type = facet_access_type %T.loc16_15.2 [symbolic = %T.as_type.loc16_30.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc16_30.2 [symbolic = %pattern_type (constants.%pattern_type.36a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc16_30.2 [symbolic = %require_complete (constants.%require_complete)] @@ -146,8 +150,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc18_17.1: %Animal.type) { // CHECK:STDOUT: %T.loc18_17.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc18_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc18_17.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc18_17.2: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_17.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc18_32.2: type = facet_access_type %T.loc18_17.2 [symbolic = %T.as_type.loc18_32.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc18_32.2 [symbolic = %pattern_type (constants.%pattern_type.36a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc18_32.2 [symbolic = %require_complete (constants.%require_complete)] @@ -188,6 +193,7 @@ fn F() { // CHECK:STDOUT: %T.loc16_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc16_15.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc16_30.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.36a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -197,6 +203,7 @@ fn F() { // CHECK:STDOUT: %T.loc18_17.2 => constants.%T // CHECK:STDOUT: %T.patt.loc18_17.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc18_32.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.36a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @FeedAnimal(@HandleAnimal.%T.loc18_17.2) {} @@ -205,6 +212,7 @@ fn F() { // CHECK:STDOUT: %T.loc18_17.2 => constants.%Animal.facet // CHECK:STDOUT: %T.patt.loc18_17.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc18_32.2 => constants.%Goat +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ab7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -215,6 +223,7 @@ fn F() { // CHECK:STDOUT: %T.loc16_15.2 => constants.%Animal.facet // CHECK:STDOUT: %T.patt.loc16_15.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc16_30.2 => constants.%Goat +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ab7 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -224,12 +233,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -239,6 +251,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -251,12 +264,12 @@ fn F() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -264,7 +277,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -277,10 +290,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -306,7 +319,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -319,10 +332,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -351,6 +364,8 @@ fn F() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -360,6 +375,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -374,6 +391,8 @@ fn F() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -390,6 +409,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/convert_interface.carbon b/toolchain/check/testdata/facet/min_prelude/convert_interface.carbon index cf55a142d0f9..80b3deb0d053 100644 --- a/toolchain/check/testdata/facet/min_prelude/convert_interface.carbon +++ b/toolchain/check/testdata/facet/min_prelude/convert_interface.carbon @@ -29,6 +29,7 @@ fn G() { F(Animal); } // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self.fd4: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness file.%Eats.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Eats.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -61,8 +62,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: %Eats.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %Eats.impl_witness: = impl_witness %Eats.impl_witness_table [concrete = constants.%Eats.impl_witness] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %e.patt: %Eats.type = binding_pattern e -// CHECK:STDOUT: %e.param_patt: %Eats.type = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %e.patt: %pattern_type = binding_pattern e +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %Eats.type = value_param call_param0 // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] @@ -111,12 +112,15 @@ fn G() { F(Animal); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -126,6 +130,7 @@ fn G() { F(Animal); } // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -138,12 +143,12 @@ fn G() { F(Animal); } // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -151,7 +156,7 @@ fn G() { F(Animal); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -164,10 +169,10 @@ fn G() { F(Animal); } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -193,7 +198,7 @@ fn G() { F(Animal); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -206,10 +211,10 @@ fn G() { F(Animal); } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -238,6 +243,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -247,6 +254,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -261,6 +270,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -277,6 +288,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/fail_convert_class_type_to_generic_facet_value.carbon b/toolchain/check/testdata/facet/min_prelude/fail_convert_class_type_to_generic_facet_value.carbon index 07788d81be51..8da9815c8c9b 100644 --- a/toolchain/check/testdata/facet/min_prelude/fail_convert_class_type_to_generic_facet_value.carbon +++ b/toolchain/check/testdata/facet/min_prelude/fail_convert_class_type_to_generic_facet_value.carbon @@ -40,7 +40,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Scalar: type = bind_symbolic_name Scalar, 0 [symbolic] -// CHECK:STDOUT: %Scalar.patt: type = symbolic_binding_pattern Scalar, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.c21: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type.c21 = struct_value () [concrete] @@ -66,16 +67,18 @@ fn G() { // CHECK:STDOUT: %F.a56: %F.type.17b = struct_value () [concrete] // CHECK:STDOUT: %Generic.facet: %Generic.type.769 = facet_value %ImplsGeneric, (%Generic.impl_witness) [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.91ccba.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %U: %Generic.type.91ccba.2 = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt.9a6: %Generic.type.91ccba.2 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.80f: type = pattern_type %Generic.type.91ccba.2 [symbolic] +// CHECK:STDOUT: %U.patt.5df: %pattern_type.80f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.c3b: type = facet_type <@Generic, @Generic(%WrongGenericParam)> [concrete] -// CHECK:STDOUT: %U.patt.19b: %Generic.type.c3b = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7ae: type = pattern_type %Generic.type.c3b [concrete] +// CHECK:STDOUT: %U.patt.9ef: %pattern_type.7ae = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -96,7 +99,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.c21 = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt.loc14_19.1: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc14_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc14_19.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc14_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Scalar.loc14_19.1: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc14_19.2 (constants.%Scalar)] // CHECK:STDOUT: } @@ -112,8 +115,8 @@ fn G() { // CHECK:STDOUT: %Generic.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %Generic.impl_witness: = impl_witness %Generic.impl_witness_table [concrete = constants.%Generic.impl_witness] // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt.loc26_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_22.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc26_32.1: @CallGenericMethod.%Generic.type.loc26_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc26_32.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %T.patt.loc26_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc26_32.1: @CallGenericMethod.%pattern_type (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc26_32.2 (constants.%U.patt.5df)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc26_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc26_22.2 (constants.%T)] // CHECK:STDOUT: %.loc26: type = splice_block %Generic.type.loc26_45.1 [symbolic = %Generic.type.loc26_45.2 (constants.%Generic.type.91ccba.2)] { @@ -128,7 +131,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc14_19.1: type) { // CHECK:STDOUT: %Scalar.loc14_19.2: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc14_19.2 (constants.%Scalar)] -// CHECK:STDOUT: %Scalar.patt.loc14_19.2: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc14_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc14_19.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc14_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%Scalar.loc14_19.2)> [symbolic = %Generic.type (constants.%Generic.type.91ccba.1)] @@ -196,10 +199,11 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc26_22.1: type, %U.loc26_32.1: @CallGenericMethod.%Generic.type.loc26_45.2 (%Generic.type.91ccba.2)) { // CHECK:STDOUT: %T.loc26_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc26_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc26_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc26_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_22.2 (constants.%T.patt)] // CHECK:STDOUT: %Generic.type.loc26_45.2: type = facet_type <@Generic, @Generic(%T.loc26_22.2)> [symbolic = %Generic.type.loc26_45.2 (constants.%Generic.type.91ccba.2)] // CHECK:STDOUT: %U.loc26_32.2: @CallGenericMethod.%Generic.type.loc26_45.2 (%Generic.type.91ccba.2) = bind_symbolic_name U, 1 [symbolic = %U.loc26_32.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc26_32.2: @CallGenericMethod.%Generic.type.loc26_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc26_32.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc26_45.2 [symbolic = %pattern_type (constants.%pattern_type.80f)] +// CHECK:STDOUT: %U.patt.loc26_32.2: @CallGenericMethod.%pattern_type (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc26_32.2 (constants.%U.patt.5df)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -253,7 +257,8 @@ fn G() { // CHECK:STDOUT: %T.patt.loc26_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc26_45.2 => constants.%Generic.type.91ccba.2 // CHECK:STDOUT: %U.loc26_32.2 => constants.%U -// CHECK:STDOUT: %U.patt.loc26_32.2 => constants.%U.patt.9a6 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.80f +// CHECK:STDOUT: %U.patt.loc26_32.2 => constants.%U.patt.5df // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(@CallGenericMethod.%T.loc26_22.2) {} @@ -268,19 +273,23 @@ fn G() { // CHECK:STDOUT: %T.patt.loc26_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc26_45.2 => constants.%Generic.type.c3b // CHECK:STDOUT: %U.loc26_32.2 => -// CHECK:STDOUT: %U.patt.loc26_32.2 => constants.%U.patt.19b +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ae +// CHECK:STDOUT: %U.patt.loc26_32.2 => constants.%U.patt.9ef // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- include_files/convert.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -290,6 +299,7 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -302,12 +312,12 @@ fn G() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -315,7 +325,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -328,10 +338,10 @@ fn G() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -357,7 +367,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -370,10 +380,10 @@ fn G() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -402,6 +412,8 @@ fn G() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -411,6 +423,8 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -425,6 +439,8 @@ fn G() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -441,6 +457,8 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/fail_convert_facet_value_to_missing_impl.carbon b/toolchain/check/testdata/facet/min_prelude/fail_convert_facet_value_to_missing_impl.carbon index ee7fd8a9dad3..ed118b045670 100644 --- a/toolchain/check/testdata/facet/min_prelude/fail_convert_facet_value_to_missing_impl.carbon +++ b/toolchain/check/testdata/facet/min_prelude/fail_convert_facet_value_to_missing_impl.carbon @@ -33,14 +33,18 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %Animal.type: type = facet_type <@Animal> [concrete] // CHECK:STDOUT: %Self.fd4: %Animal.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T.1b5: %Eats.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.6be: %Eats.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.a05: type = pattern_type %Eats.type [concrete] +// CHECK:STDOUT: %T.patt.cea: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.27d: type = facet_access_type %T.1b5 [symbolic] +// CHECK:STDOUT: %pattern_type.2b4: type = pattern_type %T.as_type.27d [symbolic] // CHECK:STDOUT: %Feed.type: type = fn_type @Feed [concrete] // CHECK:STDOUT: %Feed: %Feed.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.c75: = require_complete_type %T.as_type.27d [symbolic] // CHECK:STDOUT: %T.fd4: %Animal.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.a9c: %Animal.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.3b0: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %T.patt.e5b: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.2ad: type = facet_access_type %T.fd4 [symbolic] +// CHECK:STDOUT: %pattern_type.36a: type = pattern_type %T.as_type.2ad [symbolic] // CHECK:STDOUT: %HandleAnimal.type: type = fn_type @HandleAnimal [concrete] // CHECK:STDOUT: %HandleAnimal: %HandleAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.234: = require_complete_type %T.as_type.2ad [symbolic] @@ -64,9 +68,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %Eats.decl: type = interface_decl @Eats [concrete = constants.%Eats.type] {} {} // CHECK:STDOUT: %Animal.decl: type = interface_decl @Animal [concrete = constants.%Animal.type] {} {} // CHECK:STDOUT: %Feed.decl: %Feed.type = fn_decl @Feed [concrete = constants.%Feed] { -// CHECK:STDOUT: %T.patt.loc17_9.1: %Eats.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_9.2 (constants.%T.patt.6be)] -// CHECK:STDOUT: %e.patt: @Feed.%T.as_type.loc17_22.2 (%T.as_type.27d) = binding_pattern e -// CHECK:STDOUT: %e.param_patt: @Feed.%T.as_type.loc17_22.2 (%T.as_type.27d) = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc17_9.1: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_9.2 (constants.%T.patt.cea)] +// CHECK:STDOUT: %e.patt: @Feed.%pattern_type (%pattern_type.2b4) = binding_pattern e +// CHECK:STDOUT: %e.param_patt: @Feed.%pattern_type (%pattern_type.2b4) = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Eats.ref: type = name_ref Eats, file.%Eats.decl [concrete = constants.%Eats.type] // CHECK:STDOUT: %T.loc17_9.1: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc17_9.2 (constants.%T.1b5)] @@ -79,9 +83,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %e: @Feed.%T.as_type.loc17_22.2 (%T.as_type.27d) = bind_name e, %e.param // CHECK:STDOUT: } // CHECK:STDOUT: %HandleAnimal.decl: %HandleAnimal.type = fn_decl @HandleAnimal [concrete = constants.%HandleAnimal] { -// CHECK:STDOUT: %T.patt.loc26_17.1: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_17.2 (constants.%T.patt.a9c)] -// CHECK:STDOUT: %a.patt: @HandleAnimal.%T.as_type.loc26_32.2 (%T.as_type.2ad) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%T.as_type.loc26_32.2 (%T.as_type.2ad) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc26_17.1: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_17.2 (constants.%T.patt.e5b)] +// CHECK:STDOUT: %a.patt: @HandleAnimal.%pattern_type (%pattern_type.36a) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @HandleAnimal.%pattern_type (%pattern_type.36a) = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %T.loc26_17.1: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc26_17.2 (constants.%T.fd4)] @@ -113,8 +117,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc17_9.1: %Eats.type) { // CHECK:STDOUT: %T.loc17_9.2: %Eats.type = bind_symbolic_name T, 0 [symbolic = %T.loc17_9.2 (constants.%T.1b5)] -// CHECK:STDOUT: %T.patt.loc17_9.2: %Eats.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_9.2 (constants.%T.patt.6be)] +// CHECK:STDOUT: %T.patt.loc17_9.2: %pattern_type.a05 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_9.2 (constants.%T.patt.cea)] // CHECK:STDOUT: %T.as_type.loc17_22.2: type = facet_access_type %T.loc17_9.2 [symbolic = %T.as_type.loc17_22.2 (constants.%T.as_type.27d)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc17_22.2 [symbolic = %pattern_type (constants.%pattern_type.2b4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc17_22.2 [symbolic = %require_complete (constants.%require_complete.c75)] @@ -127,8 +132,9 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @HandleAnimal(%T.loc26_17.1: %Animal.type) { // CHECK:STDOUT: %T.loc26_17.2: %Animal.type = bind_symbolic_name T, 0 [symbolic = %T.loc26_17.2 (constants.%T.fd4)] -// CHECK:STDOUT: %T.patt.loc26_17.2: %Animal.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_17.2 (constants.%T.patt.a9c)] +// CHECK:STDOUT: %T.patt.loc26_17.2: %pattern_type.3b0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_17.2 (constants.%T.patt.e5b)] // CHECK:STDOUT: %T.as_type.loc26_32.2: type = facet_access_type %T.loc26_17.2 [symbolic = %T.as_type.loc26_32.2 (constants.%T.as_type.2ad)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc26_32.2 [symbolic = %pattern_type (constants.%pattern_type.36a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc26_32.2 [symbolic = %require_complete (constants.%require_complete.234)] @@ -143,26 +149,31 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: specific @Feed(constants.%T.1b5) { // CHECK:STDOUT: %T.loc17_9.2 => constants.%T.1b5 -// CHECK:STDOUT: %T.patt.loc17_9.2 => constants.%T.patt.6be +// CHECK:STDOUT: %T.patt.loc17_9.2 => constants.%T.patt.cea // CHECK:STDOUT: %T.as_type.loc17_22.2 => constants.%T.as_type.27d +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2b4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HandleAnimal(constants.%T.fd4) { // CHECK:STDOUT: %T.loc26_17.2 => constants.%T.fd4 -// CHECK:STDOUT: %T.patt.loc26_17.2 => constants.%T.patt.a9c +// CHECK:STDOUT: %T.patt.loc26_17.2 => constants.%T.patt.e5b // CHECK:STDOUT: %T.as_type.loc26_32.2 => constants.%T.as_type.2ad +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.36a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- include_files/convert.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -172,6 +183,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -184,12 +196,12 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -197,7 +209,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -210,10 +222,10 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -239,7 +251,7 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -252,10 +264,10 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -284,6 +296,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -293,6 +307,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -307,6 +323,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -323,6 +341,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/fail_convert_type_erased_type_to_facet.carbon b/toolchain/check/testdata/facet/min_prelude/fail_convert_type_erased_type_to_facet.carbon index d8f5085826ee..26bc7d793b5a 100644 --- a/toolchain/check/testdata/facet/min_prelude/fail_convert_type_erased_type_to_facet.carbon +++ b/toolchain/check/testdata/facet/min_prelude/fail_convert_type_erased_type_to_facet.carbon @@ -40,13 +40,15 @@ fn F() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness file.%Animal.impl_witness_table [concrete] // CHECK:STDOUT: %a: %Animal.type = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %Animal.type = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.3b0: type = pattern_type %Animal.type [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.3b0 = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %WalkAnimal.type: type = fn_type @WalkAnimal [concrete] // CHECK:STDOUT: %WalkAnimal: %WalkAnimal.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %x: type = bind_symbolic_name x, 0 [symbolic] -// CHECK:STDOUT: %x.patt: type = symbolic_binding_pattern x, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.98f = symbolic_binding_pattern x, 0 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -73,7 +75,7 @@ fn F() { // CHECK:STDOUT: %Animal.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %Animal.impl_witness: = impl_witness %Animal.impl_witness_table [concrete = constants.%Animal.impl_witness] // CHECK:STDOUT: %WalkAnimal.decl: %WalkAnimal.type = fn_decl @WalkAnimal [concrete = constants.%WalkAnimal] { -// CHECK:STDOUT: %a.patt.loc19_15.1: %Animal.type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc19_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc19_15.1: %pattern_type.3b0 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc19_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Animal.ref: type = name_ref Animal, file.%Animal.decl [concrete = constants.%Animal.type] // CHECK:STDOUT: %a.loc19_15.1: %Animal.type = bind_symbolic_name a, 0 [symbolic = %a.loc19_15.2 (constants.%a)] @@ -105,7 +107,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WalkAnimal(%a.loc19_15.1: %Animal.type) { // CHECK:STDOUT: %a.loc19_15.2: %Animal.type = bind_symbolic_name a, 0 [symbolic = %a.loc19_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc19_15.2: %Animal.type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc19_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc19_15.2: %pattern_type.3b0 = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc19_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -118,7 +120,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: type = symbolic_binding_pattern x, 0 [symbolic = constants.%x.patt] +// CHECK:STDOUT: %x.patt: %pattern_type.98f = symbolic_binding_pattern x, 0 [symbolic = constants.%x.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Goat.ref: type = name_ref Goat, file.%Goat.decl [concrete = constants.%Goat] // CHECK:STDOUT: %x: type = bind_symbolic_name x, 0, %Goat.ref [symbolic = constants.%x] @@ -136,12 +138,15 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -151,6 +156,7 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -163,12 +169,12 @@ fn F() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -176,7 +182,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -189,10 +195,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -218,7 +224,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -231,10 +237,10 @@ fn F() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -263,6 +269,8 @@ fn F() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -272,6 +280,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -286,6 +296,8 @@ fn F() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -302,6 +314,8 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/fail_deduction_uses_runtime_type_conversion.carbon b/toolchain/check/testdata/facet/min_prelude/fail_deduction_uses_runtime_type_conversion.carbon index c6d53f970666..d49dcc592518 100644 --- a/toolchain/check/testdata/facet/min_prelude/fail_deduction_uses_runtime_type_conversion.carbon +++ b/toolchain/check/testdata/facet/min_prelude/fail_deduction_uses_runtime_type_conversion.carbon @@ -45,7 +45,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %tuple.type: type = tuple_type (type) [concrete] // CHECK:STDOUT: %T: %tuple.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %tuple.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.f1e: type = pattern_type %tuple.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HoldsType.type: type = generic_class_type @HoldsType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HoldsType.generic: %HoldsType.type = struct_value () [concrete] @@ -59,10 +60,13 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.580: type = facet_type <@ImplicitAs, @ImplicitAs(%RuntimeConvertTo)> [concrete] @@ -72,6 +76,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %ImplicitAs.assoc_type.e1d: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%RuntimeConvertTo) [concrete] // CHECK:STDOUT: %assoc0.c91: %ImplicitAs.assoc_type.e1d = assoc_entity element0, imports.%Core.import_ref.1c7 [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness file.%ImplicitAs.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.f64: type = pattern_type %RuntimeConvertFrom [concrete] +// CHECK:STDOUT: %pattern_type.109: type = pattern_type %RuntimeConvertTo [concrete] // CHECK:STDOUT: %Convert.type.e8b: type = fn_type @Convert.2 [concrete] // CHECK:STDOUT: %Convert.e81: %Convert.type.e8b = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.580 = facet_value %RuntimeConvertFrom, (%ImplicitAs.impl_witness) [concrete] @@ -79,21 +85,24 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.elem0: type = tuple_access %T, element0 [symbolic] // CHECK:STDOUT: %A: %tuple.elem0 = bind_symbolic_name A, 1 [symbolic] -// CHECK:STDOUT: %A.patt.f80: %tuple.elem0 = symbolic_binding_pattern A, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.08e: type = pattern_type %tuple.elem0 [symbolic] +// CHECK:STDOUT: %A.patt.cc0: %pattern_type.08e = symbolic_binding_pattern A, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.ec6: type = pattern_type %HoldsType.cc9 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %HoldsType.cc9 [symbolic] // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%RuntimeConvertTo) [concrete] // CHECK:STDOUT: %HoldsType.066: type = class_type @HoldsType, @HoldsType(%tuple) [concrete] +// CHECK:STDOUT: %pattern_type.a13: type = pattern_type %HoldsType.066 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %from: %RuntimeConvertFrom = bind_symbolic_name from, 0 [symbolic] -// CHECK:STDOUT: %from.patt: %RuntimeConvertFrom = symbolic_binding_pattern from, 0 [symbolic] +// CHECK:STDOUT: %from.patt: %pattern_type.f64 = symbolic_binding_pattern from, 0 [symbolic] // CHECK:STDOUT: %RuntimeConvertFrom.val: %RuntimeConvertFrom = struct_value () [concrete] // CHECK:STDOUT: %assoc0.dc0: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.207 [symbolic] // CHECK:STDOUT: %.f4e: type = fn_type_with_self_type %Convert.type.50a, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %from, %Convert.e81 [symbolic] -// CHECK:STDOUT: %A.patt.78b: %RuntimeConvertTo = symbolic_binding_pattern A, 1 [symbolic] +// CHECK:STDOUT: %A.patt.569: %pattern_type.109 = symbolic_binding_pattern A, 1 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -103,11 +112,11 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc12_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//prelude, inst67 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//prelude, inst72 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//prelude, loc14_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//prelude, Convert, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//prelude, loc12_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//prelude, inst67 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//prelude, inst72 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//prelude, loc14_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -122,7 +131,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HoldsType.decl: %HoldsType.type = class_decl @HoldsType [concrete = constants.%HoldsType.generic] { -// CHECK:STDOUT: %T.patt.loc16_17.1: %tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_17.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_17.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_28.1: type = splice_block %.loc16_28.3 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.loc16_28.2: %tuple.type = tuple_literal (type) @@ -142,10 +151,10 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %ImplicitAs.impl_witness_table = impl_witness_table (@impl.%Convert.decl), @impl [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness %ImplicitAs.impl_witness_table [concrete = constants.%ImplicitAs.impl_witness] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc26_6.1: %tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %A.patt.loc26_20.1: @F.%tuple.elem0.loc26_25.2 (%tuple.elem0) = symbolic_binding_pattern A, 1 [symbolic = %A.patt.loc26_20.2 (constants.%A.patt.f80)] -// CHECK:STDOUT: %x.patt: @F.%HoldsType.loc26_43.2 (%HoldsType.cc9) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%HoldsType.loc26_43.2 (%HoldsType.cc9) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc26_6.1: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %A.patt.loc26_20.1: @F.%pattern_type.loc26_20 (%pattern_type.08e) = symbolic_binding_pattern A, 1 [symbolic = %A.patt.loc26_20.2 (constants.%A.patt.cc0)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type.loc26_29 (%pattern_type.ec6) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type.loc26_29 (%pattern_type.ec6) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc26_17.1: type = splice_block %.loc26_17.3 [concrete = constants.%tuple.type] { // CHECK:STDOUT: %.loc26_17.2: %tuple.type = tuple_literal (type) @@ -167,8 +176,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %x: @F.%HoldsType.loc26_43.2 (%HoldsType.cc9) = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %holds_to.patt: %HoldsType.066 = binding_pattern holds_to -// CHECK:STDOUT: %holds_to.param_patt: %HoldsType.066 = value_param_pattern %holds_to.patt, call_param0 +// CHECK:STDOUT: %holds_to.patt: %pattern_type.a13 = binding_pattern holds_to +// CHECK:STDOUT: %holds_to.param_patt: %pattern_type.a13 = value_param_pattern %holds_to.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %holds_to.param: %HoldsType.066 = value_param call_param0 // CHECK:STDOUT: %.loc28_46.1: type = splice_block %HoldsType [concrete = constants.%HoldsType.066] { @@ -185,7 +194,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/convert.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -205,10 +214,10 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %RuntimeConvertFrom.ref as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.e8b = fn_decl @Convert.2 [concrete = constants.%Convert.e81] { -// CHECK:STDOUT: %self.patt: %RuntimeConvertFrom = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %RuntimeConvertFrom = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %RuntimeConvertTo = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %RuntimeConvertTo = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.f64 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.f64 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.109 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.109 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %RuntimeConvertTo.ref: type = name_ref RuntimeConvertTo, file.%RuntimeConvertTo.decl [concrete = constants.%RuntimeConvertTo] // CHECK:STDOUT: %self.param: %RuntimeConvertFrom = value_param call_param0 @@ -226,7 +235,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc16_17.1: %tuple.type) { // CHECK:STDOUT: %T.loc16_17.2: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc16_17.2: %tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_17.2: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_17.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -263,6 +272,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.1.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -277,11 +288,13 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc26_6.1: %tuple.type, %A.loc26_20.1: @F.%tuple.elem0.loc26_25.2 (%tuple.elem0)) { // CHECK:STDOUT: %T.loc26_6.2: %tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc26_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc26_6.2: %tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc26_6.2: %pattern_type.f1e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_6.2 (constants.%T.patt)] // CHECK:STDOUT: %tuple.elem0.loc26_25.2: type = tuple_access %T.loc26_6.2, element0 [symbolic = %tuple.elem0.loc26_25.2 (constants.%tuple.elem0)] // CHECK:STDOUT: %A.loc26_20.2: @F.%tuple.elem0.loc26_25.2 (%tuple.elem0) = bind_symbolic_name A, 1 [symbolic = %A.loc26_20.2 (constants.%A)] -// CHECK:STDOUT: %A.patt.loc26_20.2: @F.%tuple.elem0.loc26_25.2 (%tuple.elem0) = symbolic_binding_pattern A, 1 [symbolic = %A.patt.loc26_20.2 (constants.%A.patt.f80)] +// CHECK:STDOUT: %pattern_type.loc26_20: type = pattern_type %tuple.elem0.loc26_25.2 [symbolic = %pattern_type.loc26_20 (constants.%pattern_type.08e)] +// CHECK:STDOUT: %A.patt.loc26_20.2: @F.%pattern_type.loc26_20 (%pattern_type.08e) = symbolic_binding_pattern A, 1 [symbolic = %A.patt.loc26_20.2 (constants.%A.patt.cc0)] // CHECK:STDOUT: %HoldsType.loc26_43.2: type = class_type @HoldsType, @HoldsType(%T.loc26_6.2) [symbolic = %HoldsType.loc26_43.2 (constants.%HoldsType.cc9)] +// CHECK:STDOUT: %pattern_type.loc26_29: type = pattern_type %HoldsType.loc26_43.2 [symbolic = %pattern_type.loc26_29 (constants.%pattern_type.ec6)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %HoldsType.loc26_43.2 [symbolic = %require_complete (constants.%require_complete)] @@ -295,7 +308,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: fn @G(%holds_to.param: %HoldsType.066) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %from.patt: %RuntimeConvertFrom = symbolic_binding_pattern from, 0 [symbolic = constants.%from.patt] +// CHECK:STDOUT: %from.patt: %pattern_type.f64 = symbolic_binding_pattern from, 0 [symbolic = constants.%from.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc29_36.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %RuntimeConvertFrom.ref.loc29_41: type = name_ref RuntimeConvertFrom, file.%RuntimeConvertFrom.decl [concrete = constants.%RuntimeConvertFrom] @@ -341,6 +354,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%RuntimeConvertTo) { @@ -361,6 +376,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.580 // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet // CHECK:STDOUT: %Self.as_type => constants.%RuntimeConvertFrom +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f64 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.109 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T, constants.%A) { @@ -368,8 +385,10 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %T.patt.loc26_6.2 => constants.%T.patt // CHECK:STDOUT: %tuple.elem0.loc26_25.2 => constants.%tuple.elem0 // CHECK:STDOUT: %A.loc26_20.2 => constants.%A -// CHECK:STDOUT: %A.patt.loc26_20.2 => constants.%A.patt.f80 +// CHECK:STDOUT: %pattern_type.loc26_20 => constants.%pattern_type.08e +// CHECK:STDOUT: %A.patt.loc26_20.2 => constants.%A.patt.cc0 // CHECK:STDOUT: %HoldsType.loc26_43.2 => constants.%HoldsType.cc9 +// CHECK:STDOUT: %pattern_type.loc26_29 => constants.%pattern_type.ec6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HoldsType(@F.%T.loc26_6.2) {} @@ -386,20 +405,25 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %T.patt.loc26_6.2 => constants.%T.patt // CHECK:STDOUT: %tuple.elem0.loc26_25.2 => constants.%RuntimeConvertTo // CHECK:STDOUT: %A.loc26_20.2 => -// CHECK:STDOUT: %A.patt.loc26_20.2 => constants.%A.patt.78b +// CHECK:STDOUT: %pattern_type.loc26_20 => constants.%pattern_type.109 +// CHECK:STDOUT: %A.patt.loc26_20.2 => constants.%A.patt.569 // CHECK:STDOUT: %HoldsType.loc26_43.2 => constants.%HoldsType.066 +// CHECK:STDOUT: %pattern_type.loc26_29 => constants.%pattern_type.a13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- include_files/convert.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -409,6 +433,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -421,12 +446,12 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc8_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc8_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc12_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc12_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -434,7 +459,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc8_14.1: type) { // CHECK:STDOUT: %Dest.loc8_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc8_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc8_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc8_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc8_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -447,10 +472,10 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc8_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -476,7 +501,7 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc12_22.1: type) { // CHECK:STDOUT: %Dest.loc12_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc12_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc12_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc12_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc12_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -489,10 +514,10 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc12_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -521,6 +546,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %Dest [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -530,6 +557,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -544,6 +573,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -560,6 +591,8 @@ fn G(holds_to: HoldsType((RuntimeConvertTo, ))) { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} diff --git a/toolchain/check/testdata/facet/min_prelude/runtime_value.carbon b/toolchain/check/testdata/facet/min_prelude/runtime_value.carbon index f2106231ff0b..607ee7daa358 100644 --- a/toolchain/check/testdata/facet/min_prelude/runtime_value.carbon +++ b/toolchain/check/testdata/facet/min_prelude/runtime_value.carbon @@ -73,8 +73,10 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %I.type [concrete] // CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %I.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.i [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -94,8 +96,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -127,7 +129,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: fn @F(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %I.type = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.2b5 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %C = name_ref c, %c // CHECK:STDOUT: %i.ref: %C.elem = name_ref i, @C.%.loc6 [concrete = @C.%.loc6] @@ -152,12 +154,15 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %assoc0: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl(type) [concrete] @@ -172,8 +177,10 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %facet_type [concrete] // CHECK:STDOUT: %struct_type.ij: type = struct_type {.ij: %facet_type} [concrete] // CHECK:STDOUT: %complete_type.559: = complete_type_witness %struct_type.ij [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -181,10 +188,10 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.%T (constants.%T)] @@ -205,8 +212,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -239,7 +246,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -278,12 +285,14 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -293,7 +302,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: fn @F(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %I.type = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.2b5 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %C = name_ref c, %c // CHECK:STDOUT: %ij.ref: %C.elem = name_ref ij, @C.%.loc7_9 [concrete = @C.%.loc7_9] @@ -307,6 +316,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -319,6 +329,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(type) { @@ -334,6 +345,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -342,7 +354,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Z.type.9fb: type = generic_interface_type @Z [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Z.generic: %Z.type.9fb = struct_value () [concrete] @@ -364,6 +377,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %Z.lookup_impl_witness, element0 [symbolic_self] // CHECK:STDOUT: %Z_where.type: type = facet_type <@Z, @Z(%C) where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %Z.impl_witness: = impl_witness file.%Z.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.c1f: type = pattern_type %Z.type.049 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -383,13 +397,13 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Z.decl: %Z.type.9fb = interface_decl @Z [concrete = constants.%Z.generic] { -// CHECK:STDOUT: %T.patt.loc2_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc2_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc2_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc8_20.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_20.1 [symbolic = %T.loc8_20.2 (constants.%T)] // CHECK:STDOUT: %Z.ref: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -413,8 +427,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %Z.impl_witness: = impl_witness %Z.impl_witness_table, @impl(constants.%T) [symbolic = @impl.%Z.impl_witness (constants.%Z.impl_witness)] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt: %Z.type.049 = binding_pattern T -// CHECK:STDOUT: %T.param_patt: %Z.type.049 = value_param_pattern %T.patt, call_param0 +// CHECK:STDOUT: %T.patt: %pattern_type.c1f = binding_pattern T +// CHECK:STDOUT: %T.param_patt: %pattern_type.c1f = value_param_pattern %T.patt, call_param0 // CHECK:STDOUT: %return.patt: = return_slot_pattern // CHECK:STDOUT: %return.param_patt: = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { @@ -438,7 +452,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Z(%T.loc2_13.1: type) { // CHECK:STDOUT: %T.loc2_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc2_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc2_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(%T.loc2_13.2)> [symbolic = %Z.type (constants.%Z.type.a61)] @@ -465,7 +479,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc8_20.1: type) { // CHECK:STDOUT: %T.loc8_20.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_20.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_20.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_20.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] // CHECK:STDOUT: %Z.impl_witness: = impl_witness file.%Z.impl_witness_table, @impl(%T.loc8_20.2) [symbolic = %Z.impl_witness (constants.%Z.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -525,12 +539,15 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -540,6 +557,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -547,13 +565,15 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Self.e44: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.560: type = facet_access_type %Self.e44 [symbolic] +// CHECK:STDOUT: %pattern_type.a80: type = pattern_type %Self.as_type.560 [symbolic] // CHECK:STDOUT: %Op.type.613: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d98: %Op.type.613 = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.assoc_type: type = assoc_entity_type @BitAnd [concrete] // CHECK:STDOUT: %assoc0.220: %BitAnd.assoc_type = assoc_entity element0, @BitAnd.%Op.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Op.type.28d: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.902: %Op.type.28d = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -567,18 +587,18 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: .BitAnd = %BitAnd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc9_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc9_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc13_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc13_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %BitAnd.decl: type = interface_decl @BitAnd [concrete = constants.%BitAnd.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc21_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc21_14.1 [symbolic = %T.loc21_14.2 (constants.%T)] // CHECK:STDOUT: %BitAnd.ref: type = name_ref BitAnd, file.%BitAnd.decl [concrete = constants.%BitAnd.type] @@ -590,7 +610,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc9_14.1: type) { // CHECK:STDOUT: %Dest.loc9_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc9_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc9_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -603,10 +623,10 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc9_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -632,7 +652,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc13_22.1: type) { // CHECK:STDOUT: %Dest.loc13_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc13_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc13_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -645,10 +665,10 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc13_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -675,12 +695,12 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: interface @BitAnd { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.e44] // CHECK:STDOUT: %Op.decl: %Op.type.613 = fn_decl @Op.1 [concrete = constants.%Op.d98] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.a80) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18_37: %BitAnd.type = name_ref Self, @BitAnd.%Self [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_37: type = facet_access_type %Self.ref.loc18_37 [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] @@ -712,7 +732,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc21_14.1: type) { // CHECK:STDOUT: %T.loc21_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T.loc21_14.2) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -722,12 +742,12 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %BitAnd.ref { // CHECK:STDOUT: %Op.decl: @impl.%Op.type (%Op.type.28d) = fn_decl @Op.2 [symbolic = @impl.%Op (constants.%Op.902)] { -// CHECK:STDOUT: %self.patt: @Op.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.2.%T (%T) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.2.%T (%T) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.2.%T (%T) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.2.%T (%T) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc22_37: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Op.2.%T (%T) = value_param call_param0 @@ -751,6 +771,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc10_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc10_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc10_14: type = pattern_type %Self.as_type.loc10_20.1 [symbolic = %pattern_type.loc10_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc10_28: type = pattern_type %Dest [symbolic = %pattern_type.loc10_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -760,6 +782,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -767,12 +791,14 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: generic fn @Op.1(@BitAnd.%Self: %BitAnd.type) { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_15.1 [symbolic = %pattern_type (constants.%pattern_type.a80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560), %other.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560)) -> @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(@impl.%T.loc21_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -789,6 +815,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc10_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc10_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc10_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -805,6 +833,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} @@ -814,6 +844,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: specific @Op.1(constants.%Self.e44) { // CHECK:STDOUT: %Self => constants.%Self.e44 // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%Self.as_type.560 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -826,10 +857,12 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%BitAnd.facet) { // CHECK:STDOUT: %Self => constants.%BitAnd.facet // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/builtin/call.carbon b/toolchain/check/testdata/function/builtin/call.carbon index 5aaabed8756f..ab43408210b2 100644 --- a/toolchain/check/testdata/function/builtin/call.carbon +++ b/toolchain/check/testdata/function/builtin/call.carbon @@ -21,6 +21,7 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Add.type.b1f: type = fn_type @Add.1 [concrete] // CHECK:STDOUT: %Add: %Add.type.b1f = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -54,6 +55,7 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: %bound_method.c6f: = bound_method %int_3.822, %Convert.specific_fn.8a8 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %RuntimeCall.type: type = fn_type @RuntimeCall [concrete] // CHECK:STDOUT: %RuntimeCall: %RuntimeCall.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -76,12 +78,12 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Add.decl: %Add.type.b1f = fn_decl @Add.1 [concrete = constants.%Add] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_27: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -101,8 +103,8 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: %array_type = binding_pattern arr -// CHECK:STDOUT: %.loc13_1: %array_type = var_pattern %arr.patt +// CHECK:STDOUT: %arr.patt: %pattern_type.5d8 = binding_pattern arr +// CHECK:STDOUT: %.loc13_1: %pattern_type.5d8 = var_pattern %arr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref %array_type = var arr // CHECK:STDOUT: %.loc13_30: type = splice_block %array_type [concrete = constants.%array_type] { @@ -139,12 +141,12 @@ fn RuntimeCall(a: i32, b: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %arr: ref %array_type = bind_name arr, %arr.var // CHECK:STDOUT: %RuntimeCall.decl: %RuntimeCall.type = fn_decl @RuntimeCall [concrete = constants.%RuntimeCall] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc15_35: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc15_35: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/builtin/definition.carbon b/toolchain/check/testdata/function/builtin/definition.carbon index a814f955d8d3..6c7444eb7b77 100644 --- a/toolchain/check/testdata/function/builtin/definition.carbon +++ b/toolchain/check/testdata/function/builtin/definition.carbon @@ -15,6 +15,7 @@ fn Add(a: i32, b: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Add.type: type = fn_type @Add [concrete] // CHECK:STDOUT: %Add: %Add.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -34,12 +35,12 @@ fn Add(a: i32, b: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Add.decl: %Add.type = fn_decl @Add [concrete = constants.%Add] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_27: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/builtin/fail_redefined.carbon b/toolchain/check/testdata/function/builtin/fail_redefined.carbon index 145fe645ecc8..6770111b1f8d 100644 --- a/toolchain/check/testdata/function/builtin/fail_redefined.carbon +++ b/toolchain/check/testdata/function/builtin/fail_redefined.carbon @@ -43,6 +43,7 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %A.type.00d7e7.1: type = fn_type @A.1 [concrete] // CHECK:STDOUT: %A.1db889.1: %A.type.00d7e7.1 = struct_value () [concrete] // CHECK:STDOUT: %A.type.00d7e7.2: type = fn_type @A.2 [concrete] @@ -74,12 +75,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl.loc11: %A.type.00d7e7.1 = fn_decl @A.1 [concrete = constants.%A.1db889.1] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m -// CHECK:STDOUT: %m.param_patt: %i32 = value_param_pattern %m.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m +// CHECK:STDOUT: %m.param_patt: %pattern_type.7ce = value_param_pattern %m.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -99,12 +100,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl.loc19: %A.type.00d7e7.2 = fn_decl @A.2 [concrete = constants.%A.1db889.2] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m -// CHECK:STDOUT: %m.param_patt: %i32 = value_param_pattern %m.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m +// CHECK:STDOUT: %m.param_patt: %pattern_type.7ce = value_param_pattern %m.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc19_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc19_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -124,12 +125,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl.loc21: %B.type.e168e5.1 = fn_decl @B.1 [concrete = constants.%B.d1e2df.1] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m -// CHECK:STDOUT: %m.param_patt: %i32 = value_param_pattern %m.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m +// CHECK:STDOUT: %m.param_patt: %pattern_type.7ce = value_param_pattern %m.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc21_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc21_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -149,12 +150,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl.loc29: %B.type.e168e5.2 = fn_decl @B.2 [concrete = constants.%B.d1e2df.2] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m -// CHECK:STDOUT: %m.param_patt: %i32 = value_param_pattern %m.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m +// CHECK:STDOUT: %m.param_patt: %pattern_type.7ce = value_param_pattern %m.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc29_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc29_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -174,12 +175,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc31: %C.type.de0bfe.1 = fn_decl @C.1 [concrete = constants.%C.1b0370.1] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m -// CHECK:STDOUT: %m.param_patt: %i32 = value_param_pattern %m.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m +// CHECK:STDOUT: %m.param_patt: %pattern_type.7ce = value_param_pattern %m.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc31_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc31_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -199,12 +200,12 @@ fn C(n: i32, m: i32) -> i32 = "int.sadd"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc39: %C.type.de0bfe.2 = fn_decl @C.2 [concrete = constants.%C.1b0370.2] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m -// CHECK:STDOUT: %m.param_patt: %i32 = value_param_pattern %m.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m +// CHECK:STDOUT: %m.param_patt: %pattern_type.7ce = value_param_pattern %m.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc39_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc39_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/builtin/method.carbon b/toolchain/check/testdata/function/builtin/method.carbon index f8e1b3f35ac7..2620f50ab338 100644 --- a/toolchain/check/testdata/function/builtin/method.carbon +++ b/toolchain/check/testdata/function/builtin/method.carbon @@ -24,6 +24,7 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self.826: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.b70: type = facet_access_type %Self.826 [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %Self.as_type.b70 [symbolic] // CHECK:STDOUT: %F.type.cf0: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.bc6: %F.type.cf0 = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -31,6 +32,7 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.066: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.9ec: %F.type.066 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %i32, (%I.impl_witness) [concrete] @@ -76,6 +78,7 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %bound_method.c6f: = bound_method %int_3.822, %Convert.specific_fn.8a8 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -104,8 +107,8 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (@impl.a9a.%F.decl), @impl.a9a [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: %array_type = binding_pattern arr -// CHECK:STDOUT: %.loc19_1: %array_type = var_pattern %arr.patt +// CHECK:STDOUT: %arr.patt: %pattern_type.5d8 = binding_pattern arr +// CHECK:STDOUT: %.loc19_1: %pattern_type.5d8 = var_pattern %arr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref %array_type = var arr // CHECK:STDOUT: %.loc19_40: type = splice_block %array_type [concrete = constants.%array_type] { @@ -151,12 +154,12 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.826] // CHECK:STDOUT: %F.decl: %F.type.cf0 = fn_decl @F.1 [concrete = constants.%F.bc6] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.6de) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.6de) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @F.1.%pattern_type (%pattern_type.6de) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @F.1.%pattern_type (%pattern_type.6de) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.6de) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.6de) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc12_36: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.826)] // CHECK:STDOUT: %Self.as_type.loc12_36: type = facet_access_type %Self.ref.loc12_36 [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type.b70)] @@ -188,12 +191,12 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.a9a: %i32 as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.066 = fn_decl @F.2 [concrete = constants.%F.9ec] { -// CHECK:STDOUT: %self.patt: %i32 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %i32 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %i32 = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %i32 = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.7ce = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.7ce = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.7ce = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.7ce = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc16_34: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16_34: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -221,6 +224,7 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: generic fn @F.1(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.826)] // CHECK:STDOUT: %Self.as_type.loc12_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type.b70)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc12_14.1 [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70), %other.param: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70)) -> @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.b70); // CHECK:STDOUT: } @@ -230,10 +234,12 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: specific @F.1(constants.%Self.826) { // CHECK:STDOUT: %Self => constants.%Self.826 // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%Self.as_type.b70 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/builtin/no_prelude/adapted_type.carbon b/toolchain/check/testdata/function/builtin/no_prelude/adapted_type.carbon index 56a2f6111836..d11eb64bf5f1 100644 --- a/toolchain/check/testdata/function/builtin/no_prelude/adapted_type.carbon +++ b/toolchain/check/testdata/function/builtin/no_prelude/adapted_type.carbon @@ -49,16 +49,19 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: --- adapt.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %MyIntLiteral: type = class_type @MyIntLiteral [concrete] // CHECK:STDOUT: %complete_type.972: = complete_type_witness Core.IntLiteral [concrete] +// CHECK:STDOUT: %pattern_type.e22: type = pattern_type %MyIntLiteral [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %MyInt32: type = class_type @MyInt32 [concrete] // CHECK:STDOUT: %int_32.be0: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %int_32.4da: %MyIntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32.4da [concrete] +// CHECK:STDOUT: %pattern_type.81e: type = pattern_type %MyInt32 [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.ec2: = complete_type_witness %i32.builtin [concrete] @@ -83,18 +86,18 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: .v = %v // CHECK:STDOUT: } // CHECK:STDOUT: %IntLiteral.decl: %IntLiteral.type = fn_decl @IntLiteral [concrete = constants.%IntLiteral] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MyIntLiteral.decl: type = class_decl @MyIntLiteral [concrete = constants.%MyIntLiteral] {} {} // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.patt: %MyIntLiteral = binding_pattern N -// CHECK:STDOUT: %N.param_patt: %MyIntLiteral = value_param_pattern %N.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt: %pattern_type.e22 = binding_pattern N +// CHECK:STDOUT: %N.param_patt: %pattern_type.e22 = value_param_pattern %N.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %N.param: %MyIntLiteral = value_param call_param0 // CHECK:STDOUT: %MyIntLiteral.ref: type = name_ref MyIntLiteral, file.%MyIntLiteral.decl [concrete = constants.%MyIntLiteral] @@ -104,10 +107,10 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: } // CHECK:STDOUT: %MyInt32.decl: type = class_decl @MyInt32 [concrete = constants.%MyInt32] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %a.patt: %MyIntLiteral = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %MyIntLiteral = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %MyInt32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %MyInt32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.e22 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.e22 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.81e = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.81e = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt32.ref.loc18: type = name_ref MyInt32, file.%MyInt32.decl [concrete = constants.%MyInt32] // CHECK:STDOUT: %a.param.loc18: %MyIntLiteral = value_param call_param0 @@ -117,12 +120,12 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %return.loc18: ref %MyInt32 = return_slot %return.param.loc18 // CHECK:STDOUT: } // CHECK:STDOUT: %MyAdd.decl: %MyAdd.type = fn_decl @MyAdd [concrete = constants.%MyAdd] { -// CHECK:STDOUT: %a.patt: %MyInt32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %MyInt32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %MyInt32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %MyInt32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %MyInt32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %MyInt32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.81e = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.81e = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.81e = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.81e = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.81e = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.81e = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt32.ref.loc20_37: type = name_ref MyInt32, file.%MyInt32.decl [concrete = constants.%MyInt32] // CHECK:STDOUT: %a.param: %MyInt32 = value_param call_param0 @@ -135,8 +138,8 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %return: ref %MyInt32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %MyInt32 = binding_pattern v -// CHECK:STDOUT: %.loc22: %MyInt32 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.81e = binding_pattern v +// CHECK:STDOUT: %.loc22: %pattern_type.81e = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %MyInt32 = var v // CHECK:STDOUT: %MyInt32.ref: type = name_ref MyInt32, %MyInt32.decl [concrete = constants.%MyInt32] @@ -168,10 +171,10 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %.loc13_32.2: type = converted %int.make_type_signed, %.loc13_32.1 [concrete = constants.%i32.builtin] // CHECK:STDOUT: adapt_decl %.loc13_32.2 [concrete] // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %a.patt: %MyIntLiteral = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %MyIntLiteral = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %MyInt32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %MyInt32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.e22 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.e22 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.81e = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.81e = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt32.ref.loc15: type = name_ref MyInt32, file.%MyInt32.decl [concrete = constants.%MyInt32] // CHECK:STDOUT: %a.param.loc15: %MyIntLiteral = value_param call_param0 @@ -231,6 +234,8 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: %MyIntLiteral: type = class_type @MyIntLiteral [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.e22: type = pattern_type %MyIntLiteral [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -242,10 +247,10 @@ fn Int(N: MyIntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: } // CHECK:STDOUT: %MyIntLiteral.decl: type = class_decl @MyIntLiteral [concrete = constants.%MyIntLiteral] {} {} // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.patt: %MyIntLiteral = binding_pattern N -// CHECK:STDOUT: %N.param_patt: %MyIntLiteral = value_param_pattern %N.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt: %pattern_type.e22 = binding_pattern N +// CHECK:STDOUT: %N.param_patt: %pattern_type.e22 = value_param_pattern %N.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %N.param: %MyIntLiteral = value_param call_param0 // CHECK:STDOUT: %MyIntLiteral.ref: type = name_ref MyIntLiteral, file.%MyIntLiteral.decl [concrete = constants.%MyIntLiteral] diff --git a/toolchain/check/testdata/function/builtin/no_prelude/call_from_operator.carbon b/toolchain/check/testdata/function/builtin/no_prelude/call_from_operator.carbon index 36f85a9ab1b9..088108eb9953 100644 --- a/toolchain/check/testdata/function/builtin/no_prelude/call_from_operator.carbon +++ b/toolchain/check/testdata/function/builtin/no_prelude/call_from_operator.carbon @@ -52,24 +52,29 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: --- core.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %Add.type: type = facet_type <@Add> [concrete] // CHECK:STDOUT: %Self.b3d: %Add.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.f73: type = facet_access_type %Self.b3d [symbolic] +// CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %Self.as_type.f73 [symbolic] // CHECK:STDOUT: %Op.type.31b: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d59: %Op.type.31b = struct_value () [concrete] // CHECK:STDOUT: %Add.assoc_type: type = assoc_entity_type @Add [concrete] // CHECK:STDOUT: %assoc0.82c: %Add.assoc_type = assoc_entity element0, @Add.%Op.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%T)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%T) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type.a21: type = assoc_entity_type @As, @As(%T) [symbolic] @@ -79,6 +84,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.095: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%T) [symbolic] @@ -86,6 +92,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %Add.impl_witness: = impl_witness file.%Add.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] // CHECK:STDOUT: %Op.type.c2a: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.4e3: %Op.type.c2a = struct_value () [concrete] // CHECK:STDOUT: %Add.facet: %Add.type = facet_value %i32.builtin, (%Add.impl_witness) [concrete] @@ -130,17 +137,17 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %IntLiteral.decl: %IntLiteral.type = fn_decl @IntLiteral [concrete = constants.%IntLiteral] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.patt: Core.IntLiteral = binding_pattern N -// CHECK:STDOUT: %N.param_patt: Core.IntLiteral = value_param_pattern %N.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = binding_pattern N +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern %N.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %N.param: Core.IntLiteral = value_param call_param0 // CHECK:STDOUT: %.loc5_22.1: type = splice_block %.loc5_22.3 [concrete = Core.IntLiteral] { @@ -155,12 +162,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: %Add.decl: type = interface_decl @Add [concrete = constants.%Add.type] {} {} // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %T.patt.loc11_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_14.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_14.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %T.patt.loc15_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc15_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_22.2 (constants.%T)] // CHECK:STDOUT: } @@ -220,12 +227,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: interface @Add { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.b3d] // CHECK:STDOUT: %Op.decl: %Op.type.31b = fn_decl @Op.1 [concrete = constants.%Op.d59] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.8f9) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.8f9) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.8f9) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.8f9) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.8f9) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.8f9) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc8_37: %Add.type = name_ref Self, @Add.%Self [symbolic = %Self (constants.%Self.b3d)] // CHECK:STDOUT: %Self.as_type.loc8_37: type = facet_access_type %Self.ref.loc8_37 [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type.f73)] @@ -257,7 +264,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%T.loc11_14.1: type) { // CHECK:STDOUT: %T.loc11_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T.loc11_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -270,10 +277,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc12_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc12_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc12_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc12_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc12_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc12_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @As.%T.loc11_14.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc12_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -299,7 +306,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%T.loc15_22.1: type) { // CHECK:STDOUT: %T.loc15_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc15_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_22.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T.loc15_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -312,10 +319,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc16_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc16_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc16_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc16_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc16_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc16_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @ImplicitAs.%T.loc15_22.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc16_20.1 (%Self.as_type.419) = value_param call_param0 @@ -341,12 +348,12 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c45: %.loc19_6.2 as %Add.ref { // CHECK:STDOUT: %Op.decl: %Op.type.c2a = fn_decl @Op.2 [concrete = constants.%Op.4e3] { -// CHECK:STDOUT: %self.patt: %i32.builtin = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %i32.builtin = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %i32.builtin = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %i32.builtin = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32.builtin = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32.builtin = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.956 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.956 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.956 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.956 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc20_37: type = name_ref Self, @impl.c45.%.loc19_6.2 [concrete = constants.%i32.builtin] // CHECK:STDOUT: %self.param: %i32.builtin = value_param call_param0 @@ -366,10 +373,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.028: %.loc23_17.2 as %As.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.fc9 = fn_decl @Convert.3 [concrete = constants.%Convert.33c] { -// CHECK:STDOUT: %self.patt: Core.IntLiteral = binding_pattern self -// CHECK:STDOUT: %self.param_patt: Core.IntLiteral = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32.builtin = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32.builtin = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.dc0 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.dc0 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [concrete = constants.%i32.builtin] @@ -389,10 +396,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.e13: %.loc27_17.2 as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.c2a = fn_decl @Convert.4 [concrete = constants.%Convert.40d] { -// CHECK:STDOUT: %self.patt: Core.IntLiteral = binding_pattern self -// CHECK:STDOUT: %self.param_patt: Core.IntLiteral = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32.builtin = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32.builtin = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.dc0 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.dc0 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [concrete = constants.%i32.builtin] @@ -412,10 +419,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.3df: %.loc31_6.2 as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.295 = fn_decl @Convert.5 [concrete = constants.%Convert.2bf] { -// CHECK:STDOUT: %self.patt: %i32.builtin = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %i32.builtin = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.956 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.956 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %IntLiteral.ref: %IntLiteral.type = name_ref IntLiteral, file.%IntLiteral.decl [concrete = constants.%IntLiteral] // CHECK:STDOUT: %int_literal.make_type: init type = call %IntLiteral.ref() [concrete = Core.IntLiteral] @@ -441,6 +448,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: generic fn @Op.1(@Add.%Self: %Add.type) { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.b3d)] // CHECK:STDOUT: %Self.as_type.loc8_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_15.1 (constants.%Self.as_type.f73)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc8_15.1 [symbolic = %pattern_type (constants.%pattern_type.8f9)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73), %other.param: @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73)) -> @Op.1.%Self.as_type.loc8_15.1 (%Self.as_type.f73); // CHECK:STDOUT: } @@ -450,6 +458,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc12_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc12_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc12_14: type = pattern_type %Self.as_type.loc12_20.1 [symbolic = %pattern_type.loc12_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc12_28: type = pattern_type %T [symbolic = %pattern_type.loc12_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc12_20.1 (%Self.as_type.7f0)) -> @Convert.1.%T (%T); // CHECK:STDOUT: } @@ -459,6 +469,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc16_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc16_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc16_14: type = pattern_type %Self.as_type.loc16_20.1 [symbolic = %pattern_type.loc16_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc16_28: type = pattern_type %T [symbolic = %pattern_type.loc16_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc16_20.1 (%Self.as_type.419)) -> @Convert.2.%T (%T); // CHECK:STDOUT: } @@ -474,6 +486,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: specific @Op.1(constants.%Self.b3d) { // CHECK:STDOUT: %Self => constants.%Self.b3d // CHECK:STDOUT: %Self.as_type.loc8_15.1 => constants.%Self.as_type.f73 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8f9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(constants.%T) { @@ -486,6 +499,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc12_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc12_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc12_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%T) {} @@ -502,6 +517,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc16_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc16_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc16_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%T) {} @@ -511,6 +528,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: specific @Op.1(constants.%Add.facet) { // CHECK:STDOUT: %Self => constants.%Add.facet // CHECK:STDOUT: %Self.as_type.loc8_15.1 => constants.%i32.builtin +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.956 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(constants.%i32.builtin) { @@ -531,6 +549,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %As.type => constants.%As.type.a09 // CHECK:STDOUT: %Self => constants.%As.facet // CHECK:STDOUT: %Self.as_type.loc12_20.1 => Core.IntLiteral +// CHECK:STDOUT: %pattern_type.loc12_14 => constants.%pattern_type.dc0 +// CHECK:STDOUT: %pattern_type.loc12_28 => constants.%pattern_type.956 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%i32.builtin) { @@ -551,6 +571,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.11a // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.bcb // CHECK:STDOUT: %Self.as_type.loc16_20.1 => Core.IntLiteral +// CHECK:STDOUT: %pattern_type.loc16_14 => constants.%pattern_type.dc0 +// CHECK:STDOUT: %pattern_type.loc16_28 => constants.%pattern_type.956 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(Core.IntLiteral) { @@ -571,6 +593,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.9fc // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.a85 // CHECK:STDOUT: %Self.as_type.loc16_20.1 => constants.%i32.builtin +// CHECK:STDOUT: %pattern_type.loc16_14 => constants.%pattern_type.956 +// CHECK:STDOUT: %pattern_type.loc16_28 => constants.%pattern_type.dc0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- user.carbon @@ -579,15 +603,18 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %As.type.eed: type = facet_type <@As, @As(%T)> [symbolic] // CHECK:STDOUT: %Self.65a: %As.type.eed = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Convert.type.843: type = fn_type @Convert.1, @As(%T) [symbolic] // CHECK:STDOUT: %Convert.95f: %Convert.type.843 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.04d: type = facet_access_type %Self.65a [symbolic] +// CHECK:STDOUT: %pattern_type.ca4: type = pattern_type %Self.as_type.04d [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %As.assoc_type.760: type = assoc_entity_type @As, @As(%T) [symbolic] // CHECK:STDOUT: %assoc0.076: %As.assoc_type.760 = assoc_entity element0, imports.%Core.import_ref.708 [symbolic] // CHECK:STDOUT: %As.type.a6d: type = facet_type <@As, @As(%i32.builtin)> [concrete] @@ -605,6 +632,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert.2, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.40a: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type.40a [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %assoc0.dc001e.1: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.207961.1 [symbolic] // CHECK:STDOUT: %Self.d28: %ImplicitAs.type.61e = bind_symbolic_name Self, 1 [symbolic] @@ -633,6 +661,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %assoc0.c7d: %Add.assoc_type = assoc_entity element0, imports.%Core.import_ref.6dd [concrete] // CHECK:STDOUT: %Op.type.545: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type.da9: type = facet_access_type %Self.a99 [symbolic] +// CHECK:STDOUT: %pattern_type.26e: type = pattern_type %Self.as_type.da9 [symbolic] // CHECK:STDOUT: %Add.impl_witness_table = impl_witness_table (imports.%Core.import_ref.db4), @impl.a1d [concrete] // CHECK:STDOUT: %Add.impl_witness: = impl_witness %Add.impl_witness_table [concrete] // CHECK:STDOUT: %Add.facet: %Add.type = facet_value %i32.builtin, (%Add.impl_witness) [concrete] @@ -651,6 +680,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Convert.bound.65a: = bound_method %int_3.a0f, %Convert.b32 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.9e2: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %Convert.bound.94d: = bound_method %int_3.1ba, %Convert.5bc [concrete] // CHECK:STDOUT: %Convert.bound.8fc: = bound_method %int_4.0c1, %Convert.5bc [concrete] @@ -679,13 +709,13 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: import Core//default // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//default, loc11_14, loaded [symbolic = @As.%T (constants.%T)] -// CHECK:STDOUT: %Core.import_ref.a7c = import_ref Core//default, inst85 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.a7c = import_ref Core//default, inst89 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.5e1: @As.%As.assoc_type (%As.assoc_type.760) = import_ref Core//default, loc12_32, loaded [symbolic = @As.%assoc0 (constants.%assoc0.97d)] // CHECK:STDOUT: %Core.Convert.313 = import_ref Core//default, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//default, loc11_14, loaded [symbolic = @As.%T (constants.%T)] -// CHECK:STDOUT: %Core.import_ref.996: @As.%As.type (%As.type.eed) = import_ref Core//default, inst85 [no loc], loaded [symbolic = @As.%Self (constants.%Self.65a)] +// CHECK:STDOUT: %Core.import_ref.996: @As.%As.type (%As.type.eed) = import_ref Core//default, inst89 [no loc], loaded [symbolic = @As.%Self (constants.%Self.65a)] // CHECK:STDOUT: %Core.import_ref.708: @As.%Convert.type (%Convert.type.843) = import_ref Core//default, loc12_32, loaded [symbolic = @As.%Convert (constants.%Convert.95f)] -// CHECK:STDOUT: %Core.import_ref.07c = import_ref Core//default, inst41 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.07c = import_ref Core//default, inst43 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.f6c: %Add.assoc_type = import_ref Core//default, loc8_41, loaded [concrete = constants.%assoc0.c7d] // CHECK:STDOUT: %Core.Op = import_ref Core//default, Op, unloaded // CHECK:STDOUT: %Core.import_ref.902: = import_ref Core//default, loc19_17, loaded [concrete = constants.%Add.impl_witness] @@ -695,19 +725,19 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Core.import_ref.8721d7.1: type = import_ref Core//default, loc23_17, loaded [concrete = Core.IntLiteral] // CHECK:STDOUT: %Core.import_ref.1e5: type = import_ref Core//default, loc23_28, loaded [concrete = constants.%As.type.a6d] // CHECK:STDOUT: %Core.import_ref.5ab3ec.3: type = import_ref Core//default, loc15_22, loaded [symbolic = @ImplicitAs.%T (constants.%T)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst126 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst134 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//default, loc16_32, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc001e.2)] // CHECK:STDOUT: %Core.Convert.e69 = import_ref Core//default, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.c62: = import_ref Core//default, loc27_38, loaded [concrete = constants.%ImplicitAs.impl_witness.07a] // CHECK:STDOUT: %Core.import_ref.8721d7.2: type = import_ref Core//default, loc27_17, loaded [concrete = Core.IntLiteral] // CHECK:STDOUT: %Core.import_ref.4d9: type = import_ref Core//default, loc27_36, loaded [concrete = constants.%ImplicitAs.type.61e] // CHECK:STDOUT: %Core.import_ref.5ab3ec.4: type = import_ref Core//default, loc15_22, loaded [symbolic = @ImplicitAs.%T (constants.%T)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst126 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst134 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.207961.1 = import_ref Core//default, loc16_32, unloaded // CHECK:STDOUT: %Core.import_ref.c5f: = import_ref Core//default, loc31_38, loaded [concrete = constants.%ImplicitAs.impl_witness.9c5] // CHECK:STDOUT: %Core.import_ref.c8c7cd.2: type = import_ref Core//default, loc31_6, loaded [concrete = constants.%i32.builtin] // CHECK:STDOUT: %Core.import_ref.efb: type = import_ref Core//default, loc31_36, loaded [concrete = constants.%ImplicitAs.type.2fd] -// CHECK:STDOUT: %Core.import_ref.442: %Add.type = import_ref Core//default, inst41 [no loc], loaded [symbolic = constants.%Self.a99] +// CHECK:STDOUT: %Core.import_ref.442: %Add.type = import_ref Core//default, inst43 [no loc], loaded [symbolic = constants.%Self.a99] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -717,8 +747,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: %array_type = binding_pattern arr -// CHECK:STDOUT: %.loc4_1: %array_type = var_pattern %arr.patt +// CHECK:STDOUT: %arr.patt: %pattern_type.9e2 = binding_pattern arr +// CHECK:STDOUT: %.loc4_1: %pattern_type.9e2 = var_pattern %arr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref %array_type = var arr // CHECK:STDOUT: %.loc4_44: type = splice_block %array_type [concrete = constants.%array_type] { @@ -763,7 +793,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(imports.%Core.import_ref.5ab3ec.1: type) [from "core.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T)> [symbolic = %As.type (constants.%As.type.eed)] @@ -790,7 +820,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.3: type) [from "core.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -835,6 +865,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T)> [symbolic = %As.type (constants.%As.type.eed)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.eed) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.65a)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.04d)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.ca4)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -844,6 +876,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.40a)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -853,6 +887,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.442: %Add.type) [from "core.carbon"] { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.a99)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.da9)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.26e)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -928,6 +963,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %As.type => constants.%As.type.eed // CHECK:STDOUT: %Self => constants.%Self.65a // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.04d +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.ca4 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(constants.%i32.builtin) { @@ -970,6 +1007,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.40a +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(Core.IntLiteral) { @@ -988,5 +1027,6 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: specific @Op.1(constants.%Self.a99) { // CHECK:STDOUT: %Self => constants.%Self.a99 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.da9 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.26e // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/builtin/no_prelude/import.carbon b/toolchain/check/testdata/function/builtin/no_prelude/import.carbon index 6b13ee57cfb8..d14cd2eb4843 100644 --- a/toolchain/check/testdata/function/builtin/no_prelude/import.carbon +++ b/toolchain/check/testdata/function/builtin/no_prelude/import.carbon @@ -30,12 +30,15 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: --- core.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] // CHECK:STDOUT: %AsI32.type: type = fn_type @AsI32 [concrete] // CHECK:STDOUT: %AsI32: %AsI32.type = struct_value () [concrete] // CHECK:STDOUT: %AsIntLiteral.type: type = fn_type @AsIntLiteral [concrete] @@ -53,17 +56,17 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: .TestAdd = %TestAdd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %IntLiteral.decl: %IntLiteral.type = fn_decl @IntLiteral [concrete = constants.%IntLiteral] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.patt: Core.IntLiteral = binding_pattern N -// CHECK:STDOUT: %N.param_patt: Core.IntLiteral = value_param_pattern %N.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = binding_pattern N +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern %N.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %N.param: Core.IntLiteral = value_param call_param0 // CHECK:STDOUT: %.loc6_22.1: type = splice_block %.loc6_22.3 [concrete = Core.IntLiteral] { @@ -77,10 +80,10 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AsI32.decl: %AsI32.type = fn_decl @AsI32 [concrete = constants.%AsI32] { -// CHECK:STDOUT: %a.patt: Core.IntLiteral = binding_pattern a -// CHECK:STDOUT: %a.param_patt: Core.IntLiteral = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32.builtin = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32.builtin = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.dc0 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.dc0 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [concrete = constants.%i32.builtin] @@ -98,10 +101,10 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %return: ref %i32.builtin = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AsIntLiteral.decl: %AsIntLiteral.type = fn_decl @AsIntLiteral [concrete = constants.%AsIntLiteral] { -// CHECK:STDOUT: %a.patt: %i32.builtin = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32.builtin = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.956 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.956 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %IntLiteral.ref: %IntLiteral.type = name_ref IntLiteral, file.%IntLiteral.decl [concrete = constants.%IntLiteral] // CHECK:STDOUT: %int_literal.make_type: init type = call %IntLiteral.ref() [concrete = Core.IntLiteral] @@ -119,12 +122,12 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %return: ref Core.IntLiteral = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAdd.decl: %TestAdd.type = fn_decl @TestAdd [concrete = constants.%TestAdd] { -// CHECK:STDOUT: %a.patt: %i32.builtin = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32.builtin = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32.builtin = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32.builtin = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32.builtin = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32.builtin = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.956 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.956 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.956 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.956 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_31: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %int.make_type_signed.loc11_31: init type = call constants.%Int(%int_32.loc11_31) [concrete = constants.%i32.builtin] @@ -181,6 +184,7 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: %int_3.a0f: %i32.builtin = int_value 3 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.9e2: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%i32.builtin, %i32.builtin, %i32.builtin) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_1.f38, %int_2.5a1, %int_3.a0f) [concrete] @@ -206,8 +210,8 @@ var arr: array(i32, Core.AsIntLiteral(Core.TestAdd(Core.AsI32(1), Core.AsI32(2)) // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %arr.patt: %array_type = binding_pattern arr -// CHECK:STDOUT: %.loc4_1: %array_type = var_pattern %arr.patt +// CHECK:STDOUT: %arr.patt: %pattern_type.9e2 = binding_pattern arr +// CHECK:STDOUT: %.loc4_1: %pattern_type.9e2 = var_pattern %arr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %arr.var: ref %array_type = var arr // CHECK:STDOUT: %.loc4_82: type = splice_block %array_type [concrete = constants.%array_type] { diff --git a/toolchain/check/testdata/function/call/fail_not_callable.carbon b/toolchain/check/testdata/function/call/fail_not_callable.carbon index 724a3cceb38e..38c3aca262b1 100644 --- a/toolchain/check/testdata/function/call/fail_not_callable.carbon +++ b/toolchain/check/testdata/function/call/fail_not_callable.carbon @@ -23,6 +23,7 @@ fn Run() { // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %str: String = string_literal "hello" [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -46,8 +47,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x -// CHECK:STDOUT: %.loc16_3: %i32 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x +// CHECK:STDOUT: %.loc16_3: %pattern_type.7ce = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var x // CHECK:STDOUT: %str: String = string_literal "hello" [concrete = constants.%str] diff --git a/toolchain/check/testdata/function/call/fail_param_count.carbon b/toolchain/check/testdata/function/call/fail_param_count.carbon index 5465b0f49e96..174eb35e0478 100644 --- a/toolchain/check/testdata/function/call/fail_param_count.carbon +++ b/toolchain/check/testdata/function/call/fail_param_count.carbon @@ -72,6 +72,7 @@ fn Main() { // CHECK:STDOUT: %Run0: %Run0.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Run1.type: type = fn_type @Run1 [concrete] // CHECK:STDOUT: %Run1: %Run1.type = struct_value () [concrete] // CHECK:STDOUT: %Run2.type: type = fn_type @Run2 [concrete] @@ -101,8 +102,8 @@ fn Main() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Run0.decl: %Run0.type = fn_decl @Run0 [concrete = constants.%Run0] {} {} // CHECK:STDOUT: %Run1.decl: %Run1.type = fn_decl @Run1 [concrete = constants.%Run1] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc12: type = splice_block %i32 [concrete = constants.%i32] { @@ -112,10 +113,10 @@ fn Main() { // CHECK:STDOUT: %a: %i32 = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Run2.decl: %Run2.type = fn_decl @Run2 [concrete = constants.%Run2] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc13_12: type = splice_block %i32.loc13_12 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/call/fail_param_type.carbon b/toolchain/check/testdata/function/call/fail_param_type.carbon index 85e9244d8835..4d03aa62f401 100644 --- a/toolchain/check/testdata/function/call/fail_param_type.carbon +++ b/toolchain/check/testdata/function/call/fail_param_type.carbon @@ -30,6 +30,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -54,8 +55,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon b/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon index f366250404ad..c9077acc5a0c 100644 --- a/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon +++ b/toolchain/check/testdata/function/call/fail_return_type_mismatch.carbon @@ -27,6 +27,7 @@ fn Run() { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %float: f64 = float_literal 1 [concrete] @@ -34,6 +35,7 @@ fn Run() { // CHECK:STDOUT: %Run: %Run.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -54,8 +56,8 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type: init type = call constants.%Float(%int_64) [concrete = f64] @@ -76,8 +78,8 @@ fn Run() { // CHECK:STDOUT: fn @Run() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x -// CHECK:STDOUT: %.loc21_3.1: %i32 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x +// CHECK:STDOUT: %.loc21_3.1: %pattern_type.7ce = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var x // CHECK:STDOUT: %Foo.ref: %Foo.type = name_ref Foo, file.%Foo.decl [concrete = constants.%Foo] diff --git a/toolchain/check/testdata/function/call/i32.carbon b/toolchain/check/testdata/function/call/i32.carbon index f82151b370c3..08f36092e34f 100644 --- a/toolchain/check/testdata/function/call/i32.carbon +++ b/toolchain/check/testdata/function/call/i32.carbon @@ -21,6 +21,7 @@ fn Main() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Echo.type: type = fn_type @Echo [concrete] // CHECK:STDOUT: %Echo: %Echo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -57,10 +58,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Echo.decl: %Echo.type = fn_decl @Echo [concrete = constants.%Echo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_20: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -85,8 +86,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc16_3: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc16_3: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %Echo.ref: %Echo.type = name_ref Echo, file.%Echo.decl [concrete = constants.%Echo] diff --git a/toolchain/check/testdata/function/call/min_prelude/alias.carbon b/toolchain/check/testdata/function/call/min_prelude/alias.carbon index 03ba66348730..d3600bbb9028 100644 --- a/toolchain/check/testdata/function/call/min_prelude/alias.carbon +++ b/toolchain/check/testdata/function/call/min_prelude/alias.carbon @@ -23,6 +23,7 @@ fn Main() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -45,8 +46,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_12.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc14_12.2: type = converted %.loc14_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -69,8 +70,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b -// CHECK:STDOUT: %.loc19_3: %empty_tuple.type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc19_3: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var b // CHECK:STDOUT: %B.ref: %A.type = name_ref B, file.%B [concrete = constants.%A] diff --git a/toolchain/check/testdata/function/call/min_prelude/return_implicit.carbon b/toolchain/check/testdata/function/call/min_prelude/return_implicit.carbon index 6baf7d799ef0..fc7fa9969c78 100644 --- a/toolchain/check/testdata/function/call/min_prelude/return_implicit.carbon +++ b/toolchain/check/testdata/function/call/min_prelude/return_implicit.carbon @@ -26,6 +26,7 @@ fn Main() { // CHECK:STDOUT: %MakeImplicitEmptyTuple: %MakeImplicitEmptyTuple.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -53,8 +54,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b -// CHECK:STDOUT: %.loc18_3: %empty_tuple.type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc18_3: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var b // CHECK:STDOUT: %MakeImplicitEmptyTuple.ref: %MakeImplicitEmptyTuple.type = name_ref MakeImplicitEmptyTuple, file.%MakeImplicitEmptyTuple.decl [concrete = constants.%MakeImplicitEmptyTuple] diff --git a/toolchain/check/testdata/function/call/more_param_ir.carbon b/toolchain/check/testdata/function/call/more_param_ir.carbon index e1eaaf5f13e0..354a78601680 100644 --- a/toolchain/check/testdata/function/call/more_param_ir.carbon +++ b/toolchain/check/testdata/function/call/more_param_ir.carbon @@ -22,12 +22,14 @@ fn Main() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -67,10 +69,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11_11: type = splice_block %i32.loc11_11 [concrete = constants.%i32] { @@ -96,8 +98,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type.a1c = binding_pattern x -// CHECK:STDOUT: %.loc14_3.1: %tuple.type.a1c = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.b74 = binding_pattern x +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.b74 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.a1c = var x // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/function/call/no_prelude/empty_struct.carbon b/toolchain/check/testdata/function/call/no_prelude/empty_struct.carbon index 8c90fef3e16e..077b25c6ed73 100644 --- a/toolchain/check/testdata/function/call/no_prelude/empty_struct.carbon +++ b/toolchain/check/testdata/function/call/no_prelude/empty_struct.carbon @@ -20,6 +20,7 @@ fn Main() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %Echo.type: type = fn_type @Echo [concrete] // CHECK:STDOUT: %Echo: %Echo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -33,10 +34,10 @@ fn Main() { // CHECK:STDOUT: .Main = %Main.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Echo.decl: %Echo.type = fn_decl @Echo [concrete = constants.%Echo] { -// CHECK:STDOUT: %a.patt: %empty_struct_type = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %empty_struct_type = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_20.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc11_20.2: type = converted %.loc11_20.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/function/call/no_prelude/empty_tuple.carbon b/toolchain/check/testdata/function/call/no_prelude/empty_tuple.carbon index 4c878c892bba..a0e8b0d39338 100644 --- a/toolchain/check/testdata/function/call/no_prelude/empty_tuple.carbon +++ b/toolchain/check/testdata/function/call/no_prelude/empty_tuple.carbon @@ -20,6 +20,7 @@ fn Main() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Echo.type: type = fn_type @Echo [concrete] // CHECK:STDOUT: %Echo: %Echo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -33,10 +34,10 @@ fn Main() { // CHECK:STDOUT: .Main = %Main.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Echo.decl: %Echo.type = fn_decl @Echo [concrete = constants.%Echo] { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %empty_tuple.type = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_20.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc11_20.2: type = converted %.loc11_20.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/function/call/no_prelude/fail_explicit_self_param.carbon b/toolchain/check/testdata/function/call/no_prelude/fail_explicit_self_param.carbon index 65846ef388c6..1cdcfc9e8ab4 100644 --- a/toolchain/check/testdata/function/call/no_prelude/fail_explicit_self_param.carbon +++ b/toolchain/check/testdata/function/call/no_prelude/fail_explicit_self_param.carbon @@ -22,6 +22,7 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Run.type: type = fn_type @Run [concrete] @@ -35,8 +36,8 @@ fn Run() { // CHECK:STDOUT: .Run = %Run.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc15_13.1: type = splice_block %.loc15_13.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/call/params_one.carbon b/toolchain/check/testdata/function/call/params_one.carbon index 5204b374ea18..7697c0391695 100644 --- a/toolchain/check/testdata/function/call/params_one.carbon +++ b/toolchain/check/testdata/function/call/params_one.carbon @@ -20,6 +20,7 @@ fn Main() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -56,8 +57,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/call/params_one_comma.carbon b/toolchain/check/testdata/function/call/params_one_comma.carbon index 41864b861abe..f6c18abeba94 100644 --- a/toolchain/check/testdata/function/call/params_one_comma.carbon +++ b/toolchain/check/testdata/function/call/params_one_comma.carbon @@ -21,6 +21,7 @@ fn Main() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -57,8 +58,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/call/params_two.carbon b/toolchain/check/testdata/function/call/params_two.carbon index 6eddf9b58ec9..bf4d00034250 100644 --- a/toolchain/check/testdata/function/call/params_two.carbon +++ b/toolchain/check/testdata/function/call/params_two.carbon @@ -20,6 +20,7 @@ fn Main() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -60,10 +61,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11_11: type = splice_block %i32.loc11_11 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/call/params_two_comma.carbon b/toolchain/check/testdata/function/call/params_two_comma.carbon index 699db6028b90..81c961c871e2 100644 --- a/toolchain/check/testdata/function/call/params_two_comma.carbon +++ b/toolchain/check/testdata/function/call/params_two_comma.carbon @@ -21,6 +21,7 @@ fn Main() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -61,10 +62,10 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11_11: type = splice_block %i32.loc11_11 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon b/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon index db2feb0652f8..83a611fa06f5 100644 --- a/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon +++ b/toolchain/check/testdata/function/call/prefer_unqualified_lookup.carbon @@ -27,13 +27,15 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %F.8b3: type = bind_symbolic_name F, 0 [symbolic] -// CHECK:STDOUT: %F.patt: type = symbolic_binding_pattern F, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %F.patt: %pattern_type.98f = symbolic_binding_pattern F, 0 [symbolic] // CHECK:STDOUT: %Class.type: type = generic_class_type @Class [concrete] // CHECK:STDOUT: %Class.generic: %Class.type = struct_value () [concrete] // CHECK:STDOUT: %Class: type = class_type @Class, @Class(%F.8b3) [symbolic] // CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%F.8b3) [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F, @Inner(%F.8b3) [symbolic] // CHECK:STDOUT: %F.3fa: %F.type = struct_value () [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G, @Inner(%F.8b3) [symbolic] @@ -72,13 +74,13 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] { -// CHECK:STDOUT: %F.patt.loc5_13.1: type = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc5_13.2 (constants.%F.patt)] +// CHECK:STDOUT: %F.patt.loc5_13.1: %pattern_type.98f = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc5_13.2 (constants.%F.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %F.loc5_13.1: type = bind_symbolic_name F, 0 [symbolic = %F.loc5_13.2 (constants.%F.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: @Inner.%G.type (%G.type) = fn_decl @G [symbolic = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %F.loc13_10: type = bind_symbolic_name F, 0 [symbolic = @Class.%F.loc5_13.2 (constants.%F.8b3)] // CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -90,7 +92,7 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: // CHECK:STDOUT: generic class @Class(%F.loc5_13.1: type) { // CHECK:STDOUT: %F.loc5_13.2: type = bind_symbolic_name F, 0 [symbolic = %F.loc5_13.2 (constants.%F.8b3)] -// CHECK:STDOUT: %F.patt.loc5_13.2: type = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc5_13.2 (constants.%F.patt)] +// CHECK:STDOUT: %F.patt.loc5_13.2: %pattern_type.98f = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc5_13.2 (constants.%F.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner: type = class_type @Inner, @Inner(%F.loc5_13.2) [symbolic = %Inner (constants.%Inner)] @@ -117,8 +119,8 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @Inner.%F.type (%F.type) = fn_decl @F [symbolic = @Inner.%F.loc8_19.2 (constants.%F.3fa)] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -126,8 +128,8 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); } // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: @Inner.%G.type (%G.type) = fn_decl @G [symbolic = @Inner.%G (constants.%G)] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc9: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc9: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/function/declaration/fail_param_in_type.carbon b/toolchain/check/testdata/function/declaration/fail_param_in_type.carbon index bcfc7d0e0946..9bdb7735ab8f 100644 --- a/toolchain/check/testdata/function/declaration/fail_param_in_type.carbon +++ b/toolchain/check/testdata/function/declaration/fail_param_in_type.carbon @@ -19,6 +19,7 @@ fn F(n: i32, a: array(i32, n)*); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -38,8 +39,8 @@ fn F(n: i32, a: array(i32, n)*); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: %a.patt: = binding_pattern a // CHECK:STDOUT: %a.param_patt: = value_param_pattern %a.patt, call_param1 [concrete = ] // CHECK:STDOUT: } { diff --git a/toolchain/check/testdata/function/declaration/fail_param_redecl.carbon b/toolchain/check/testdata/function/declaration/fail_param_redecl.carbon index 71102f798750..ebe9025ad706 100644 --- a/toolchain/check/testdata/function/declaration/fail_param_redecl.carbon +++ b/toolchain/check/testdata/function/declaration/fail_param_redecl.carbon @@ -22,6 +22,7 @@ fn F(n: i32, n: i32); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -41,10 +42,10 @@ fn F(n: i32, n: i32); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %n.patt.loc18_6: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt.loc18_7: %i32 = value_param_pattern %n.patt.loc18_6, call_param0 -// CHECK:STDOUT: %n.patt.loc18_14: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt.loc18_15: %i32 = value_param_pattern %n.patt.loc18_14, call_param1 +// CHECK:STDOUT: %n.patt.loc18_6: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt.loc18_7: %pattern_type.7ce = value_param_pattern %n.patt.loc18_6, call_param0 +// CHECK:STDOUT: %n.patt.loc18_14: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt.loc18_15: %pattern_type.7ce = value_param_pattern %n.patt.loc18_14, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param.loc18_7: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc18_9: type = splice_block %i32.loc18_9 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/declaration/import.carbon b/toolchain/check/testdata/function/declaration/import.carbon index f6ca40295ec3..48e73ecdf96f 100644 --- a/toolchain/check/testdata/function/declaration/import.carbon +++ b/toolchain/check/testdata/function/declaration/import.carbon @@ -263,11 +263,14 @@ import library "extern_api"; // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.688: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] @@ -296,10 +299,10 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc5_17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -313,10 +316,10 @@ import library "extern_api"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %c.patt: %tuple.type.a1c = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %tuple.type.a1c = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %struct_type.c = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.c = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.b74 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.b74 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.688 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.688 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -356,11 +359,14 @@ import library "extern_api"; // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.688: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] @@ -389,10 +395,10 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc5_52: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_52: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -406,10 +412,10 @@ import library "extern_api"; // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %c.patt: %tuple.type.a1c = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %tuple.type.a1c = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %struct_type.c = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.c = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.b74 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.b74 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.688 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.688 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6_60: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6_60: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -446,10 +452,12 @@ import library "extern_api"; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -466,6 +474,7 @@ import library "extern_api"; // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.688: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] @@ -512,8 +521,8 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc6_1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -522,8 +531,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc7_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc7_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc7_8: type = splice_block %i32.loc7 [concrete = constants.%i32] { @@ -532,8 +541,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %struct_type.c = binding_pattern c -// CHECK:STDOUT: %.loc8_1: %struct_type.c = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c +// CHECK:STDOUT: %.loc8_1: %pattern_type.688 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var c // CHECK:STDOUT: %.loc8_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -543,8 +552,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %empty_tuple.type = binding_pattern d -// CHECK:STDOUT: %.loc9_1: %empty_tuple.type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d +// CHECK:STDOUT: %.loc9_1: %pattern_type.cb1 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d // CHECK:STDOUT: %.loc9_9.1: type = splice_block %.loc9_9.3 [concrete = constants.%empty_tuple.type] { @@ -553,8 +562,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %empty_tuple.type = binding_pattern e -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e +// CHECK:STDOUT: %.loc10_1: %pattern_type.cb1 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -622,17 +631,20 @@ import library "extern_api"; // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.688: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] // CHECK:STDOUT: %D: %D.type = struct_value () [concrete] // CHECK:STDOUT: %E.type: type = fn_type @E [concrete] // CHECK:STDOUT: %E: %E.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -710,8 +722,8 @@ import library "extern_api"; // CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %E.decl: %E.type = fn_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc52_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] { @@ -720,8 +732,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc53_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc53_8: type = splice_block %i32.loc53 [concrete = constants.%i32] { @@ -730,8 +742,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %struct_type.c = binding_pattern c -// CHECK:STDOUT: %.loc54_1: %struct_type.c = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c +// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var c // CHECK:STDOUT: %.loc54_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -741,8 +753,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %empty_tuple.type = binding_pattern d -// CHECK:STDOUT: %.loc55_1: %empty_tuple.type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d +// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d // CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] { @@ -751,8 +763,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %empty_tuple.type = binding_pattern e -// CHECK:STDOUT: %.loc56_1: %empty_tuple.type = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e +// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e // CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] { @@ -822,15 +834,18 @@ import library "extern_api"; // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.501: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.dd4: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.f5f: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] // CHECK:STDOUT: %D: %D.type = struct_value () [concrete] // CHECK:STDOUT: %E.type: type = fn_type @E [concrete] // CHECK:STDOUT: %E: %E.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.9ba: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.6da: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -908,8 +923,8 @@ import library "extern_api"; // CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %E.decl: %E.type = fn_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc12_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc12_1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc12_9.1: type = splice_block %.loc12_9.3 [concrete = constants.%empty_tuple.type] { @@ -918,8 +933,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc13_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.501 = binding_pattern b +// CHECK:STDOUT: %.loc13_1: %pattern_type.501 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc13_8: type = splice_block %i32.loc13 [concrete = constants.%i32] { @@ -928,8 +943,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %struct_type.c = binding_pattern c -// CHECK:STDOUT: %.loc14_1: %struct_type.c = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.f5f = binding_pattern c +// CHECK:STDOUT: %.loc14_1: %pattern_type.f5f = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var c // CHECK:STDOUT: %.loc14_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -939,8 +954,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %empty_tuple.type = binding_pattern d -// CHECK:STDOUT: %.loc15_1: %empty_tuple.type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d +// CHECK:STDOUT: %.loc15_1: %pattern_type.cb1 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d // CHECK:STDOUT: %.loc15_9.1: type = splice_block %.loc15_9.3 [concrete = constants.%empty_tuple.type] { @@ -949,8 +964,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %empty_tuple.type = binding_pattern e -// CHECK:STDOUT: %.loc16_1: %empty_tuple.type = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e +// CHECK:STDOUT: %.loc16_1: %pattern_type.cb1 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e // CHECK:STDOUT: %.loc16_9.1: type = splice_block %.loc16_9.3 [concrete = constants.%empty_tuple.type] { @@ -1014,10 +1029,12 @@ import library "extern_api"; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -1034,6 +1051,7 @@ import library "extern_api"; // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.688: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] @@ -1080,8 +1098,8 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc52_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] { @@ -1090,8 +1108,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc53_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc53_8: type = splice_block %i32.loc53 [concrete = constants.%i32] { @@ -1100,8 +1118,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %struct_type.c = binding_pattern c -// CHECK:STDOUT: %.loc54_1: %struct_type.c = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c +// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var c // CHECK:STDOUT: %.loc54_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -1111,8 +1129,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %empty_tuple.type = binding_pattern d -// CHECK:STDOUT: %.loc55_1: %empty_tuple.type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d +// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d // CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] { @@ -1121,8 +1139,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %empty_tuple.type = binding_pattern e -// CHECK:STDOUT: %.loc56_1: %empty_tuple.type = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e +// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e // CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] { @@ -1186,10 +1204,12 @@ import library "extern_api"; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -1206,6 +1226,7 @@ import library "extern_api"; // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.688: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] @@ -1252,8 +1273,8 @@ import library "extern_api"; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc52_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] { @@ -1262,8 +1283,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc53_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc53_8: type = splice_block %i32.loc53 [concrete = constants.%i32] { @@ -1272,8 +1293,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %struct_type.c = binding_pattern c -// CHECK:STDOUT: %.loc54_1: %struct_type.c = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c +// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var c // CHECK:STDOUT: %.loc54_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { @@ -1283,8 +1304,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %empty_tuple.type = binding_pattern d -// CHECK:STDOUT: %.loc55_1: %empty_tuple.type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d +// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d // CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] { @@ -1293,8 +1314,8 @@ import library "extern_api"; // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %empty_tuple.type = binding_pattern e -// CHECK:STDOUT: %.loc56_1: %empty_tuple.type = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e +// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e // CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/declaration/min_prelude/fail_import_incomplete_return.carbon b/toolchain/check/testdata/function/declaration/min_prelude/fail_import_incomplete_return.carbon index d02492b23d7a..435d22a1e698 100644 --- a/toolchain/check/testdata/function/declaration/min_prelude/fail_import_incomplete_return.carbon +++ b/toolchain/check/testdata/function/declaration/min_prelude/fail_import_incomplete_return.carbon @@ -92,10 +92,12 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %ReturnCUnused.type: type = fn_type @ReturnCUnused [concrete] // CHECK:STDOUT: %ReturnCUnused: %ReturnCUnused.type = struct_value () [concrete] // CHECK:STDOUT: %ReturnCUsed.type: type = fn_type @ReturnCUsed [concrete] // CHECK:STDOUT: %ReturnCUsed: %ReturnCUsed.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %ReturnDUnused.type: type = fn_type @ReturnDUnused [concrete] // CHECK:STDOUT: %ReturnDUnused: %ReturnDUnused.type = struct_value () [concrete] // CHECK:STDOUT: %ReturnDUsed.type: type = fn_type @ReturnDUsed [concrete] @@ -127,32 +129,32 @@ fn CallFAndGIncomplete() { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %D.decl.loc5: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %ReturnCUnused.decl: %ReturnCUnused.type = fn_decl @ReturnCUnused [concrete = constants.%ReturnCUnused] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ReturnCUsed.decl: %ReturnCUsed.type = fn_decl @ReturnCUsed [concrete = constants.%ReturnCUsed] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ReturnDUnused.decl: %ReturnDUnused.type = fn_decl @ReturnDUnused [concrete = constants.%ReturnDUnused] { -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl.loc5 [concrete = constants.%D] // CHECK:STDOUT: %return.param: ref %D = out_param call_param0 // CHECK:STDOUT: %return: ref %D = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ReturnDUsed.decl: %ReturnDUsed.type = fn_decl @ReturnDUsed [concrete = constants.%ReturnDUsed] { -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl.loc5 [concrete = constants.%D] // CHECK:STDOUT: %return.param: ref %D = out_param call_param0 diff --git a/toolchain/check/testdata/function/declaration/no_prelude/export_name.carbon b/toolchain/check/testdata/function/declaration/no_prelude/export_name.carbon index 1b89236ac06b..a1e4e4dba4a3 100644 --- a/toolchain/check/testdata/function/declaration/no_prelude/export_name.carbon +++ b/toolchain/check/testdata/function/declaration/no_prelude/export_name.carbon @@ -79,6 +79,7 @@ var f: () = F(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -94,8 +95,8 @@ var f: () = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/declaration/no_prelude/extern.carbon b/toolchain/check/testdata/function/declaration/no_prelude/extern.carbon index fd0cd763e7e7..d3d5b988a80a 100644 --- a/toolchain/check/testdata/function/declaration/no_prelude/extern.carbon +++ b/toolchain/check/testdata/function/declaration/no_prelude/extern.carbon @@ -101,6 +101,7 @@ extern library "basic" fn F(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -116,8 +117,8 @@ extern library "basic" fn F(); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -177,6 +178,7 @@ extern library "basic" fn F(); // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -193,8 +195,8 @@ extern library "basic" fn F(); // CHECK:STDOUT: class @C { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] diff --git a/toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon b/toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon index 9bb9817b35a1..76b1629af207 100644 --- a/toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon +++ b/toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon @@ -18,7 +18,9 @@ fn F((a: {}, b: {}), c: {}); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -28,13 +30,13 @@ fn F((a: {}, b: {}), c: {}); // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %empty_struct_type = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %empty_struct_type = value_param_pattern %a.patt, call_param -// CHECK:STDOUT: %b.patt: %empty_struct_type = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %empty_struct_type = value_param_pattern %b.patt, call_param -// CHECK:STDOUT: %.loc15_19: %tuple.type = tuple_pattern (%a.param_patt, %b.param_patt) -// CHECK:STDOUT: %c.patt: %empty_struct_type = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %empty_struct_type = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.a96 = value_param_pattern %a.patt, call_param +// CHECK:STDOUT: %b.patt: %pattern_type.a96 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.a96 = value_param_pattern %b.patt, call_param +// CHECK:STDOUT: %.loc15_19: %pattern_type.de4 = tuple_pattern (%a.param_patt, %b.param_patt) +// CHECK:STDOUT: %c.patt: %pattern_type.a96 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.a96 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc15_26.1: type = splice_block %.loc15_26.3 [concrete = constants.%empty_struct_type] { diff --git a/toolchain/check/testdata/function/declaration/no_prelude/fail_redecl.carbon b/toolchain/check/testdata/function/declaration/no_prelude/fail_redecl.carbon index e0c3472dd424..4c99979ec5a9 100644 --- a/toolchain/check/testdata/function/declaration/no_prelude/fail_redecl.carbon +++ b/toolchain/check/testdata/function/declaration/no_prelude/fail_redecl.carbon @@ -64,6 +64,7 @@ fn E() {} // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %C.type.de0bfe.1: type = fn_type @C.1 [concrete] @@ -89,8 +90,8 @@ fn E() {} // CHECK:STDOUT: %A.decl.loc11: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %A.decl.loc19: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl.loc21: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc21: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc21_10.1: type = splice_block %.loc21_10.3 [concrete = constants.%empty_tuple.type] { @@ -100,8 +101,8 @@ fn E() {} // CHECK:STDOUT: %x.loc21: %empty_tuple.type = bind_name x, %x.param.loc21 // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl.loc29: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc29: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc29_10.1: type = splice_block %.loc29_10.3 [concrete = constants.%empty_tuple.type] { @@ -112,8 +113,8 @@ fn E() {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc31: %C.type.de0bfe.1 = fn_decl @C.1 [concrete = constants.%C.1b0370.1] {} {} // CHECK:STDOUT: %C.decl.loc39: %C.type.de0bfe.2 = fn_decl @C.2 [concrete = constants.%C.1b0370.2] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc39_10.1: type = splice_block %.loc39_10.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/declaration/no_prelude/fail_todo_no_params.carbon b/toolchain/check/testdata/function/declaration/no_prelude/fail_todo_no_params.carbon index a66c23e98a17..e8e20ded68a6 100644 --- a/toolchain/check/testdata/function/declaration/no_prelude/fail_todo_no_params.carbon +++ b/toolchain/check/testdata/function/declaration/no_prelude/fail_todo_no_params.carbon @@ -116,6 +116,7 @@ fn A { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -125,8 +126,8 @@ fn A { // CHECK:STDOUT: .A = %A.decl // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_10.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc7_10.2: type = converted %.loc7_10.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -141,6 +142,7 @@ fn A { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -150,8 +152,8 @@ fn A { // CHECK:STDOUT: .A = %A.decl // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_12.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc7_12.2: type = converted %.loc7_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/function/declaration/param_same_name.carbon b/toolchain/check/testdata/function/declaration/param_same_name.carbon index 2bd4fd4466e7..f9f31197a9bb 100644 --- a/toolchain/check/testdata/function/declaration/param_same_name.carbon +++ b/toolchain/check/testdata/function/declaration/param_same_name.carbon @@ -17,6 +17,7 @@ fn G(a: i32); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -39,8 +40,8 @@ fn G(a: i32); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] { @@ -50,8 +51,8 @@ fn G(a: i32); // CHECK:STDOUT: %a: %i32 = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc13: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/definition/import.carbon b/toolchain/check/testdata/function/definition/import.carbon index f79c8ef371ce..7a67e950f0e0 100644 --- a/toolchain/check/testdata/function/definition/import.carbon +++ b/toolchain/check/testdata/function/definition/import.carbon @@ -117,11 +117,14 @@ fn D() {} // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.688: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -148,10 +151,10 @@ fn D() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc5_17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -165,10 +168,10 @@ fn D() {} // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %c.patt: %tuple.type.a1c = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %tuple.type.a1c = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %struct_type.c = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.c = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.b74 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.b74 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.688 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.688 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -240,10 +243,12 @@ fn D() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -260,6 +265,7 @@ fn D() {} // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.688: type = pattern_type %struct_type.c [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C [concrete] // CHECK:STDOUT: %C: %C.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] @@ -294,8 +300,8 @@ fn D() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc6_1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -304,8 +310,8 @@ fn D() {} // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc7_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc7_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc7_8: type = splice_block %i32.loc7 [concrete = constants.%i32] { @@ -314,8 +320,8 @@ fn D() {} // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %struct_type.c = binding_pattern c -// CHECK:STDOUT: %.loc8_1: %struct_type.c = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c +// CHECK:STDOUT: %.loc8_1: %pattern_type.688 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.c = var c // CHECK:STDOUT: %.loc8_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] { diff --git a/toolchain/check/testdata/function/definition/import_access.carbon b/toolchain/check/testdata/function/definition/import_access.carbon index ef0b086d6307..f4bffe657de3 100644 --- a/toolchain/check/testdata/function/definition/import_access.carbon +++ b/toolchain/check/testdata/function/definition/import_access.carbon @@ -222,6 +222,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Def.type: type = fn_type @Def [concrete] // CHECK:STDOUT: %Def: %Def.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -244,8 +245,8 @@ private fn Redecl() {} // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -269,6 +270,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -287,8 +289,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -309,6 +311,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -331,8 +334,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -354,6 +357,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %ForwardWithDef.type: type = fn_type @ForwardWithDef [concrete] // CHECK:STDOUT: %ForwardWithDef: %ForwardWithDef.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -376,8 +380,8 @@ private fn Redecl() {} // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -401,6 +405,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -419,8 +424,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -441,6 +446,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -463,8 +469,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -486,6 +492,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Forward.type: type = fn_type @Forward [concrete] // CHECK:STDOUT: %Forward: %Forward.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -508,8 +515,8 @@ private fn Redecl() {} // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -537,6 +544,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -555,8 +563,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -577,6 +585,7 @@ private fn Redecl() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -599,8 +608,8 @@ private fn Redecl() {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %empty_tuple.type = binding_pattern f -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/function/definition/min_prelude/fail_local_decl.carbon b/toolchain/check/testdata/function/definition/min_prelude/fail_local_decl.carbon index b03bb1c66b0a..d07a62c34f52 100644 --- a/toolchain/check/testdata/function/definition/min_prelude/fail_local_decl.carbon +++ b/toolchain/check/testdata/function/definition/min_prelude/fail_local_decl.carbon @@ -98,6 +98,7 @@ fn F() { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -118,8 +119,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %empty_struct_type = binding_pattern v -// CHECK:STDOUT: %.loc9_11: %empty_struct_type = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type = binding_pattern v +// CHECK:STDOUT: %.loc9_11: %pattern_type = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_struct_type = var v // CHECK:STDOUT: %.loc9_19.1: type = splice_block %.loc9_19.3 [concrete = constants.%empty_struct_type] { @@ -128,8 +129,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %empty_struct_type = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %empty_struct_type = binding_pattern w -// CHECK:STDOUT: %.loc14_13: %empty_struct_type = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type = binding_pattern w +// CHECK:STDOUT: %.loc14_13: %pattern_type = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %empty_struct_type = var w // CHECK:STDOUT: %.loc14_21.1: type = splice_block %.loc14_21.3 [concrete = constants.%empty_struct_type] { diff --git a/toolchain/check/testdata/function/definition/no_prelude/basics.carbon b/toolchain/check/testdata/function/definition/no_prelude/basics.carbon index 1fdc28ae3990..aba0fb4da468 100644 --- a/toolchain/check/testdata/function/definition/no_prelude/basics.carbon +++ b/toolchain/check/testdata/function/definition/no_prelude/basics.carbon @@ -26,6 +26,7 @@ fn F(n: C) {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -37,8 +38,8 @@ fn F(n: C) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %n.patt: %C = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %C = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/function/definition/no_prelude/fail_decl_param_mismatch.carbon b/toolchain/check/testdata/function/definition/no_prelude/fail_decl_param_mismatch.carbon index baad5522c60d..37a05dc597ae 100644 --- a/toolchain/check/testdata/function/definition/no_prelude/fail_decl_param_mismatch.carbon +++ b/toolchain/check/testdata/function/definition/no_prelude/fail_decl_param_mismatch.carbon @@ -71,6 +71,7 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %F.type.b25846.1: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.c41931.1: %F.type.b25846.1 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type.b25846.2: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41931.2: %F.type.b25846.2 = struct_value () [concrete] // CHECK:STDOUT: %G.type.9f9306.1: type = fn_type @G.1 [concrete] @@ -93,6 +94,7 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %K.type.6cc1c5.1: type = fn_type @K.1 [concrete] // CHECK:STDOUT: %K.460d95.1: %K.type.6cc1c5.1 = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %K.type.6cc1c5.2: type = fn_type @K.2 [concrete] // CHECK:STDOUT: %K.460d95.2: %K.type.6cc1c5.2 = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] @@ -109,8 +111,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc11: %F.type.b25846.1 = fn_decl @F.1 [concrete = constants.%F.c41931.1] {} {} // CHECK:STDOUT: %F.decl.loc19: %F.type.b25846.2 = fn_decl @F.2 [concrete = constants.%F.c41931.2] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc19_10.1: type = splice_block %.loc19_10.3 [concrete = constants.%empty_tuple.type] { @@ -120,8 +122,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %x: %empty_tuple.type = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl.loc21: %G.type.9f9306.1 = fn_decl @G.1 [concrete = constants.%G.57b67a.1] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc21_10.1: type = splice_block %.loc21_10.3 [concrete = constants.%empty_tuple.type] { @@ -132,8 +134,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl.loc29: %G.type.9f9306.2 = fn_decl @G.2 [concrete = constants.%G.57b67a.2] {} {} // CHECK:STDOUT: %H.decl.loc31: %H.type.6826c6.1 = fn_decl @H.1 [concrete = constants.%H.8a6545.1] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc31_10.1: type = splice_block %.loc31_10.3 [concrete = constants.%empty_tuple.type] { @@ -151,8 +153,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl.loc38: %I.type.af49c4.1 = fn_decl @I.1 [concrete = constants.%I.58e4ec.1] {} {} // CHECK:STDOUT: %I.decl.loc46: %I.type.af49c4.2 = fn_decl @I.2 [concrete = constants.%I.58e4ec.2] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc46_12.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc46_12.2: type = converted %.loc46_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -160,8 +162,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %J.decl.loc48: %J.type.8e2c84.1 = fn_decl @J.1 [concrete = constants.%J.3662e8.1] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc48_12.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc48_12.2: type = converted %.loc48_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -170,8 +172,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: } // CHECK:STDOUT: %J.decl.loc56: %J.type.8e2c84.2 = fn_decl @J.2 [concrete = constants.%J.3662e8.2] {} {} // CHECK:STDOUT: %K.decl.loc58: %K.type.6cc1c5.1 = fn_decl @K.1 [concrete = constants.%K.460d95.1] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc58_12.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc58_12.2: type = converted %.loc58_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -179,8 +181,8 @@ fn K() -> {} { return {}; } // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %K.decl.loc66: %K.type.6cc1c5.2 = fn_decl @K.2 [concrete = constants.%K.460d95.2] { -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc66_12.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc66_12.2: type = converted %.loc66_12.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/function/definition/no_prelude/syntactic_merge.carbon b/toolchain/check/testdata/function/definition/no_prelude/syntactic_merge.carbon index 5bd213da48ea..eac025827285 100644 --- a/toolchain/check/testdata/function/definition/no_prelude/syntactic_merge.carbon +++ b/toolchain/check/testdata/function/definition/no_prelude/syntactic_merge.carbon @@ -200,6 +200,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Bar.type: type = fn_type @Bar [concrete] @@ -217,32 +218,32 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc7: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7: %C = bind_name a, %a.param.loc7 // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc8: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc8: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc8: %C = bind_name a, %a.param.loc8 // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc10: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc10: %C = value_param call_param0 // CHECK:STDOUT: %D.ref.loc10: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc10: %C = bind_name a, %a.param.loc10 // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc11: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc11: %C = value_param call_param0 // CHECK:STDOUT: %D.ref.loc11: type = name_ref D, file.%D [concrete = constants.%C] @@ -275,6 +276,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -286,16 +288,16 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc6: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6: %C = bind_name a, %a.param.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc7: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -323,6 +325,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type.a02530.1: type = fn_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.ddeb7d.1: %Foo.type.a02530.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.a02530.2: type = fn_type @Foo.2 [concrete] @@ -336,16 +339,16 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.a02530.1 = fn_decl @Foo.1 [concrete = constants.%Foo.ddeb7d.1] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.a02530.2 = fn_decl @Foo.2 [concrete = constants.%Foo.ddeb7d.2] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -413,6 +416,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -424,16 +428,16 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc6: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6: %C = bind_name a, %a.param.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param.loc7: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -461,6 +465,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Bar.type: type = fn_type @Bar [concrete] @@ -478,16 +483,16 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] @@ -514,6 +519,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Bar.type: type = fn_type @Bar [concrete] @@ -537,16 +543,16 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %default.import.loc2_24.1 = import // CHECK:STDOUT: %default.import.loc2_24.2 = import // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %a: %C = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] @@ -577,6 +583,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type.a02530.1: type = fn_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.ddeb7d.1: %Foo.type.a02530.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.a02530.2: type = fn_type @Foo.2 [concrete] @@ -593,16 +600,16 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.a02530.1 = fn_decl @Foo.1 [concrete = constants.%Foo.ddeb7d.1] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.a02530.2 = fn_decl @Foo.2 [concrete = constants.%Foo.ddeb7d.2] { -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] @@ -632,6 +639,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type.a02530.1: type = fn_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.ddeb7d.1: %Foo.type.a02530.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.a02530.2: type = fn_type @Foo.2 [concrete] @@ -648,16 +656,16 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.a02530.1 = fn_decl @Foo.1 [concrete = constants.%Foo.ddeb7d.1] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.a02530.2 = fn_decl @Foo.2 [concrete = constants.%Foo.ddeb7d.2] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] @@ -688,7 +696,8 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.a02530.1: type = fn_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.ddeb7d.1: %Foo.type.a02530.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.a02530.2: type = fn_type @Foo.2 [concrete] @@ -705,13 +714,13 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.a02530.1 = fn_decl @Foo.1 [concrete = constants.%Foo.ddeb7d.1] { -// CHECK:STDOUT: %a.patt.loc7_8.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_8.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_8.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_8.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_8.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_8.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.a02530.2 = fn_decl @Foo.2 [concrete = constants.%Foo.ddeb7d.2] { -// CHECK:STDOUT: %a.patt.loc15_8.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_8.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_8.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_8.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc15_8.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_8.2 (constants.%a)] @@ -729,14 +738,14 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Foo.1(%a.loc7_8.1: %C) { // CHECK:STDOUT: %a.loc7_8.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_8.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_8.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_8.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_8.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_8.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Foo.2(%a.loc15_8.1: %C) { // CHECK:STDOUT: %a.loc15_8.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_8.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc15_8.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_8.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_8.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_8.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -762,6 +771,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] @@ -777,16 +787,16 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param.loc7: ref %C = out_param call_param0 // CHECK:STDOUT: %return.loc7: ref %C = return_slot %return.param.loc7 // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc8: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %return.param.loc8: ref %C = out_param call_param0 @@ -817,6 +827,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -828,8 +839,8 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -854,6 +865,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -875,8 +887,8 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] @@ -903,6 +915,7 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %const: type = const_type %C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %const [concrete] // CHECK:STDOUT: %Foo.type.a02530.1: type = fn_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.ddeb7d.1: %Foo.type.a02530.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.a02530.2: type = fn_type @Foo.2 [concrete] @@ -916,8 +929,8 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.a02530.1 = fn_decl @Foo.1 [concrete = constants.%Foo.ddeb7d.1] { -// CHECK:STDOUT: %a.patt: %const = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %const = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %const = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %const [concrete = constants.%const] { @@ -927,8 +940,8 @@ fn Foo(a: const (const C)) {} // CHECK:STDOUT: %a: %const = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc18: %Foo.type.a02530.2 = fn_decl @Foo.2 [concrete = constants.%Foo.ddeb7d.2] { -// CHECK:STDOUT: %a.patt: %const = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %const = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %const = value_param call_param0 // CHECK:STDOUT: %.loc18: type = splice_block %const.loc18_11 [concrete = constants.%const] { diff --git a/toolchain/check/testdata/function/definition/params_one.carbon b/toolchain/check/testdata/function/definition/params_one.carbon index 728cc02e335e..0f6083e8d727 100644 --- a/toolchain/check/testdata/function/definition/params_one.carbon +++ b/toolchain/check/testdata/function/definition/params_one.carbon @@ -15,6 +15,7 @@ fn Foo(a: i32) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -34,8 +35,8 @@ fn Foo(a: i32) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/definition/params_one_comma.carbon b/toolchain/check/testdata/function/definition/params_one_comma.carbon index ce8167dbf076..832f743ae719 100644 --- a/toolchain/check/testdata/function/definition/params_one_comma.carbon +++ b/toolchain/check/testdata/function/definition/params_one_comma.carbon @@ -15,6 +15,7 @@ fn Foo(a: i32,) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -34,8 +35,8 @@ fn Foo(a: i32,) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/definition/params_two.carbon b/toolchain/check/testdata/function/definition/params_two.carbon index 6d85273b85f2..643836d2ec0e 100644 --- a/toolchain/check/testdata/function/definition/params_two.carbon +++ b/toolchain/check/testdata/function/definition/params_two.carbon @@ -15,6 +15,7 @@ fn Foo(a: i32, b: i32) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -34,10 +35,10 @@ fn Foo(a: i32, b: i32) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11_11: type = splice_block %i32.loc11_11 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/definition/params_two_comma.carbon b/toolchain/check/testdata/function/definition/params_two_comma.carbon index cc60c89cb9e8..b80df7ecd8c6 100644 --- a/toolchain/check/testdata/function/definition/params_two_comma.carbon +++ b/toolchain/check/testdata/function/definition/params_two_comma.carbon @@ -15,6 +15,7 @@ fn Foo(a: i32, b: i32,) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -34,10 +35,10 @@ fn Foo(a: i32, b: i32,) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11_11: type = splice_block %i32.loc11_11 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon b/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon index 675a9b1ed43e..a3036d8879d9 100644 --- a/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon +++ b/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon @@ -38,7 +38,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Scalar: type = bind_symbolic_name Scalar, 0 [symbolic] -// CHECK:STDOUT: %Scalar.patt: type = symbolic_binding_pattern Scalar, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Scalar.patt: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic] // CHECK:STDOUT: %Generic.type.c21: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type.c21 = struct_value () [concrete] @@ -73,10 +74,11 @@ fn G() { // CHECK:STDOUT: %G.b67: %G.type.58d = struct_value () [concrete] // CHECK:STDOUT: %Other.facet: %Other.type = facet_value %ImplsGeneric, (%Other.impl_witness) [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.91ccba.2: type = facet_type <@Generic, @Generic(%T)> [symbolic] // CHECK:STDOUT: %U: %Generic.type.91ccba.2 = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt.9a6: %Generic.type.91ccba.2 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.80f: type = pattern_type %Generic.type.91ccba.2 [symbolic] +// CHECK:STDOUT: %U.patt.5df: %pattern_type.80f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.type: type = fn_type @CallGenericMethod [concrete] // CHECK:STDOUT: %CallGenericMethod: %CallGenericMethod.type = struct_value () [concrete] // CHECK:STDOUT: %Self.dee8d8.2: %Generic.type.91ccba.2 = bind_symbolic_name Self, 1 [symbolic] @@ -93,7 +95,8 @@ fn G() { // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @F.1(%T, %Generic.facet.680) [symbolic] // CHECK:STDOUT: %G.type.9f9: type = fn_type @G.3 [concrete] // CHECK:STDOUT: %G.57b: %G.type.9f9 = struct_value () [concrete] -// CHECK:STDOUT: %U.patt.8ea: %Generic.type.769 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.ded: type = pattern_type %Generic.type.769 [concrete] +// CHECK:STDOUT: %U.patt.559: %pattern_type.ded = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %CallGenericMethod.specific_fn: = specific_function %CallGenericMethod, @CallGenericMethod(%GenericParam, %Generic.facet.8ff) [concrete] // CHECK:STDOUT: %complete_type.997: = complete_type_witness %Generic.type.769 [concrete] // CHECK:STDOUT: %.3e6: type = fn_type_with_self_type %F.type.4cf, %Generic.facet.8ff [concrete] @@ -118,7 +121,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Generic.decl: %Generic.type.c21 = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %Scalar.patt.loc11_19.1: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc11_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc11_19.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc11_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Scalar.loc11_19.1: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc11_19.2 (constants.%Scalar)] // CHECK:STDOUT: } @@ -140,8 +143,8 @@ fn G() { // CHECK:STDOUT: %Other.impl_witness_table = impl_witness_table (@impl.728.%G.decl), @impl.728 [concrete] // CHECK:STDOUT: %Other.impl_witness: = impl_witness %Other.impl_witness_table [concrete = constants.%Other.impl_witness] // CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] { -// CHECK:STDOUT: %T.patt.loc29_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc29_22.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc29_32.1: @CallGenericMethod.%Generic.type.loc29_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc29_32.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %T.patt.loc29_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc29_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc29_32.1: @CallGenericMethod.%pattern_type (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc29_32.2 (constants.%U.patt.5df)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc29_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc29_22.2 (constants.%T)] // CHECK:STDOUT: %.loc29: type = splice_block %Generic.type.loc29_45.1 [symbolic = %Generic.type.loc29_45.2 (constants.%Generic.type.91ccba.2)] { @@ -156,7 +159,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%Scalar.loc11_19.1: type) { // CHECK:STDOUT: %Scalar.loc11_19.2: type = bind_symbolic_name Scalar, 0 [symbolic = %Scalar.loc11_19.2 (constants.%Scalar)] -// CHECK:STDOUT: %Scalar.patt.loc11_19.2: type = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc11_19.2 (constants.%Scalar.patt)] +// CHECK:STDOUT: %Scalar.patt.loc11_19.2: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc11_19.2 (constants.%Scalar.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%Scalar.loc11_19.2)> [symbolic = %Generic.type (constants.%Generic.type.91ccba.1)] @@ -240,10 +243,11 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc29_22.1: type, %U.loc29_32.1: @CallGenericMethod.%Generic.type.loc29_45.2 (%Generic.type.91ccba.2)) { // CHECK:STDOUT: %T.loc29_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc29_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc29_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc29_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc29_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc29_22.2 (constants.%T.patt)] // CHECK:STDOUT: %Generic.type.loc29_45.2: type = facet_type <@Generic, @Generic(%T.loc29_22.2)> [symbolic = %Generic.type.loc29_45.2 (constants.%Generic.type.91ccba.2)] // CHECK:STDOUT: %U.loc29_32.2: @CallGenericMethod.%Generic.type.loc29_45.2 (%Generic.type.91ccba.2) = bind_symbolic_name U, 1 [symbolic = %U.loc29_32.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc29_32.2: @CallGenericMethod.%Generic.type.loc29_45.2 (%Generic.type.91ccba.2) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc29_32.2 (constants.%U.patt.9a6)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc29_45.2 [symbolic = %pattern_type (constants.%pattern_type.80f)] +// CHECK:STDOUT: %U.patt.loc29_32.2: @CallGenericMethod.%pattern_type (%pattern_type.80f) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc29_32.2 (constants.%U.patt.5df)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Generic.type.loc29_45.2 [symbolic = %require_complete (constants.%require_complete)] @@ -329,7 +333,8 @@ fn G() { // CHECK:STDOUT: %T.patt.loc29_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc29_45.2 => constants.%Generic.type.91ccba.2 // CHECK:STDOUT: %U.loc29_32.2 => constants.%U -// CHECK:STDOUT: %U.patt.loc29_32.2 => constants.%U.patt.9a6 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.80f +// CHECK:STDOUT: %U.patt.loc29_32.2 => constants.%U.patt.5df // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(@CallGenericMethod.%T.loc29_22.2) {} @@ -343,7 +348,8 @@ fn G() { // CHECK:STDOUT: %T.patt.loc29_22.2 => constants.%T.patt // CHECK:STDOUT: %Generic.type.loc29_45.2 => constants.%Generic.type.769 // CHECK:STDOUT: %U.loc29_32.2 => constants.%Generic.facet.8ff -// CHECK:STDOUT: %U.patt.loc29_32.2 => constants.%U.patt.8ea +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ded +// CHECK:STDOUT: %U.patt.loc29_32.2 => constants.%U.patt.559 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.997 diff --git a/toolchain/check/testdata/function/generic/deduce.carbon b/toolchain/check/testdata/function/generic/deduce.carbon index 8ba3277ff713..b1c3ef6c0518 100644 --- a/toolchain/check/testdata/function/generic/deduce.carbon +++ b/toolchain/check/testdata/function/generic/deduce.carbon @@ -238,8 +238,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %ExplicitGenericParam.type: type = fn_type @ExplicitGenericParam [concrete] // CHECK:STDOUT: %ExplicitGenericParam: %ExplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [symbolic] @@ -247,11 +249,13 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %CallExplicitGenericParam.type: type = fn_type @CallExplicitGenericParam [concrete] // CHECK:STDOUT: %CallExplicitGenericParam: %CallExplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %ExplicitGenericParam.specific_fn.74e: = specific_function %ExplicitGenericParam, @ExplicitGenericParam(%i32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T} [symbolic] // CHECK:STDOUT: %ptr.48a: type = ptr_type %struct_type.a [symbolic] +// CHECK:STDOUT: %pattern_type.322: type = pattern_type %ptr.48a [symbolic] // CHECK:STDOUT: %CallExplicitGenericParamWithGenericArg.type: type = fn_type @CallExplicitGenericParamWithGenericArg [concrete] // CHECK:STDOUT: %CallExplicitGenericParamWithGenericArg: %CallExplicitGenericParamWithGenericArg.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.86d: = require_complete_type %ptr.48a [symbolic] @@ -276,9 +280,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ExplicitGenericParam.decl: %ExplicitGenericParam.type = fn_decl @ExplicitGenericParam [concrete = constants.%ExplicitGenericParam] { -// CHECK:STDOUT: %T.patt.loc4_25.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] -// CHECK:STDOUT: %return.patt: @ExplicitGenericParam.%ptr.loc4_39.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @ExplicitGenericParam.%ptr.loc4_39.2 (%ptr.79f) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %return.patt: @ExplicitGenericParam.%pattern_type (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @ExplicitGenericParam.%pattern_type (%pattern_type.afe) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_38: type = name_ref T, %T.loc4_25.1 [symbolic = %T.loc4_25.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_39.1: type = ptr_type %T.ref.loc4_38 [symbolic = %ptr.loc4_39.2 (constants.%ptr.79f)] @@ -287,8 +291,8 @@ fn F() { // CHECK:STDOUT: %return: ref @ExplicitGenericParam.%ptr.loc4_39.2 (%ptr.79f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitGenericParam.decl: %CallExplicitGenericParam.type = fn_decl @CallExplicitGenericParam [concrete = constants.%CallExplicitGenericParam] { -// CHECK:STDOUT: %return.patt: %ptr.235 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.235 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.fe8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.fe8 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -297,9 +301,9 @@ fn F() { // CHECK:STDOUT: %return: ref %ptr.235 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitGenericParamWithGenericArg.decl: %CallExplicitGenericParamWithGenericArg.type = fn_decl @CallExplicitGenericParamWithGenericArg [concrete = constants.%CallExplicitGenericParamWithGenericArg] { -// CHECK:STDOUT: %T.patt.loc10_43.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_43.2 (constants.%T.patt)] -// CHECK:STDOUT: %return.patt: @CallExplicitGenericParamWithGenericArg.%ptr.loc10_63.2 (%ptr.48a) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @CallExplicitGenericParamWithGenericArg.%ptr.loc10_63.2 (%ptr.48a) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc10_43.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_43.2 (constants.%T.patt)] +// CHECK:STDOUT: %return.patt: @CallExplicitGenericParamWithGenericArg.%pattern_type (%pattern_type.322) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @CallExplicitGenericParamWithGenericArg.%pattern_type (%pattern_type.322) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc10: type = name_ref T, %T.loc10_43.1 [symbolic = %T.loc10_43.2 (constants.%T)] // CHECK:STDOUT: %struct_type.a.loc10_62.1: type = struct_type {.a: @CallExplicitGenericParamWithGenericArg.%T.loc10_43.2 (%T)} [symbolic = %struct_type.a.loc10_62.2 (constants.%struct_type.a)] @@ -312,8 +316,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ExplicitGenericParam(%T.loc4_25.1: type) { // CHECK:STDOUT: %T.loc4_25.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_25.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_25.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc4_39.2: type = ptr_type %T.loc4_25.2 [symbolic = %ptr.loc4_39.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_39.2 [symbolic = %pattern_type (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc4_39.2 [symbolic = %require_complete (constants.%require_complete.6e5)] @@ -345,9 +350,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallExplicitGenericParamWithGenericArg(%T.loc10_43.1: type) { // CHECK:STDOUT: %T.loc10_43.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc10_43.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc10_43.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_43.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc10_43.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_43.2 (constants.%T.patt)] // CHECK:STDOUT: %struct_type.a.loc10_62.2: type = struct_type {.a: @CallExplicitGenericParamWithGenericArg.%T.loc10_43.2 (%T)} [symbolic = %struct_type.a.loc10_62.2 (constants.%struct_type.a)] // CHECK:STDOUT: %ptr.loc10_63.2: type = ptr_type %struct_type.a.loc10_62.2 [symbolic = %ptr.loc10_63.2 (constants.%ptr.48a)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc10_63.2 [symbolic = %pattern_type (constants.%pattern_type.322)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc10_63.2 [symbolic = %require_complete (constants.%require_complete.86d)] @@ -370,6 +376,7 @@ fn F() { // CHECK:STDOUT: %T.loc4_25.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc4_39.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.6e5 @@ -382,6 +389,7 @@ fn F() { // CHECK:STDOUT: %T.loc4_25.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc4_39.2 => constants.%ptr.235 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fe8 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.3d0 @@ -393,12 +401,14 @@ fn F() { // CHECK:STDOUT: %T.patt.loc10_43.2 => constants.%T.patt // CHECK:STDOUT: %struct_type.a.loc10_62.2 => constants.%struct_type.a // CHECK:STDOUT: %ptr.loc10_63.2 => constants.%ptr.48a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.322 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ExplicitGenericParam(constants.%struct_type.a) { // CHECK:STDOUT: %T.loc4_25.2 => constants.%struct_type.a // CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc4_39.2 => constants.%ptr.48a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.322 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.86d @@ -411,8 +421,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr [symbolic] // CHECK:STDOUT: %ExplicitGenericParam.type: type = fn_type @ExplicitGenericParam [concrete] // CHECK:STDOUT: %ExplicitGenericParam: %ExplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr [symbolic] @@ -439,9 +451,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ExplicitGenericParam.decl: %ExplicitGenericParam.type = fn_decl @ExplicitGenericParam [concrete = constants.%ExplicitGenericParam] { -// CHECK:STDOUT: %T.patt.loc4_25.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] -// CHECK:STDOUT: %return.patt: @ExplicitGenericParam.%ptr.loc4_39.2 (%ptr) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @ExplicitGenericParam.%ptr.loc4_39.2 (%ptr) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %return.patt: @ExplicitGenericParam.%pattern_type (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @ExplicitGenericParam.%pattern_type (%pattern_type.afe) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_38: type = name_ref T, %T.loc4_25.1 [symbolic = %T.loc4_25.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_39.1: type = ptr_type %T.ref.loc4_38 [symbolic = %ptr.loc4_39.2 (constants.%ptr)] @@ -450,13 +462,13 @@ fn F() { // CHECK:STDOUT: %return: ref @ExplicitGenericParam.%ptr.loc4_39.2 (%ptr) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitGenericParamConst.decl: %CallExplicitGenericParamConst.type = fn_decl @CallExplicitGenericParamConst [concrete = constants.%CallExplicitGenericParamConst] { -// CHECK:STDOUT: %T.patt.loc6_34.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_34.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_34.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_34.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_34.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_34.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitGenericParamNonConst.decl: %CallExplicitGenericParamNonConst.type = fn_decl @CallExplicitGenericParamNonConst [concrete = constants.%CallExplicitGenericParamNonConst] { -// CHECK:STDOUT: %T.patt: type = binding_pattern T -// CHECK:STDOUT: %T.param_patt: type = value_param_pattern %T.patt, call_param0 +// CHECK:STDOUT: %T.patt: %pattern_type.98f = binding_pattern T +// CHECK:STDOUT: %T.param_patt: %pattern_type.98f = value_param_pattern %T.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.param: type = value_param call_param0 // CHECK:STDOUT: %T: type = bind_name T, %T.param @@ -465,8 +477,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ExplicitGenericParam(%T.loc4_25.1: type) { // CHECK:STDOUT: %T.loc4_25.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_25.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_25.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc4_39.2: type = ptr_type %T.loc4_25.2 [symbolic = %ptr.loc4_39.2 (constants.%ptr)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_39.2 [symbolic = %pattern_type (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc4_39.2 [symbolic = %require_complete (constants.%require_complete)] @@ -486,7 +499,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallExplicitGenericParamConst(%T.loc6_34.1: type) { // CHECK:STDOUT: %T.loc6_34.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_34.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_34.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_34.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_34.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_34.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ExplicitGenericParam.specific_fn.loc7_3.2: = specific_function constants.%ExplicitGenericParam, @ExplicitGenericParam(%T.loc6_34.2) [symbolic = %ExplicitGenericParam.specific_fn.loc7_3.2 (constants.%ExplicitGenericParam.specific_fn)] @@ -514,6 +527,7 @@ fn F() { // CHECK:STDOUT: %T.loc4_25.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc4_39.2 => constants.%ptr +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -536,16 +550,21 @@ fn F() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %ExplicitAndAlsoDeduced.type: type = fn_type @ExplicitAndAlsoDeduced [concrete] // CHECK:STDOUT: %ExplicitAndAlsoDeduced: %ExplicitAndAlsoDeduced.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %ExplicitAndAlsoDeduced.specific_fn.41d: = specific_function %ExplicitAndAlsoDeduced, @ExplicitAndAlsoDeduced(%T) [symbolic] // CHECK:STDOUT: %ptr.6db: type = ptr_type %A [concrete] +// CHECK:STDOUT: %pattern_type.5f8: type = pattern_type %ptr.6db [concrete] // CHECK:STDOUT: %CallExplicitAndAlsoDeduced.type: type = fn_type @CallExplicitAndAlsoDeduced [concrete] // CHECK:STDOUT: %CallExplicitAndAlsoDeduced: %CallExplicitAndAlsoDeduced.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %ExplicitAndAlsoDeduced.specific_fn.720: = specific_function %ExplicitAndAlsoDeduced, @ExplicitAndAlsoDeduced(%A) [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: %complete_type.7ea: = complete_type_witness %ptr.6db [concrete] @@ -568,11 +587,11 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %ExplicitAndAlsoDeduced.decl: %ExplicitAndAlsoDeduced.type = fn_decl @ExplicitAndAlsoDeduced [concrete = constants.%ExplicitAndAlsoDeduced] { -// CHECK:STDOUT: %T.patt.loc6_27.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_27.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @ExplicitAndAlsoDeduced.%T.loc6_27.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @ExplicitAndAlsoDeduced.%T.loc6_27.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @ExplicitAndAlsoDeduced.%ptr.loc6_47.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @ExplicitAndAlsoDeduced.%ptr.loc6_47.2 (%ptr.79f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_27.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @ExplicitAndAlsoDeduced.%pattern_type.loc6_37 (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @ExplicitAndAlsoDeduced.%pattern_type.loc6_37 (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @ExplicitAndAlsoDeduced.%pattern_type.loc6_43 (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @ExplicitAndAlsoDeduced.%pattern_type.loc6_43 (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6_46: type = name_ref T, %T.loc6_27.1 [symbolic = %T.loc6_27.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc6_47.1: type = ptr_type %T.ref.loc6_46 [symbolic = %ptr.loc6_47.2 (constants.%ptr.79f)] @@ -584,8 +603,8 @@ fn F() { // CHECK:STDOUT: %return: ref @ExplicitAndAlsoDeduced.%ptr.loc6_47.2 (%ptr.79f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallExplicitAndAlsoDeduced.decl: %CallExplicitAndAlsoDeduced.type = fn_decl @CallExplicitAndAlsoDeduced [concrete = constants.%CallExplicitAndAlsoDeduced] { -// CHECK:STDOUT: %return.patt: %ptr.6db = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.6db = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5f8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5f8 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref.loc10: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %ptr: type = ptr_type %A.ref.loc10 [concrete = constants.%ptr.6db] @@ -605,8 +624,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ExplicitAndAlsoDeduced(%T.loc6_27.1: type) { // CHECK:STDOUT: %T.loc6_27.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_27.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_27.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_27.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_27.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type.loc6_37: type = pattern_type %T.loc6_27.2 [symbolic = %pattern_type.loc6_37 (constants.%pattern_type.7dc)] // CHECK:STDOUT: %ptr.loc6_47.2: type = ptr_type %T.loc6_27.2 [symbolic = %ptr.loc6_47.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type.loc6_43: type = pattern_type %ptr.loc6_47.2 [symbolic = %pattern_type.loc6_43 (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_43: = require_complete_type %ptr.loc6_47.2 [symbolic = %require_complete.loc6_43 (constants.%require_complete.6e5)] @@ -646,7 +667,9 @@ fn F() { // CHECK:STDOUT: specific @ExplicitAndAlsoDeduced(constants.%T) { // CHECK:STDOUT: %T.loc6_27.2 => constants.%T // CHECK:STDOUT: %T.patt.loc6_27.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type.loc6_37 => constants.%pattern_type.7dc // CHECK:STDOUT: %ptr.loc6_47.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type.loc6_43 => constants.%pattern_type.afe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_43 => constants.%require_complete.6e5 @@ -659,7 +682,9 @@ fn F() { // CHECK:STDOUT: specific @ExplicitAndAlsoDeduced(constants.%A) { // CHECK:STDOUT: %T.loc6_27.2 => constants.%A // CHECK:STDOUT: %T.patt.loc6_27.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type.loc6_37 => constants.%pattern_type.c10 // CHECK:STDOUT: %ptr.loc6_47.2 => constants.%ptr.6db +// CHECK:STDOUT: %pattern_type.loc6_43 => constants.%pattern_type.5f8 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc6_43 => constants.%complete_type.7ea @@ -671,8 +696,11 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %ImplicitGenericParam.type: type = fn_type @ImplicitGenericParam [concrete] // CHECK:STDOUT: %ImplicitGenericParam: %ImplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [symbolic] @@ -680,7 +708,9 @@ fn F() { // CHECK:STDOUT: %ImplicitGenericParam.specific_fn.fc1: = specific_function %ImplicitGenericParam, @ImplicitGenericParam(%T) [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %CallImplicitGenericParam.type: type = fn_type @CallImplicitGenericParam [concrete] // CHECK:STDOUT: %CallImplicitGenericParam: %CallImplicitGenericParam.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -705,11 +735,11 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ImplicitGenericParam.decl: %ImplicitGenericParam.type = fn_decl @ImplicitGenericParam [concrete = constants.%ImplicitGenericParam] { -// CHECK:STDOUT: %T.patt.loc4_25.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @ImplicitGenericParam.%T.loc4_25.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @ImplicitGenericParam.%T.loc4_25.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @ImplicitGenericParam.%ptr.loc4_45.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @ImplicitGenericParam.%ptr.loc4_45.2 (%ptr.79f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @ImplicitGenericParam.%pattern_type.loc4_35 (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @ImplicitGenericParam.%pattern_type.loc4_35 (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @ImplicitGenericParam.%pattern_type.loc4_41 (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @ImplicitGenericParam.%pattern_type.loc4_41 (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_44: type = name_ref T, %T.loc4_25.1 [symbolic = %T.loc4_25.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_45.1: type = ptr_type %T.ref.loc4_44 [symbolic = %ptr.loc4_45.2 (constants.%ptr.79f)] @@ -721,10 +751,10 @@ fn F() { // CHECK:STDOUT: %return: ref @ImplicitGenericParam.%ptr.loc4_45.2 (%ptr.79f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallImplicitGenericParam.decl: %CallImplicitGenericParam.type = fn_decl @CallImplicitGenericParam [concrete = constants.%CallImplicitGenericParam] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.235 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.235 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.fe8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.fe8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6_40: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6_40: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -742,8 +772,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ImplicitGenericParam(%T.loc4_25.1: type) { // CHECK:STDOUT: %T.loc4_25.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_25.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_25.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type.loc4_35: type = pattern_type %T.loc4_25.2 [symbolic = %pattern_type.loc4_35 (constants.%pattern_type.7dc)] // CHECK:STDOUT: %ptr.loc4_45.2: type = ptr_type %T.loc4_25.2 [symbolic = %ptr.loc4_45.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type.loc4_41: type = pattern_type %ptr.loc4_45.2 [symbolic = %pattern_type.loc4_41 (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4_41: = require_complete_type %ptr.loc4_45.2 [symbolic = %require_complete.loc4_41 (constants.%require_complete.6e5)] @@ -776,7 +808,9 @@ fn F() { // CHECK:STDOUT: specific @ImplicitGenericParam(constants.%T) { // CHECK:STDOUT: %T.loc4_25.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type.loc4_35 => constants.%pattern_type.7dc // CHECK:STDOUT: %ptr.loc4_45.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type.loc4_41 => constants.%pattern_type.afe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4_41 => constants.%require_complete.6e5 @@ -789,7 +823,9 @@ fn F() { // CHECK:STDOUT: specific @ImplicitGenericParam(constants.%i32) { // CHECK:STDOUT: %T.loc4_25.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type.loc4_35 => constants.%pattern_type.7ce // CHECK:STDOUT: %ptr.loc4_45.2 => constants.%ptr.235 +// CHECK:STDOUT: %pattern_type.loc4_41 => constants.%pattern_type.fe8 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4_41 => constants.%complete_type.3d0 @@ -801,12 +837,14 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.f83: type = tuple_type (%T, %i32) [symbolic] +// CHECK:STDOUT: %pattern_type.ec8: type = pattern_type %tuple.type.f83 [symbolic] // CHECK:STDOUT: %TupleParam.type: type = fn_type @TupleParam [concrete] // CHECK:STDOUT: %TupleParam: %TupleParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.9c1: = require_complete_type %tuple.type.f83 [symbolic] @@ -816,6 +854,7 @@ fn F() { // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple.type.4c8: type = tuple_type (Core.IntLiteral, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.6f2: type = pattern_type %tuple.type.4c8 [concrete] // CHECK:STDOUT: %TupleParam.specific_fn: = specific_function %TupleParam, @TupleParam(Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -850,9 +889,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %TupleParam.decl: %TupleParam.type = fn_decl @TupleParam [concrete = constants.%TupleParam] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @TupleParam.%tuple.type (%tuple.type.f83) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @TupleParam.%tuple.type (%tuple.type.f83) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @TupleParam.%pattern_type (%pattern_type.ec8) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @TupleParam.%pattern_type (%pattern_type.ec8) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: %x.param: @TupleParam.%tuple.type (%tuple.type.f83) = value_param call_param0 @@ -870,8 +909,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TupleParam(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc4_15.2, constants.%i32) [symbolic = %tuple.type (constants.%tuple.type.f83)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [symbolic = %pattern_type (constants.%pattern_type.ec8)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %tuple.type [symbolic = %require_complete (constants.%require_complete.9c1)] @@ -906,12 +946,14 @@ fn F() { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt // CHECK:STDOUT: %tuple.type => constants.%tuple.type.f83 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ec8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TupleParam(Core.IntLiteral) { // CHECK:STDOUT: %T.loc4_15.2 => Core.IntLiteral // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt // CHECK:STDOUT: %tuple.type => constants.%tuple.type.4c8 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6f2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.c49 @@ -921,11 +963,13 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.46e: type = struct_type {.a: %T, .b: %i32} [symbolic] +// CHECK:STDOUT: %pattern_type.e94: type = pattern_type %struct_type.a.b.46e [symbolic] // CHECK:STDOUT: %StructParam.type: type = fn_type @StructParam [concrete] // CHECK:STDOUT: %StructParam: %StructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.23a: = require_complete_type %struct_type.a.b.46e [symbolic] @@ -935,6 +979,7 @@ fn F() { // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct_type.a.b.a13: type = struct_type {.a: Core.IntLiteral, .b: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.cfa: type = pattern_type %struct_type.a.b.a13 [concrete] // CHECK:STDOUT: %StructParam.specific_fn: = specific_function %StructParam, @StructParam(Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -969,9 +1014,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %StructParam.decl: %StructParam.type = fn_decl @StructParam [concrete = constants.%StructParam] { -// CHECK:STDOUT: %T.patt.loc4_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @StructParam.%struct_type.a.b.loc4_44.2 (%struct_type.a.b.46e) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @StructParam.%struct_type.a.b.loc4_44.2 (%struct_type.a.b.46e) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @StructParam.%pattern_type (%pattern_type.e94) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @StructParam.%pattern_type (%pattern_type.e94) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] // CHECK:STDOUT: %x.param: @StructParam.%struct_type.a.b.loc4_44.2 (%struct_type.a.b.46e) = value_param call_param0 @@ -988,8 +1033,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @StructParam(%T.loc4_16.1: type) { // CHECK:STDOUT: %T.loc4_16.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_16.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: %struct_type.a.b.loc4_44.2: type = struct_type {.a: @StructParam.%T.loc4_16.2 (%T), .b: %i32} [symbolic = %struct_type.a.b.loc4_44.2 (constants.%struct_type.a.b.46e)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.b.loc4_44.2 [symbolic = %pattern_type (constants.%pattern_type.e94)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a.b.loc4_44.2 [symbolic = %require_complete (constants.%require_complete.23a)] @@ -1024,12 +1070,14 @@ fn F() { // CHECK:STDOUT: %T.loc4_16.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt // CHECK:STDOUT: %struct_type.a.b.loc4_44.2 => constants.%struct_type.a.b.46e +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e94 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @StructParam(Core.IntLiteral) { // CHECK:STDOUT: %T.loc4_16.2 => Core.IntLiteral // CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt // CHECK:STDOUT: %struct_type.a.b.loc4_44.2 => constants.%struct_type.a.b.a13 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cfa // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.a4a @@ -1039,10 +1087,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.c.d.e: type = struct_type {.c: %T, .d: %i32, .e: %i32} [symbolic] +// CHECK:STDOUT: %pattern_type.c31: type = pattern_type %struct_type.c.d.e [symbolic] // CHECK:STDOUT: %BigStructParam.type: type = fn_type @BigStructParam [concrete] // CHECK:STDOUT: %BigStructParam: %BigStructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.694: = require_complete_type %struct_type.c.d.e [symbolic] @@ -1069,9 +1119,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %BigStructParam.decl: %BigStructParam.type = fn_decl @BigStructParam [concrete = constants.%BigStructParam] { -// CHECK:STDOUT: %T.patt.loc4_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @BigStructParam.%struct_type.c.d.e.loc4_56.2 (%struct_type.c.d.e) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @BigStructParam.%struct_type.c.d.e.loc4_56.2 (%struct_type.c.d.e) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @BigStructParam.%pattern_type (%pattern_type.c31) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @BigStructParam.%pattern_type (%pattern_type.c31) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_19.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_19.2 (constants.%T)] // CHECK:STDOUT: %x.param: @BigStructParam.%struct_type.c.d.e.loc4_56.2 (%struct_type.c.d.e) = value_param call_param0 @@ -1090,8 +1140,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @BigStructParam(%T.loc4_19.1: type) { // CHECK:STDOUT: %T.loc4_19.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_19.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_19.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] // CHECK:STDOUT: %struct_type.c.d.e.loc4_56.2: type = struct_type {.c: @BigStructParam.%T.loc4_19.2 (%T), .d: %i32, .e: %i32} [symbolic = %struct_type.c.d.e.loc4_56.2 (constants.%struct_type.c.d.e)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.c.d.e.loc4_56.2 [symbolic = %pattern_type (constants.%pattern_type.c31)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.c.d.e.loc4_56.2 [symbolic = %require_complete (constants.%require_complete.694)] @@ -1115,16 +1166,19 @@ fn F() { // CHECK:STDOUT: %T.loc4_19.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt // CHECK:STDOUT: %struct_type.c.d.e.loc4_56.2 => constants.%struct_type.c.d.e +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c31 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_smaller_struct.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.f.g: type = struct_type {.f: %T, .g: %i32} [symbolic] +// CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %struct_type.f.g [symbolic] // CHECK:STDOUT: %SmallStructParam.type: type = fn_type @SmallStructParam [concrete] // CHECK:STDOUT: %SmallStructParam: %SmallStructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.dad: = require_complete_type %struct_type.f.g [symbolic] @@ -1152,9 +1206,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %SmallStructParam.decl: %SmallStructParam.type = fn_decl @SmallStructParam [concrete = constants.%SmallStructParam] { -// CHECK:STDOUT: %T.patt.loc4_21.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @SmallStructParam.%struct_type.f.g.loc4_49.2 (%struct_type.f.g) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @SmallStructParam.%struct_type.f.g.loc4_49.2 (%struct_type.f.g) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_21.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @SmallStructParam.%pattern_type (%pattern_type.5b8) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @SmallStructParam.%pattern_type (%pattern_type.5b8) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_21.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.2 (constants.%T)] // CHECK:STDOUT: %x.param: @SmallStructParam.%struct_type.f.g.loc4_49.2 (%struct_type.f.g) = value_param call_param0 @@ -1171,8 +1225,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @SmallStructParam(%T.loc4_21.1: type) { // CHECK:STDOUT: %T.loc4_21.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_21.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_21.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] // CHECK:STDOUT: %struct_type.f.g.loc4_49.2: type = struct_type {.f: @SmallStructParam.%T.loc4_21.2 (%T), .g: %i32} [symbolic = %struct_type.f.g.loc4_49.2 (constants.%struct_type.f.g)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.f.g.loc4_49.2 [symbolic = %pattern_type (constants.%pattern_type.5b8)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.f.g.loc4_49.2 [symbolic = %require_complete (constants.%require_complete.dad)] @@ -1197,16 +1252,19 @@ fn F() { // CHECK:STDOUT: %T.loc4_21.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_21.2 => constants.%T.patt // CHECK:STDOUT: %struct_type.f.g.loc4_49.2 => constants.%struct_type.f.g +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.5b8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_struct_wrong_name.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.i.different: type = struct_type {.i: %T, .different: %i32} [symbolic] +// CHECK:STDOUT: %pattern_type.685: type = pattern_type %struct_type.i.different [symbolic] // CHECK:STDOUT: %WrongNameStructParam.type: type = fn_type @WrongNameStructParam [concrete] // CHECK:STDOUT: %WrongNameStructParam: %WrongNameStructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.411: = require_complete_type %struct_type.i.different [symbolic] @@ -1233,9 +1291,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %WrongNameStructParam.decl: %WrongNameStructParam.type = fn_decl @WrongNameStructParam [concrete = constants.%WrongNameStructParam] { -// CHECK:STDOUT: %T.patt.loc4_25.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @WrongNameStructParam.%struct_type.i.different.loc4_61.2 (%struct_type.i.different) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @WrongNameStructParam.%struct_type.i.different.loc4_61.2 (%struct_type.i.different) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @WrongNameStructParam.%pattern_type (%pattern_type.685) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @WrongNameStructParam.%pattern_type (%pattern_type.685) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_25.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_25.2 (constants.%T)] // CHECK:STDOUT: %x.param: @WrongNameStructParam.%struct_type.i.different.loc4_61.2 (%struct_type.i.different) = value_param call_param0 @@ -1252,8 +1310,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WrongNameStructParam(%T.loc4_25.1: type) { // CHECK:STDOUT: %T.loc4_25.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_25.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_25.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] // CHECK:STDOUT: %struct_type.i.different.loc4_61.2: type = struct_type {.i: @WrongNameStructParam.%T.loc4_25.2 (%T), .different: %i32} [symbolic = %struct_type.i.different.loc4_61.2 (constants.%struct_type.i.different)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.i.different.loc4_61.2 [symbolic = %pattern_type (constants.%pattern_type.685)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.i.different.loc4_61.2 [symbolic = %require_complete (constants.%require_complete.411)] @@ -1277,16 +1336,19 @@ fn F() { // CHECK:STDOUT: %T.loc4_25.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt // CHECK:STDOUT: %struct_type.i.different.loc4_61.2 => constants.%struct_type.i.different +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.685 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_deduce_struct_wrong_order.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.first.second: type = struct_type {.first: %T, .second: %i32} [symbolic] +// CHECK:STDOUT: %pattern_type.422: type = pattern_type %struct_type.first.second [symbolic] // CHECK:STDOUT: %WrongOrderStructParam.type: type = fn_type @WrongOrderStructParam [concrete] // CHECK:STDOUT: %WrongOrderStructParam: %WrongOrderStructParam.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.d6e: = require_complete_type %struct_type.first.second [symbolic] @@ -1313,9 +1375,9 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %WrongOrderStructParam.decl: %WrongOrderStructParam.type = fn_decl @WrongOrderStructParam [concrete = constants.%WrongOrderStructParam] { -// CHECK:STDOUT: %T.patt.loc4_26.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @WrongOrderStructParam.%struct_type.first.second.loc4_63.2 (%struct_type.first.second) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @WrongOrderStructParam.%struct_type.first.second.loc4_63.2 (%struct_type.first.second) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_26.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @WrongOrderStructParam.%pattern_type (%pattern_type.422) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @WrongOrderStructParam.%pattern_type (%pattern_type.422) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_26.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_26.2 (constants.%T)] // CHECK:STDOUT: %x.param: @WrongOrderStructParam.%struct_type.first.second.loc4_63.2 (%struct_type.first.second) = value_param call_param0 @@ -1332,8 +1394,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WrongOrderStructParam(%T.loc4_26.1: type) { // CHECK:STDOUT: %T.loc4_26.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_26.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_26.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_26.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_26.2 (constants.%T.patt)] // CHECK:STDOUT: %struct_type.first.second.loc4_63.2: type = struct_type {.first: @WrongOrderStructParam.%T.loc4_26.2 (%T), .second: %i32} [symbolic = %struct_type.first.second.loc4_63.2 (constants.%struct_type.first.second)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.first.second.loc4_63.2 [symbolic = %pattern_type (constants.%pattern_type.422)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.first.second.loc4_63.2 [symbolic = %require_complete (constants.%require_complete.d6e)] @@ -1357,15 +1420,19 @@ fn F() { // CHECK:STDOUT: %T.loc4_26.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_26.2 => constants.%T.patt // CHECK:STDOUT: %struct_type.first.second.loc4_63.2 => constants.%struct_type.first.second +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.422 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_incomplete.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.a32: type = pattern_type %U [symbolic] // CHECK:STDOUT: %ImplicitNotDeducible.type: type = fn_type @ImplicitNotDeducible [concrete] // CHECK:STDOUT: %ImplicitNotDeducible: %ImplicitNotDeducible.type = struct_value () [concrete] // CHECK:STDOUT: %CallImplicitNotDeducible.type: type = fn_type @CallImplicitNotDeducible [concrete] @@ -1388,12 +1455,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ImplicitNotDeducible.decl: %ImplicitNotDeducible.type = fn_decl @ImplicitNotDeducible [concrete = constants.%ImplicitNotDeducible] { -// CHECK:STDOUT: %T.patt.loc6_25.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_25.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc6_35.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc6_35.2 (constants.%U.patt)] -// CHECK:STDOUT: %x.patt: @ImplicitNotDeducible.%T.loc6_25.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @ImplicitNotDeducible.%T.loc6_25.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @ImplicitNotDeducible.%U.loc6_35.2 (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @ImplicitNotDeducible.%U.loc6_35.2 (%U) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc6_35.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc6_35.2 (constants.%U.patt)] +// CHECK:STDOUT: %x.patt: @ImplicitNotDeducible.%pattern_type.loc6_45 (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @ImplicitNotDeducible.%pattern_type.loc6_45 (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @ImplicitNotDeducible.%pattern_type.loc6_51 (%pattern_type.a32) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @ImplicitNotDeducible.%pattern_type.loc6_51 (%pattern_type.a32) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc6_35.1 [symbolic = %U.loc6_35.2 (constants.%U)] // CHECK:STDOUT: %T.loc6_25.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_25.2 (constants.%T)] @@ -1409,9 +1476,11 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ImplicitNotDeducible(%T.loc6_25.1: type, %U.loc6_35.1: type) { // CHECK:STDOUT: %T.loc6_25.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_25.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_25.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_25.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc6_35.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc6_35.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc6_35.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc6_35.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc6_35.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc6_35.2 (constants.%U.patt)] +// CHECK:STDOUT: %pattern_type.loc6_45: type = pattern_type %T.loc6_25.2 [symbolic = %pattern_type.loc6_45 (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %pattern_type.loc6_51: type = pattern_type %U.loc6_35.2 [symbolic = %pattern_type.loc6_51 (constants.%pattern_type.a32)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @ImplicitNotDeducible.%T.loc6_25.2 (%T)) -> @ImplicitNotDeducible.%U.loc6_35.2 (%U); // CHECK:STDOUT: } @@ -1428,13 +1497,17 @@ fn F() { // CHECK:STDOUT: %T.patt.loc6_25.2 => constants.%T.patt // CHECK:STDOUT: %U.loc6_35.2 => constants.%U // CHECK:STDOUT: %U.patt.loc6_35.2 => constants.%U.patt +// CHECK:STDOUT: %pattern_type.loc6_45 => constants.%pattern_type.7dc +// CHECK:STDOUT: %pattern_type.loc6_51 => constants.%pattern_type.a32 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_inconsistent.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %ImplicitNotDeducible.type: type = fn_type @ImplicitNotDeducible [concrete] // CHECK:STDOUT: %ImplicitNotDeducible: %ImplicitNotDeducible.type = struct_value () [concrete] // CHECK:STDOUT: %CallImplicitNotDeducible.type: type = fn_type @CallImplicitNotDeducible [concrete] @@ -1459,13 +1532,13 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ImplicitNotDeducible.decl: %ImplicitNotDeducible.type = fn_decl @ImplicitNotDeducible [concrete = constants.%ImplicitNotDeducible] { -// CHECK:STDOUT: %T.patt.loc4_25.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @ImplicitNotDeducible.%T.loc4_25.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @ImplicitNotDeducible.%T.loc4_25.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %y.patt: @ImplicitNotDeducible.%T.loc4_25.2 (%T) = binding_pattern y -// CHECK:STDOUT: %y.param_patt: @ImplicitNotDeducible.%T.loc4_25.2 (%T) = value_param_pattern %y.patt, call_param1 -// CHECK:STDOUT: %return.patt: @ImplicitNotDeducible.%T.loc4_25.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @ImplicitNotDeducible.%T.loc4_25.2 (%T) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %T.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %y.patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.7dc) = binding_pattern y +// CHECK:STDOUT: %y.param_patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.7dc) = value_param_pattern %y.patt, call_param1 +// CHECK:STDOUT: %return.patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @ImplicitNotDeducible.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_50: type = name_ref T, %T.loc4_25.1 [symbolic = %T.loc4_25.2 (constants.%T)] // CHECK:STDOUT: %T.loc4_25.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_25.2 (constants.%T)] @@ -1483,7 +1556,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ImplicitNotDeducible(%T.loc4_25.1: type) { // CHECK:STDOUT: %T.loc4_25.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_25.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_25.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_25.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @ImplicitNotDeducible.%T.loc4_25.2 (%T), %y.param: @ImplicitNotDeducible.%T.loc4_25.2 (%T)) -> @ImplicitNotDeducible.%T.loc4_25.2 (%T); // CHECK:STDOUT: } @@ -1500,6 +1574,7 @@ fn F() { // CHECK:STDOUT: specific @ImplicitNotDeducible(constants.%T) { // CHECK:STDOUT: %T.loc4_25.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_25.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- deduce_nested_generic_class.carbon @@ -1512,13 +1587,15 @@ fn F() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Z.impl_witness.354: = impl_witness file.%Z.impl_witness_table.loc6 [concrete] // CHECK:STDOUT: %E: type = bind_symbolic_name E, 0 [symbolic] -// CHECK:STDOUT: %E.patt: type = symbolic_binding_pattern E, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %E.patt: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic] // CHECK:STDOUT: %DD.type: type = generic_class_type @DD [concrete] // CHECK:STDOUT: %DD.generic: %DD.type = struct_value () [concrete] // CHECK:STDOUT: %DD.296: type = class_type @DD, @DD(%E) [symbolic] // CHECK:STDOUT: %Z.impl_witness.c98: = impl_witness file.%Z.impl_witness_table.loc9, @impl.266(%E) [symbolic] // CHECK:STDOUT: %D: %Z.type = bind_symbolic_name D, 0 [symbolic] -// CHECK:STDOUT: %D.patt: %Z.type = symbolic_binding_pattern D, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.5af: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %D.patt: %pattern_type.5af = symbolic_binding_pattern D, 0 [symbolic] // CHECK:STDOUT: %CC.type: type = generic_class_type @CC [concrete] // CHECK:STDOUT: %CC.generic: %CC.type = struct_value () [concrete] // CHECK:STDOUT: %CC.a2f: type = class_type @CC, @CC(%D) [symbolic] @@ -1562,12 +1639,12 @@ fn F() { // CHECK:STDOUT: %Z.impl_witness_table.loc6 = impl_witness_table (), @impl.a6b [concrete] // CHECK:STDOUT: %Z.impl_witness.loc6: = impl_witness %Z.impl_witness_table.loc6 [concrete = constants.%Z.impl_witness.354] // CHECK:STDOUT: %DD.decl: %DD.type = class_decl @DD [concrete = constants.%DD.generic] { -// CHECK:STDOUT: %E.patt.loc8_10.1: type = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc8_10.2 (constants.%E.patt)] +// CHECK:STDOUT: %E.patt.loc8_10.1: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc8_10.2 (constants.%E.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %E.loc8_10.1: type = bind_symbolic_name E, 0 [symbolic = %E.loc8_10.2 (constants.%E)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.266 [concrete] { -// CHECK:STDOUT: %E.patt.loc9_14.1: type = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc9_14.2 (constants.%E.patt)] +// CHECK:STDOUT: %E.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc9_14.2 (constants.%E.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %DD.ref: %DD.type = name_ref DD, file.%DD.decl [concrete = constants.%DD.generic] // CHECK:STDOUT: %E.ref: type = name_ref E, %E.loc9_14.1 [symbolic = %E.loc9_14.2 (constants.%E)] @@ -1578,13 +1655,13 @@ fn F() { // CHECK:STDOUT: %Z.impl_witness_table.loc9 = impl_witness_table (), @impl.266 [concrete] // CHECK:STDOUT: %Z.impl_witness.loc9: = impl_witness %Z.impl_witness_table.loc9, @impl.266(constants.%E) [symbolic = @impl.266.%Z.impl_witness (constants.%Z.impl_witness.c98)] // CHECK:STDOUT: %CC.decl: %CC.type = class_decl @CC [concrete = constants.%CC.generic] { -// CHECK:STDOUT: %D.patt.loc11_10.1: %Z.type = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc11_10.2 (constants.%D.patt)] +// CHECK:STDOUT: %D.patt.loc11_10.1: %pattern_type.5af = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc11_10.2 (constants.%D.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type] // CHECK:STDOUT: %D.loc11_10.1: %Z.type = bind_symbolic_name D, 0 [symbolic = %D.loc11_10.2 (constants.%D)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.497 [concrete] { -// CHECK:STDOUT: %E.patt.loc12_14.1: type = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc12_14.2 (constants.%E.patt)] +// CHECK:STDOUT: %E.patt.loc12_14.1: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc12_14.2 (constants.%E.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %CC.ref: %CC.type = name_ref CC, file.%CC.decl [concrete = constants.%CC.generic] // CHECK:STDOUT: %DD.ref: %DD.type = name_ref DD, file.%DD.decl [concrete = constants.%DD.generic] @@ -1616,7 +1693,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.266(%E.loc9_14.1: type) { // CHECK:STDOUT: %E.loc9_14.2: type = bind_symbolic_name E, 0 [symbolic = %E.loc9_14.2 (constants.%E)] -// CHECK:STDOUT: %E.patt.loc9_14.2: type = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc9_14.2 (constants.%E.patt)] +// CHECK:STDOUT: %E.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc9_14.2 (constants.%E.patt)] // CHECK:STDOUT: %DD.loc9_28.2: type = class_type @DD, @DD(%E.loc9_14.2) [symbolic = %DD.loc9_28.2 (constants.%DD.296)] // CHECK:STDOUT: %Z.impl_witness: = impl_witness file.%Z.impl_witness_table.loc9, @impl.266(%E.loc9_14.2) [symbolic = %Z.impl_witness (constants.%Z.impl_witness.c98)] // CHECK:STDOUT: @@ -1630,7 +1707,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.497(%E.loc12_14.1: type) { // CHECK:STDOUT: %E.loc12_14.2: type = bind_symbolic_name E, 0 [symbolic = %E.loc12_14.2 (constants.%E)] -// CHECK:STDOUT: %E.patt.loc12_14.2: type = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc12_14.2 (constants.%E.patt)] +// CHECK:STDOUT: %E.patt.loc12_14.2: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc12_14.2 (constants.%E.patt)] // CHECK:STDOUT: %DD.loc12_31.2: type = class_type @DD, @DD(%E.loc12_14.2) [symbolic = %DD.loc12_31.2 (constants.%DD.296)] // CHECK:STDOUT: %Z.lookup_impl_witness: = lookup_impl_witness %DD.loc12_31.2, @Z [symbolic = %Z.lookup_impl_witness (constants.%Z.lookup_impl_witness)] // CHECK:STDOUT: %Z.facet.loc12_32.2: %Z.type = facet_value %DD.loc12_31.2, (%Z.lookup_impl_witness) [symbolic = %Z.facet.loc12_32.2 (constants.%Z.facet.aae)] @@ -1656,7 +1733,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @DD(%E.loc8_10.1: type) { // CHECK:STDOUT: %E.loc8_10.2: type = bind_symbolic_name E, 0 [symbolic = %E.loc8_10.2 (constants.%E)] -// CHECK:STDOUT: %E.patt.loc8_10.2: type = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc8_10.2 (constants.%E.patt)] +// CHECK:STDOUT: %E.patt.loc8_10.2: %pattern_type.98f = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc8_10.2 (constants.%E.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1672,7 +1749,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @CC(%D.loc11_10.1: %Z.type) { // CHECK:STDOUT: %D.loc11_10.2: %Z.type = bind_symbolic_name D, 0 [symbolic = %D.loc11_10.2 (constants.%D)] -// CHECK:STDOUT: %D.patt.loc11_10.2: %Z.type = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc11_10.2 (constants.%D.patt)] +// CHECK:STDOUT: %D.patt.loc11_10.2: %pattern_type.5af = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc11_10.2 (constants.%D.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1789,7 +1866,8 @@ fn F() { // CHECK:STDOUT: %Y.impl_witness: = impl_witness file.%Y.impl_witness_table [concrete] // CHECK:STDOUT: %W.impl_witness: = impl_witness file.%W.impl_witness_table [concrete] // CHECK:STDOUT: %D: %Y.type = bind_symbolic_name D, 0 [symbolic] -// CHECK:STDOUT: %D.patt: %Y.type = symbolic_binding_pattern D, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.667: type = pattern_type %Y.type [concrete] +// CHECK:STDOUT: %D.patt: %pattern_type.667 = symbolic_binding_pattern D, 0 [symbolic] // CHECK:STDOUT: %CC.type: type = generic_class_type @CC [concrete] // CHECK:STDOUT: %CC.generic: %CC.type = struct_value () [concrete] // CHECK:STDOUT: %CC.3ba: type = class_type @CC, @CC(%D) [symbolic] @@ -1806,7 +1884,8 @@ fn F() { // CHECK:STDOUT: %Op.bound: = bound_method %Y.type, %Op.0a6 [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@Y & @W> [concrete] // CHECK:STDOUT: %E: %facet_type = bind_symbolic_name E, 0 [symbolic] -// CHECK:STDOUT: %E.patt: %facet_type = symbolic_binding_pattern E, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.122: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %E.patt: %pattern_type.122 = symbolic_binding_pattern E, 0 [symbolic] // CHECK:STDOUT: %Y.lookup_impl_witness: = lookup_impl_witness %E, @Y [symbolic] // CHECK:STDOUT: %E.as_type: type = facet_access_type %E [symbolic] // CHECK:STDOUT: %Y.facet.7ec: %Y.type = facet_value %E.as_type, (%Y.lookup_impl_witness) [symbolic] @@ -1856,14 +1935,14 @@ fn F() { // CHECK:STDOUT: %W.impl_witness_table = impl_witness_table (), @impl.e11 [concrete] // CHECK:STDOUT: %W.impl_witness: = impl_witness %W.impl_witness_table [concrete = constants.%W.impl_witness] // CHECK:STDOUT: %CC.decl: %CC.type = class_decl @CC [concrete = constants.%CC.generic] { -// CHECK:STDOUT: %D.patt.loc12_10.1: %Y.type = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc12_10.2 (constants.%D.patt)] +// CHECK:STDOUT: %D.patt.loc12_10.1: %pattern_type.667 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc12_10.2 (constants.%D.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y.type] // CHECK:STDOUT: %D.loc12_10.1: %Y.type = bind_symbolic_name D, 0 [symbolic = %D.loc12_10.2 (constants.%D)] // CHECK:STDOUT: } // CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {} // CHECK:STDOUT: impl_decl @impl.562 [concrete] { -// CHECK:STDOUT: %E.patt.loc19_14.1: %facet_type = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc19_14.2 (constants.%E.patt)] +// CHECK:STDOUT: %E.patt.loc19_14.1: %pattern_type.122 = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc19_14.2 (constants.%E.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %CC.ref: %CC.type = name_ref CC, file.%CC.decl [concrete = constants.%CC.generic] // CHECK:STDOUT: %E.ref: %facet_type = name_ref E, %E.loc19_14.1 [symbolic = %E.loc19_14.2 (constants.%E)] @@ -1924,7 +2003,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.562(%E.loc19_14.1: %facet_type) { // CHECK:STDOUT: %E.loc19_14.2: %facet_type = bind_symbolic_name E, 0 [symbolic = %E.loc19_14.2 (constants.%E)] -// CHECK:STDOUT: %E.patt.loc19_14.2: %facet_type = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc19_14.2 (constants.%E.patt)] +// CHECK:STDOUT: %E.patt.loc19_14.2: %pattern_type.122 = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc19_14.2 (constants.%E.patt)] // CHECK:STDOUT: %Y.lookup_impl_witness: = lookup_impl_witness %E.loc19_14.2, @Y [symbolic = %Y.lookup_impl_witness (constants.%Y.lookup_impl_witness)] // CHECK:STDOUT: %E.as_type.loc19_29.2: type = facet_access_type %E.loc19_14.2 [symbolic = %E.as_type.loc19_29.2 (constants.%E.as_type)] // CHECK:STDOUT: %Y.facet.loc19_29.2: %Y.type = facet_value %E.as_type.loc19_29.2, (%Y.lookup_impl_witness) [symbolic = %Y.facet.loc19_29.2 (constants.%Y.facet.7ec)] @@ -1950,7 +2029,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @CC(%D.loc12_10.1: %Y.type) { // CHECK:STDOUT: %D.loc12_10.2: %Y.type = bind_symbolic_name D, 0 [symbolic = %D.loc12_10.2 (constants.%D)] -// CHECK:STDOUT: %D.patt.loc12_10.2: %Y.type = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc12_10.2 (constants.%D.patt)] +// CHECK:STDOUT: %D.patt.loc12_10.2: %pattern_type.667 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc12_10.2 (constants.%D.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/min_prelude/call.carbon b/toolchain/check/testdata/function/generic/min_prelude/call.carbon index 7393ab82a69e..75b65496d30f 100644 --- a/toolchain/check/testdata/function/generic/min_prelude/call.carbon +++ b/toolchain/check/testdata/function/generic/min_prelude/call.carbon @@ -59,7 +59,9 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Function.type: type = fn_type @Function [concrete] // CHECK:STDOUT: %Function: %Function.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -67,6 +69,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %CallGeneric: %CallGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %Function.specific_fn.46f: = specific_function %Function, @Function(%T) [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %CallGenericPtr.type: type = fn_type @CallGenericPtr [concrete] // CHECK:STDOUT: %CallGenericPtr: %CallGenericPtr.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [symbolic] @@ -74,6 +77,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %CallSpecific.type: type = fn_type @CallSpecific [concrete] // CHECK:STDOUT: %CallSpecific: %CallSpecific.type = struct_value () [concrete] // CHECK:STDOUT: %Function.specific_fn.1b5: = specific_function %Function, @Function(%C) [concrete] @@ -96,11 +100,11 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Function.decl: %Function.type = fn_decl @Function [concrete = constants.%Function] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Function.%T.loc4_13.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Function.%T.loc4_13.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Function.%T.loc4_13.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Function.%T.loc4_13.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Function.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Function.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Function.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Function.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_32: type = name_ref T, %T.loc4_13.1 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] @@ -111,11 +115,11 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %return: ref @Function.%T.loc4_13.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [concrete = constants.%CallGeneric] { -// CHECK:STDOUT: %T.patt.loc8_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @CallGeneric.%T.loc8_16.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @CallGeneric.%T.loc8_16.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @CallGeneric.%T.loc8_16.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @CallGeneric.%T.loc8_16.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @CallGeneric.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @CallGeneric.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @CallGeneric.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @CallGeneric.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_35: type = name_ref T, %T.loc8_16.1 [symbolic = %T.loc8_16.2 (constants.%T)] // CHECK:STDOUT: %T.loc8_16.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_16.2 (constants.%T)] @@ -126,11 +130,11 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %return: ref @CallGeneric.%T.loc8_16.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericPtr.decl: %CallGenericPtr.type = fn_decl @CallGenericPtr [concrete = constants.%CallGenericPtr] { -// CHECK:STDOUT: %T.patt.loc12_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_19.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @CallGenericPtr.%ptr.loc12_33.2 (%ptr.79f) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @CallGenericPtr.%ptr.loc12_33.2 (%ptr.79f) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @CallGenericPtr.%ptr.loc12_33.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @CallGenericPtr.%ptr.loc12_33.2 (%ptr.79f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc12_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @CallGenericPtr.%pattern_type (%pattern_type.afe) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @CallGenericPtr.%pattern_type (%pattern_type.afe) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @CallGenericPtr.%pattern_type (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @CallGenericPtr.%pattern_type (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc12_39: type = name_ref T, %T.loc12_19.1 [symbolic = %T.loc12_19.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc12_40: type = ptr_type %T.ref.loc12_39 [symbolic = %ptr.loc12_33.2 (constants.%ptr.79f)] @@ -146,10 +150,10 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %CallSpecific.decl: %CallSpecific.type = fn_decl @CallSpecific [concrete = constants.%CallSpecific] { -// CHECK:STDOUT: %x.patt: %C = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %C = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.c48 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.c48 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %x.param: %C = value_param call_param0 @@ -171,7 +175,8 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Function(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_13.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_13.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -185,7 +190,8 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGeneric(%T.loc8_16.1: type) { // CHECK:STDOUT: %T.loc8_16.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_16.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_16.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc8_16.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc8_16.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -206,8 +212,9 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericPtr(%T.loc12_19.1: type) { // CHECK:STDOUT: %T.loc12_19.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_19.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_19.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_19.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc12_33.2: type = ptr_type %T.loc12_19.2 [symbolic = %ptr.loc12_33.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc12_33.2 [symbolic = %pattern_type (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc12_33.2 [symbolic = %require_complete (constants.%require_complete.6e5)] @@ -241,6 +248,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: specific @Function(constants.%T) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -249,6 +257,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: specific @CallGeneric(constants.%T) { // CHECK:STDOUT: %T.loc8_16.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_16.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(@CallGeneric.%T.loc8_16.2) {} @@ -257,11 +266,13 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %T.loc12_19.2 => constants.%T // CHECK:STDOUT: %T.patt.loc12_19.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc12_33.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(constants.%ptr.79f) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%ptr.79f // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.6e5 @@ -272,6 +283,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: specific @Function(constants.%C) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%C // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -281,7 +293,9 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Function.type: type = fn_type @Function [concrete] // CHECK:STDOUT: %Function: %Function.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -289,6 +303,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %CallGeneric: %CallGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %Function.specific_fn.46f: = specific_function %Function, @Function(%T) [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %CallGenericPtr.type: type = fn_type @CallGenericPtr [concrete] // CHECK:STDOUT: %CallGenericPtr: %CallGenericPtr.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [symbolic] @@ -296,6 +311,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %CallSpecific.type: type = fn_type @CallSpecific [concrete] // CHECK:STDOUT: %CallSpecific: %CallSpecific.type = struct_value () [concrete] // CHECK:STDOUT: %Function.specific_fn.1b5: = specific_function %Function, @Function(%C) [concrete] @@ -318,11 +334,11 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Function.decl: %Function.type = fn_decl @Function [concrete = constants.%Function] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Function.%T.loc4_13.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Function.%T.loc4_13.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Function.%T.loc4_13.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Function.%T.loc4_13.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Function.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Function.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Function.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Function.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_32: type = name_ref T, %T.loc4_13.1 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] @@ -333,11 +349,11 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %return: ref @Function.%T.loc4_13.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [concrete = constants.%CallGeneric] { -// CHECK:STDOUT: %T.patt.loc8_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @CallGeneric.%T.loc8_16.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @CallGeneric.%T.loc8_16.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @CallGeneric.%T.loc8_16.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @CallGeneric.%T.loc8_16.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @CallGeneric.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @CallGeneric.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @CallGeneric.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @CallGeneric.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_35: type = name_ref T, %T.loc8_16.1 [symbolic = %T.loc8_16.2 (constants.%T)] // CHECK:STDOUT: %T.loc8_16.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_16.2 (constants.%T)] @@ -348,11 +364,11 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %return: ref @CallGeneric.%T.loc8_16.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGenericPtr.decl: %CallGenericPtr.type = fn_decl @CallGenericPtr [concrete = constants.%CallGenericPtr] { -// CHECK:STDOUT: %T.patt.loc12_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_19.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @CallGenericPtr.%ptr.loc12_33.2 (%ptr.79f) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @CallGenericPtr.%ptr.loc12_33.2 (%ptr.79f) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @CallGenericPtr.%ptr.loc12_33.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @CallGenericPtr.%ptr.loc12_33.2 (%ptr.79f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc12_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @CallGenericPtr.%pattern_type (%pattern_type.afe) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @CallGenericPtr.%pattern_type (%pattern_type.afe) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @CallGenericPtr.%pattern_type (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @CallGenericPtr.%pattern_type (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc12_39: type = name_ref T, %T.loc12_19.1 [symbolic = %T.loc12_19.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc12_40: type = ptr_type %T.ref.loc12_39 [symbolic = %ptr.loc12_33.2 (constants.%ptr.79f)] @@ -368,10 +384,10 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %CallSpecific.decl: %CallSpecific.type = fn_decl @CallSpecific [concrete = constants.%CallSpecific] { -// CHECK:STDOUT: %x.patt: %C = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %C = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.c48 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.c48 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %x.param: %C = value_param call_param0 @@ -393,7 +409,8 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Function(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_13.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_13.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -407,7 +424,8 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGeneric(%T.loc8_16.1: type) { // CHECK:STDOUT: %T.loc8_16.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_16.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_16.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc8_16.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc8_16.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -427,8 +445,9 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGenericPtr(%T.loc12_19.1: type) { // CHECK:STDOUT: %T.loc12_19.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_19.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_19.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_19.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc12_33.2: type = ptr_type %T.loc12_19.2 [symbolic = %ptr.loc12_33.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc12_33.2 [symbolic = %pattern_type (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc12_33.2 [symbolic = %require_complete (constants.%require_complete.6e5)] @@ -459,6 +478,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: specific @Function(constants.%T) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -467,6 +487,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: specific @CallGeneric(constants.%T) { // CHECK:STDOUT: %T.loc8_16.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_16.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(@CallGeneric.%T.loc8_16.2) {} @@ -475,11 +496,13 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: %T.loc12_19.2 => constants.%T // CHECK:STDOUT: %T.patt.loc12_19.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc12_33.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Function(constants.%ptr.79f) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%ptr.79f // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.6e5 @@ -490,6 +513,7 @@ fn CallSpecific(x: C) -> C { // CHECK:STDOUT: specific @Function(constants.%C) { // CHECK:STDOUT: %T.loc4_13.2 => constants.%C // CHECK:STDOUT: %T.patt.loc4_13.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type diff --git a/toolchain/check/testdata/function/generic/min_prelude/fail_type_param_mismatch.carbon b/toolchain/check/testdata/function/generic/min_prelude/fail_type_param_mismatch.carbon index 1c70700cfc26..b605129b1b18 100644 --- a/toolchain/check/testdata/function/generic/min_prelude/fail_type_param_mismatch.carbon +++ b/toolchain/check/testdata/function/generic/min_prelude/fail_type_param_mismatch.carbon @@ -24,14 +24,17 @@ fn F(T:! type, U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr [symbolic] // CHECK:STDOUT: %require_complete.b54: = require_complete_type %U [symbolic] +// CHECK:STDOUT: %pattern_type.a32: type = pattern_type %U [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -48,8 +51,8 @@ fn F(T:! type, U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc14_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc14_16.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %T.patt.loc14_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc14_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14_16.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc14_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_6.2 (constants.%T)] // CHECK:STDOUT: %U.loc14_16.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc14_16.2 (constants.%U)] @@ -58,20 +61,22 @@ fn F(T:! type, U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc14_6.1: type, %U.loc14_16.1: type) { // CHECK:STDOUT: %T.loc14_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc14_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc14_16.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc14_16.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc14_16.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc14_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14_16.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ptr.loc15_11.2: type = ptr_type %T.loc14_6.2 [symbolic = %ptr.loc15_11.2 (constants.%ptr)] // CHECK:STDOUT: %require_complete.loc15: = require_complete_type %ptr.loc15_11.2 [symbolic = %require_complete.loc15 (constants.%require_complete.6e5)] +// CHECK:STDOUT: %pattern_type.loc15: type = pattern_type %ptr.loc15_11.2 [symbolic = %pattern_type.loc15 (constants.%pattern_type.afe)] // CHECK:STDOUT: %require_complete.loc20: = require_complete_type %U.loc14_16.2 [symbolic = %require_complete.loc20 (constants.%require_complete.b54)] +// CHECK:STDOUT: %pattern_type.loc20: type = pattern_type %U.loc14_16.2 [symbolic = %pattern_type.loc20 (constants.%pattern_type.a32)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: @F.%ptr.loc15_11.2 (%ptr) = binding_pattern p -// CHECK:STDOUT: %.loc15_3: @F.%ptr.loc15_11.2 (%ptr) = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc15 (%pattern_type.afe) = binding_pattern p +// CHECK:STDOUT: %.loc15_3: @F.%pattern_type.loc15 (%pattern_type.afe) = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref @F.%ptr.loc15_11.2 (%ptr) = var p // CHECK:STDOUT: %.loc15_11: type = splice_block %ptr.loc15_11.1 [symbolic = %ptr.loc15_11.2 (constants.%ptr)] { @@ -80,7 +85,7 @@ fn F(T:! type, U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref @F.%ptr.loc15_11.2 (%ptr) = bind_name p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: @F.%U.loc14_16.2 (%U) = binding_pattern n +// CHECK:STDOUT: %n.patt: @F.%pattern_type.loc20 (%pattern_type.a32) = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %p.ref: ref @F.%ptr.loc15_11.2 (%ptr) = name_ref p, %p // CHECK:STDOUT: %.loc20_15: @F.%ptr.loc15_11.2 (%ptr) = bind_value %p.ref diff --git a/toolchain/check/testdata/function/generic/min_prelude/type_param.carbon b/toolchain/check/testdata/function/generic/min_prelude/type_param.carbon index e2cfeb165d9d..0c5bf1bad9ec 100644 --- a/toolchain/check/testdata/function/generic/min_prelude/type_param.carbon +++ b/toolchain/check/testdata/function/generic/min_prelude/type_param.carbon @@ -20,12 +20,15 @@ fn F(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -41,7 +44,7 @@ fn F(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc14_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc14_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_6.2 (constants.%T)] // CHECK:STDOUT: } @@ -49,18 +52,20 @@ fn F(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc14_6.1: type) { // CHECK:STDOUT: %T.loc14_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc14_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ptr.loc15_11.2: type = ptr_type %T.loc14_6.2 [symbolic = %ptr.loc15_11.2 (constants.%ptr)] // CHECK:STDOUT: %require_complete.loc15: = require_complete_type %ptr.loc15_11.2 [symbolic = %require_complete.loc15 (constants.%require_complete.6e5)] +// CHECK:STDOUT: %pattern_type.loc15: type = pattern_type %ptr.loc15_11.2 [symbolic = %pattern_type.loc15 (constants.%pattern_type.afe)] // CHECK:STDOUT: %require_complete.loc16: = require_complete_type %T.loc14_6.2 [symbolic = %require_complete.loc16 (constants.%require_complete.4ae)] +// CHECK:STDOUT: %pattern_type.loc16: type = pattern_type %T.loc14_6.2 [symbolic = %pattern_type.loc16 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: @F.%ptr.loc15_11.2 (%ptr) = binding_pattern p -// CHECK:STDOUT: %.loc15_3: @F.%ptr.loc15_11.2 (%ptr) = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc15 (%pattern_type.afe) = binding_pattern p +// CHECK:STDOUT: %.loc15_3: @F.%pattern_type.loc15 (%pattern_type.afe) = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref @F.%ptr.loc15_11.2 (%ptr) = var p // CHECK:STDOUT: %.loc15_11: type = splice_block %ptr.loc15_11.1 [symbolic = %ptr.loc15_11.2 (constants.%ptr)] { @@ -69,7 +74,7 @@ fn F(T:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref @F.%ptr.loc15_11.2 (%ptr) = bind_name p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: @F.%T.loc14_6.2 (%T) = binding_pattern n +// CHECK:STDOUT: %n.patt: @F.%pattern_type.loc16 (%pattern_type.7dc) = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %p.ref: ref @F.%ptr.loc15_11.2 (%ptr) = name_ref p, %p // CHECK:STDOUT: %.loc16_15: @F.%ptr.loc15_11.2 (%ptr) = bind_value %p.ref diff --git a/toolchain/check/testdata/function/generic/no_prelude/fail_deduce_imported_function.carbon b/toolchain/check/testdata/function/generic/no_prelude/fail_deduce_imported_function.carbon index 442253623f8c..e86a807d9f22 100644 --- a/toolchain/check/testdata/function/generic/no_prelude/fail_deduce_imported_function.carbon +++ b/toolchain/check/testdata/function/generic/no_prelude/fail_deduce_imported_function.carbon @@ -47,9 +47,11 @@ fn B() { // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: %Z.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Z.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.5af: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.5af = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T.as_type} [symbolic] +// CHECK:STDOUT: %pattern_type.64f: type = pattern_type %struct_type.a [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a [symbolic] @@ -62,9 +64,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {} // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %T.patt.loc4_6.1: %Z.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @A.%struct_type.a.loc4_22.2 (%struct_type.a) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @A.%struct_type.a.loc4_22.2 (%struct_type.a) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_6.1: %pattern_type.5af = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @A.%pattern_type (%pattern_type.64f) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @A.%pattern_type (%pattern_type.64f) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type] // CHECK:STDOUT: %T.loc4_6.1: %Z.type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T)] @@ -89,9 +91,10 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc4_6.1: %Z.type) { // CHECK:STDOUT: %T.loc4_6.2: %Z.type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_6.2: %Z.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_6.2: %pattern_type.5af = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc4_21.2: type = facet_access_type %T.loc4_6.2 [symbolic = %T.as_type.loc4_21.2 (constants.%T.as_type)] // CHECK:STDOUT: %struct_type.a.loc4_22.2: type = struct_type {.a: @A.%T.as_type.loc4_21.2 (%T.as_type)} [symbolic = %struct_type.a.loc4_22.2 (constants.%struct_type.a)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.loc4_22.2 [symbolic = %pattern_type (constants.%pattern_type.64f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a.loc4_22.2 [symbolic = %require_complete (constants.%require_complete)] @@ -107,6 +110,7 @@ fn B() { // CHECK:STDOUT: %T.patt.loc4_6.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc4_21.2 => constants.%T.as_type // CHECK:STDOUT: %struct_type.a.loc4_22.2 => constants.%struct_type.a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.64f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_deduce_imported_function.carbon @@ -114,9 +118,11 @@ fn B() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %T: %Z.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Z.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.3dd: type = pattern_type %Z.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.3dd = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %T.as_type} [symbolic] +// CHECK:STDOUT: %pattern_type.ea1: type = pattern_type %struct_type.a [symbolic] // CHECK:STDOUT: %A.type.00d: type = fn_type @A.1 [concrete] // CHECK:STDOUT: %A.1db: %A.type.00d = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a [symbolic] @@ -148,9 +154,9 @@ fn B() { // CHECK:STDOUT: } // CHECK:STDOUT: %Lib.import = import Lib // CHECK:STDOUT: %A.decl: %A.type.00d = fn_decl @A.1 [concrete = constants.%A.1db] { -// CHECK:STDOUT: %T.patt.loc4_6.1: %Z.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @A.1.%struct_type.a.loc4_26.2 (%struct_type.a) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @A.1.%struct_type.a.loc4_26.2 (%struct_type.a) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_6.1: %pattern_type.3dd = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @A.1.%pattern_type (%pattern_type.ea1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @A.1.%pattern_type (%pattern_type.ea1) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_13: type = splice_block %Z.ref [concrete = constants.%Z.type] { // CHECK:STDOUT: %Lib.ref: = name_ref Lib, imports.%Lib [concrete = imports.%Lib] @@ -177,9 +183,10 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A.1(%T.loc4_6.1: %Z.type) { // CHECK:STDOUT: %T.loc4_6.2: %Z.type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_6.2: %Z.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_6.2: %pattern_type.3dd = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc4_25.2: type = facet_access_type %T.loc4_6.2 [symbolic = %T.as_type.loc4_25.2 (constants.%T.as_type)] // CHECK:STDOUT: %struct_type.a.loc4_26.2: type = struct_type {.a: @A.1.%T.as_type.loc4_25.2 (%T.as_type)} [symbolic = %struct_type.a.loc4_26.2 (constants.%struct_type.a)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.loc4_26.2 [symbolic = %pattern_type (constants.%pattern_type.ea1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a.loc4_26.2 [symbolic = %require_complete (constants.%require_complete)] @@ -204,9 +211,10 @@ fn B() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A.2(imports.%Lib.import_ref.be7: %Z.type) [from "lib.carbon"] { // CHECK:STDOUT: %T: %Z.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: %Z.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.3dd = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic = %T.as_type (constants.%T.as_type)] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: @A.2.%T.as_type (%T.as_type)} [symbolic = %struct_type.a (constants.%struct_type.a)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a [symbolic = %pattern_type (constants.%pattern_type.ea1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %struct_type.a [symbolic = %require_complete (constants.%require_complete)] @@ -219,6 +227,7 @@ fn B() { // CHECK:STDOUT: %T.patt.loc4_6.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc4_25.2 => constants.%T.as_type // CHECK:STDOUT: %struct_type.a.loc4_26.2 => constants.%struct_type.a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ea1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A.2(constants.%T) { @@ -226,5 +235,6 @@ fn B() { // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %T.as_type => constants.%T.as_type // CHECK:STDOUT: %struct_type.a => constants.%struct_type.a +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ea1 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/no_prelude/forward_decl.carbon b/toolchain/check/testdata/function/generic/no_prelude/forward_decl.carbon index 235de0a4cf1a..30b59aa790e8 100644 --- a/toolchain/check/testdata/function/generic/no_prelude/forward_decl.carbon +++ b/toolchain/check/testdata/function/generic/no_prelude/forward_decl.carbon @@ -14,7 +14,8 @@ fn F(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -24,7 +25,7 @@ fn F(T:! type); // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc11_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_6.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] // CHECK:STDOUT: } @@ -32,7 +33,7 @@ fn F(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc11_6.1: type) { // CHECK:STDOUT: %T.loc11_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_6.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/function/generic/no_prelude/import_specific.carbon b/toolchain/check/testdata/function/generic/no_prelude/import_specific.carbon index f6793da4974e..8716ad156d9f 100644 --- a/toolchain/check/testdata/function/generic/no_prelude/import_specific.carbon +++ b/toolchain/check/testdata/function/generic/no_prelude/import_specific.carbon @@ -38,7 +38,8 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -53,12 +54,12 @@ fn H() { // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_6.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt.loc7_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_6.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc7_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] // CHECK:STDOUT: } @@ -66,7 +67,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_6.1: type) { // CHECK:STDOUT: %T.loc4_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_6.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -78,7 +79,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc7_6.1: type) { // CHECK:STDOUT: %T.loc7_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_6.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.specific_fn.loc8_3.2: = specific_function constants.%F, @F(%T.loc7_6.2) [symbolic = %F.specific_fn.loc8_3.2 (constants.%F.specific_fn)] @@ -118,7 +119,8 @@ fn H() { // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %F.specific_fn.04a: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -170,7 +172,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(imports.%Main.import_ref.5ab3ec.1: type) [from "library.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -179,7 +181,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(imports.%Main.import_ref.5ab3ec.2: type) [from "library.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %F.specific_fn: = specific_function constants.%F, @F(%T) [symbolic = %F.specific_fn (constants.%F.specific_fn.ef1)] diff --git a/toolchain/check/testdata/function/generic/no_prelude/indirect_generic_type.carbon b/toolchain/check/testdata/function/generic/no_prelude/indirect_generic_type.carbon index 57e04d302339..2a4461c4bacb 100644 --- a/toolchain/check/testdata/function/generic/no_prelude/indirect_generic_type.carbon +++ b/toolchain/check/testdata/function/generic/no_prelude/indirect_generic_type.carbon @@ -16,9 +16,12 @@ fn F(T:! type, p: T**) -> T* { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %ptr.a13: type = ptr_type %ptr.79f [symbolic] +// CHECK:STDOUT: %pattern_type.12d: type = pattern_type %ptr.a13 [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [symbolic] @@ -30,11 +33,11 @@ fn F(T:! type, p: T**) -> T* { // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc11_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %p.patt: @F.%ptr.loc11_21.2 (%ptr.a13) = binding_pattern p -// CHECK:STDOUT: %p.param_patt: @F.%ptr.loc11_21.2 (%ptr.a13) = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%ptr.loc11_20.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%ptr.loc11_20.2 (%ptr.79f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc11_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %p.patt: @F.%pattern_type.loc11_16 (%pattern_type.12d) = binding_pattern p +// CHECK:STDOUT: %p.param_patt: @F.%pattern_type.loc11_16 (%pattern_type.12d) = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc11_24 (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc11_24 (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc11_27: type = name_ref T, %T.loc11_6.1 [symbolic = %T.loc11_6.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc11_28: type = ptr_type %T.ref.loc11_27 [symbolic = %ptr.loc11_20.2 (constants.%ptr.79f)] @@ -53,9 +56,11 @@ fn F(T:! type, p: T**) -> T* { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc11_6.1: type) { // CHECK:STDOUT: %T.loc11_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc11_20.2: type = ptr_type %T.loc11_6.2 [symbolic = %ptr.loc11_20.2 (constants.%ptr.79f)] // CHECK:STDOUT: %ptr.loc11_21.2: type = ptr_type %ptr.loc11_20.2 [symbolic = %ptr.loc11_21.2 (constants.%ptr.a13)] +// CHECK:STDOUT: %pattern_type.loc11_16: type = pattern_type %ptr.loc11_21.2 [symbolic = %pattern_type.loc11_16 (constants.%pattern_type.12d)] +// CHECK:STDOUT: %pattern_type.loc11_24: type = pattern_type %ptr.loc11_20.2 [symbolic = %pattern_type.loc11_24 (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc11_24: = require_complete_type %ptr.loc11_20.2 [symbolic = %require_complete.loc11_24 (constants.%require_complete.6e5)] @@ -75,5 +80,7 @@ fn F(T:! type, p: T**) -> T* { // CHECK:STDOUT: %T.patt.loc11_6.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc11_20.2 => constants.%ptr.79f // CHECK:STDOUT: %ptr.loc11_21.2 => constants.%ptr.a13 +// CHECK:STDOUT: %pattern_type.loc11_16 => constants.%pattern_type.12d +// CHECK:STDOUT: %pattern_type.loc11_24 => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/no_prelude/template_param.carbon b/toolchain/check/testdata/function/generic/no_prelude/template_param.carbon index 49ba76ec2cd2..6c70cb17aba0 100644 --- a/toolchain/check/testdata/function/generic/no_prelude/template_param.carbon +++ b/toolchain/check/testdata/function/generic/no_prelude/template_param.carbon @@ -23,7 +23,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -39,7 +40,7 @@ fn G() { // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -48,7 +49,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/no_prelude/type_param_scope.carbon b/toolchain/check/testdata/function/generic/no_prelude/type_param_scope.carbon index 08712ba5eb42..94314d740e19 100644 --- a/toolchain/check/testdata/function/generic/no_prelude/type_param_scope.carbon +++ b/toolchain/check/testdata/function/generic/no_prelude/type_param_scope.carbon @@ -17,7 +17,9 @@ fn F(T:! type, n: T) -> T { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -28,11 +30,11 @@ fn F(T:! type, n: T) -> T { // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc11_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %n.patt: @F.%T.loc11_6.2 (%T) = binding_pattern n -// CHECK:STDOUT: %n.param_patt: @F.%T.loc11_6.2 (%T) = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%T.loc11_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%T.loc11_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc11_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %n.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern n +// CHECK:STDOUT: %n.param_patt: @F.%pattern_type (%pattern_type.7dc) = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc11_25: type = name_ref T, %T.loc11_6.1 [symbolic = %T.loc11_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc11_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] @@ -46,7 +48,8 @@ fn F(T:! type, n: T) -> T { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc11_6.1: type) { // CHECK:STDOUT: %T.loc11_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc11_6.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc11_6.2 [symbolic = %require_complete (constants.%require_complete)] @@ -54,7 +57,7 @@ fn F(T:! type, n: T) -> T { // CHECK:STDOUT: fn(%n.param: @F.%T.loc11_6.2 (%T)) -> @F.%T.loc11_6.2 (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: @F.%T.loc11_6.2 (%T) = binding_pattern m +// CHECK:STDOUT: %m.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern m // CHECK:STDOUT: } // CHECK:STDOUT: %n.ref: @F.%T.loc11_6.2 (%T) = name_ref n, %n // CHECK:STDOUT: %T.ref.loc12: type = name_ref T, %T.loc11_6.1 [symbolic = %T.loc11_6.2 (constants.%T)] @@ -67,5 +70,6 @@ fn F(T:! type, n: T) -> T { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc11_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc11_6.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/param_in_type.carbon b/toolchain/check/testdata/function/generic/param_in_type.carbon index c01212e7c04b..fd4ddb971877 100644 --- a/toolchain/check/testdata/function/generic/param_in_type.carbon +++ b/toolchain/check/testdata/function/generic/param_in_type.carbon @@ -16,7 +16,8 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %N.51e: %i32 = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.8e2: %i32 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %N.patt.f2c: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2fd: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete] // CHECK:STDOUT: %Convert.type.71e: type = fn_type @Convert.1, @ImplicitAs(Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1d9 = impl_witness_table (imports.%Core.import_ref.85c), @impl.971 [concrete] @@ -31,6 +32,7 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: %int.convert_checked: init Core.IntLiteral = call %bound_method(%N.51e) [symbolic] // CHECK:STDOUT: %array_type: type = array_type %int.convert_checked, %i32 [symbolic] // CHECK:STDOUT: %ptr.0ad: type = ptr_type %array_type [symbolic] +// CHECK:STDOUT: %pattern_type.c7e: type = pattern_type %ptr.0ad [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -51,9 +53,9 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %N.patt.loc11_6.1: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_6.2 (constants.%N.patt.8e2)] -// CHECK:STDOUT: %a.patt: @F.%ptr.loc11_31.2 (%ptr.0ad) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @F.%ptr.loc11_31.2 (%ptr.0ad) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %N.patt.loc11_6.1: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_6.2 (constants.%N.patt.f2c)] +// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.c7e) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @F.%pattern_type (%pattern_type.c7e) = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_10: type = splice_block %i32.loc11_10 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc11_10: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -81,23 +83,25 @@ fn F(N:! i32, a: array(i32, N)*); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%N.loc11_6.1: %i32) { // CHECK:STDOUT: %N.loc11_6.2: %i32 = bind_symbolic_name N, 0 [symbolic = %N.loc11_6.2 (constants.%N.51e)] -// CHECK:STDOUT: %N.patt.loc11_6.2: %i32 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_6.2 (constants.%N.patt.8e2)] +// CHECK:STDOUT: %N.patt.loc11_6.2: %pattern_type.7ce = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_6.2 (constants.%N.patt.f2c)] // CHECK:STDOUT: %Convert.bound: = bound_method %N.loc11_6.2, constants.%Convert.960 [symbolic = %Convert.bound (constants.%Convert.bound)] // CHECK:STDOUT: %bound_method.loc11_29.3: = bound_method %N.loc11_6.2, constants.%Convert.specific_fn [symbolic = %bound_method.loc11_29.3 (constants.%bound_method)] // CHECK:STDOUT: %int.convert_checked.loc11_29.2: init Core.IntLiteral = call %bound_method.loc11_29.3(%N.loc11_6.2) [symbolic = %int.convert_checked.loc11_29.2 (constants.%int.convert_checked)] // CHECK:STDOUT: %array_type.loc11_30.2: type = array_type %int.convert_checked.loc11_29.2, constants.%i32 [symbolic = %array_type.loc11_30.2 (constants.%array_type)] // CHECK:STDOUT: %ptr.loc11_31.2: type = ptr_type %array_type.loc11_30.2 [symbolic = %ptr.loc11_31.2 (constants.%ptr.0ad)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc11_31.2 [symbolic = %pattern_type (constants.%pattern_type.c7e)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%a.param: @F.%ptr.loc11_31.2 (%ptr.0ad)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%N.51e) { // CHECK:STDOUT: %N.loc11_6.2 => constants.%N.51e -// CHECK:STDOUT: %N.patt.loc11_6.2 => constants.%N.patt.8e2 +// CHECK:STDOUT: %N.patt.loc11_6.2 => constants.%N.patt.f2c // CHECK:STDOUT: %Convert.bound => constants.%Convert.bound // CHECK:STDOUT: %bound_method.loc11_29.3 => constants.%bound_method // CHECK:STDOUT: %int.convert_checked.loc11_29.2 => constants.%int.convert_checked // CHECK:STDOUT: %array_type.loc11_30.2 => constants.%array_type // CHECK:STDOUT: %ptr.loc11_31.2 => constants.%ptr.0ad +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c7e // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/redeclare.carbon b/toolchain/check/testdata/function/generic/redeclare.carbon index bc518e310172..d7ad92f6777c 100644 --- a/toolchain/check/testdata/function/generic/redeclare.carbon +++ b/toolchain/check/testdata/function/generic/redeclare.carbon @@ -94,8 +94,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr [symbolic] @@ -116,9 +118,9 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl.loc4: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] -// CHECK:STDOUT: %return.patt: @F.%ptr.loc4_20.2 (%ptr) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%ptr.loc4_20.2 (%ptr) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc6: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.afe) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4: type = name_ref T, %T.loc4_6.1 [symbolic = %T.loc4_6.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_20.1: type = ptr_type %T.ref.loc4 [symbolic = %ptr.loc4_20.2 (constants.%ptr)] @@ -127,9 +129,9 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %return.loc4: ref @F.%ptr.loc4_20.2 (%ptr) = return_slot %return.param.loc4 // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc6: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] -// CHECK:STDOUT: %return.patt: @F.%ptr.loc4_20.2 (%ptr) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%ptr.loc4_20.2 (%ptr) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc6: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.afe) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc6 [symbolic = %T.loc4_6.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc6: type = ptr_type %T.ref.loc6 [symbolic = %ptr.loc4_20.2 (constants.%ptr)] @@ -141,8 +143,9 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_6.1: type) { // CHECK:STDOUT: %T.loc4_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc4_20.2: type = ptr_type %T.loc4_6.2 [symbolic = %ptr.loc4_20.2 (constants.%ptr)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_20.2 [symbolic = %pattern_type (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc4_20.2 [symbolic = %require_complete (constants.%require_complete)] @@ -164,6 +167,7 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %T.loc4_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4 => constants.%T.patt // CHECK:STDOUT: %ptr.loc4_20.2 => constants.%ptr +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete @@ -176,13 +180,16 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %F.type.b25846.1: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.c41931.1: %F.type.b25846.1 = struct_value () [concrete] // CHECK:STDOUT: %ptr.b51: type = ptr_type %U [symbolic] +// CHECK:STDOUT: %pattern_type.ead: type = pattern_type %ptr.b51 [symbolic] // CHECK:STDOUT: %F.type.b25846.2: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41931.2: %F.type.b25846.2 = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.b51 [symbolic] @@ -202,10 +209,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl.loc4: %F.type.b25846.1 = fn_decl @F.1 [concrete = constants.%F.c41931.1] { -// CHECK:STDOUT: %T.patt.loc4_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc4_16.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt)] -// CHECK:STDOUT: %return.patt: @F.1.%ptr.loc4_30.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%ptr.loc4_30.2 (%ptr.79f) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.afe) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_6.1 [symbolic = %T.loc4_6.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.2 (constants.%ptr.79f)] @@ -215,10 +222,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %return: ref @F.1.%ptr.loc4_30.2 (%ptr.79f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc13: %F.type.b25846.2 = fn_decl @F.2 [concrete = constants.%F.c41931.2] { -// CHECK:STDOUT: %T.patt.loc13_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc13_16.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_16.2 (constants.%U.patt)] -// CHECK:STDOUT: %return.patt: @F.2.%ptr.loc13_30.2 (%ptr.b51) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%ptr.loc13_30.2 (%ptr.b51) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc13_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc13_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type (%pattern_type.ead) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type (%pattern_type.ead) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13_16.1 [symbolic = %U.loc13_16.2 (constants.%U)] // CHECK:STDOUT: %ptr.loc13_30.1: type = ptr_type %U.ref [symbolic = %ptr.loc13_30.2 (constants.%ptr.b51)] @@ -231,20 +238,22 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.1(%T.loc4_6.1: type, %U.loc4_16.1: type) { // CHECK:STDOUT: %T.loc4_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc4_16.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc4_16.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc4_16.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt)] // CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.loc4_6.2 [symbolic = %ptr.loc4_30.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.2 [symbolic = %pattern_type (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @F.1.%ptr.loc4_30.2 (%ptr.79f); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(%T.loc13_6.1: type, %U.loc13_16.1: type) { // CHECK:STDOUT: %T.loc13_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc13_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc13_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc13_16.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc13_16.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc13_16.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_16.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc13_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_16.2 (constants.%U.patt)] // CHECK:STDOUT: %ptr.loc13_30.2: type = ptr_type %U.loc13_16.2 [symbolic = %ptr.loc13_30.2 (constants.%ptr.b51)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_30.2 [symbolic = %pattern_type (constants.%pattern_type.ead)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc13_30.2 [symbolic = %require_complete (constants.%require_complete)] @@ -263,6 +272,7 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %U.loc4_16.2 => constants.%U // CHECK:STDOUT: %U.patt.loc4_16.2 => constants.%U.patt // CHECK:STDOUT: %ptr.loc4_30.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%T, constants.%U) { @@ -271,23 +281,27 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %U.loc13_16.2 => constants.%U // CHECK:STDOUT: %U.patt.loc13_16.2 => constants.%U.patt // CHECK:STDOUT: %ptr.loc13_30.2 => constants.%ptr.b51 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ead // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_reorder.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %U.336: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt.7a9: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt.cec: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T.8b3 [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [symbolic] // CHECK:STDOUT: %F.type.b25846.1: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.c41931.1: %F.type.b25846.1 = struct_value () [concrete] // CHECK:STDOUT: %U.8b3: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt.e01: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt.250: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %T.336: type = bind_symbolic_name T, 1 [symbolic] -// CHECK:STDOUT: %T.patt.7a9: type = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %T.patt.cec: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %ptr.b51: type = ptr_type %T.336 [symbolic] +// CHECK:STDOUT: %pattern_type.ead: type = pattern_type %ptr.b51 [symbolic] // CHECK:STDOUT: %F.type.b25846.2: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41931.2: %F.type.b25846.2 = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.b51 [symbolic] @@ -307,10 +321,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl.loc4: %F.type.b25846.1 = fn_decl @F.1 [concrete = constants.%F.c41931.1] { -// CHECK:STDOUT: %T.patt.loc4_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt.e01)] -// CHECK:STDOUT: %U.patt.loc4_16.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt.7a9)] -// CHECK:STDOUT: %return.patt: @F.1.%ptr.loc4_30.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%ptr.loc4_30.2 (%ptr.79f) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt.250)] +// CHECK:STDOUT: %U.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt.cec)] +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.afe) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_6.1 [symbolic = %T.loc4_6.2 (constants.%T.8b3)] // CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.2 (constants.%ptr.79f)] @@ -320,10 +334,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %return: ref @F.1.%ptr.loc4_30.2 (%ptr.79f) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc13: %F.type.b25846.2 = fn_decl @F.2 [concrete = constants.%F.c41931.2] { -// CHECK:STDOUT: %U.patt.loc13_6.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_6.2 (constants.%U.patt.e01)] -// CHECK:STDOUT: %T.patt.loc13_16.1: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_16.2 (constants.%T.patt.7a9)] -// CHECK:STDOUT: %return.patt: @F.2.%ptr.loc13_30.2 (%ptr.b51) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%ptr.loc13_30.2 (%ptr.b51) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc13_6.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_6.2 (constants.%U.patt.250)] +// CHECK:STDOUT: %T.patt.loc13_16.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_16.2 (constants.%T.patt.cec)] +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type (%pattern_type.ead) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type (%pattern_type.ead) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13: type = name_ref T, %T.loc13_16.1 [symbolic = %T.loc13_16.2 (constants.%T.336)] // CHECK:STDOUT: %ptr.loc13_30.1: type = ptr_type %T.ref.loc13 [symbolic = %ptr.loc13_30.2 (constants.%ptr.b51)] @@ -336,20 +350,22 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.1(%T.loc4_6.1: type, %U.loc4_16.1: type) { // CHECK:STDOUT: %T.loc4_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc4_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt.250)] // CHECK:STDOUT: %U.loc4_16.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc4_16.2 (constants.%U.336)] -// CHECK:STDOUT: %U.patt.loc4_16.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt.7a9)] +// CHECK:STDOUT: %U.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt.cec)] // CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.loc4_6.2 [symbolic = %ptr.loc4_30.2 (constants.%ptr.79f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.2 [symbolic = %pattern_type (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @F.1.%ptr.loc4_30.2 (%ptr.79f); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(%U.loc13_6.1: type, %T.loc13_16.1: type) { // CHECK:STDOUT: %U.loc13_6.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc13_6.2 (constants.%U.8b3)] -// CHECK:STDOUT: %U.patt.loc13_6.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_6.2 (constants.%U.patt.e01)] +// CHECK:STDOUT: %U.patt.loc13_6.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_6.2 (constants.%U.patt.250)] // CHECK:STDOUT: %T.loc13_16.2: type = bind_symbolic_name T, 1 [symbolic = %T.loc13_16.2 (constants.%T.336)] -// CHECK:STDOUT: %T.patt.loc13_16.2: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_16.2 (constants.%T.patt.7a9)] +// CHECK:STDOUT: %T.patt.loc13_16.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_16.2 (constants.%T.patt.cec)] // CHECK:STDOUT: %ptr.loc13_30.2: type = ptr_type %T.loc13_16.2 [symbolic = %ptr.loc13_30.2 (constants.%ptr.b51)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_30.2 [symbolic = %pattern_type (constants.%pattern_type.ead)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc13_30.2 [symbolic = %require_complete (constants.%require_complete)] @@ -364,35 +380,40 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%T.8b3, constants.%U.336) { // CHECK:STDOUT: %T.loc4_6.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc4_6.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_6.2 => constants.%T.patt.250 // CHECK:STDOUT: %U.loc4_16.2 => constants.%U.336 -// CHECK:STDOUT: %U.patt.loc4_16.2 => constants.%U.patt.7a9 +// CHECK:STDOUT: %U.patt.loc4_16.2 => constants.%U.patt.cec // CHECK:STDOUT: %ptr.loc4_30.2 => constants.%ptr.79f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%U.8b3, constants.%T.336) { // CHECK:STDOUT: %U.loc13_6.2 => constants.%U.8b3 -// CHECK:STDOUT: %U.patt.loc13_6.2 => constants.%U.patt.e01 +// CHECK:STDOUT: %U.patt.loc13_6.2 => constants.%U.patt.250 // CHECK:STDOUT: %T.loc13_16.2 => constants.%T.336 -// CHECK:STDOUT: %T.patt.loc13_16.2 => constants.%T.patt.7a9 +// CHECK:STDOUT: %T.patt.loc13_16.2 => constants.%T.patt.cec // CHECK:STDOUT: %ptr.loc13_30.2 => constants.%ptr.b51 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ead // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_rename.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %U.336: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt.7a9: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt.cec: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %ptr.79f131.1: type = ptr_type %T.8b3 [symbolic] +// CHECK:STDOUT: %pattern_type.afe393.1: type = pattern_type %ptr.79f131.1 [symbolic] // CHECK:STDOUT: %F.type.b25846.1: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.c41931.1: %F.type.b25846.1 = struct_value () [concrete] // CHECK:STDOUT: %U.8b3: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt.e01: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt.250: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %T.336: type = bind_symbolic_name T, 1 [symbolic] -// CHECK:STDOUT: %T.patt.7a9: type = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %T.patt.cec: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %ptr.79f131.2: type = ptr_type %U.8b3 [symbolic] +// CHECK:STDOUT: %pattern_type.afe393.2: type = pattern_type %ptr.79f131.2 [symbolic] // CHECK:STDOUT: %F.type.b25846.2: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41931.2: %F.type.b25846.2 = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.79f131.2 [symbolic] @@ -412,10 +433,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl.loc4: %F.type.b25846.1 = fn_decl @F.1 [concrete = constants.%F.c41931.1] { -// CHECK:STDOUT: %T.patt.loc4_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt.e01)] -// CHECK:STDOUT: %U.patt.loc4_16.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt.7a9)] -// CHECK:STDOUT: %return.patt: @F.1.%ptr.loc4_30.2 (%ptr.79f131.1) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%ptr.loc4_30.2 (%ptr.79f131.1) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt.250)] +// CHECK:STDOUT: %U.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt.cec)] +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.afe393.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.afe393.1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_6.1 [symbolic = %T.loc4_6.2 (constants.%T.8b3)] // CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.2 (constants.%ptr.79f131.1)] @@ -425,10 +446,10 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: %return: ref @F.1.%ptr.loc4_30.2 (%ptr.79f131.1) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc13: %F.type.b25846.2 = fn_decl @F.2 [concrete = constants.%F.c41931.2] { -// CHECK:STDOUT: %U.patt.loc13_6.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_6.2 (constants.%U.patt.e01)] -// CHECK:STDOUT: %T.patt.loc13_16.1: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_16.2 (constants.%T.patt.7a9)] -// CHECK:STDOUT: %return.patt: @F.2.%ptr.loc13_30.2 (%ptr.79f131.2) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%ptr.loc13_30.2 (%ptr.79f131.2) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc13_6.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_6.2 (constants.%U.patt.250)] +// CHECK:STDOUT: %T.patt.loc13_16.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_16.2 (constants.%T.patt.cec)] +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type (%pattern_type.afe393.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type (%pattern_type.afe393.2) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13_6.1 [symbolic = %U.loc13_6.2 (constants.%U.8b3)] // CHECK:STDOUT: %ptr.loc13_30.1: type = ptr_type %U.ref [symbolic = %ptr.loc13_30.2 (constants.%ptr.79f131.2)] @@ -441,20 +462,22 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.1(%T.loc4_6.1: type, %U.loc4_16.1: type) { // CHECK:STDOUT: %T.loc4_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_6.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc4_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_6.2 (constants.%T.patt.250)] // CHECK:STDOUT: %U.loc4_16.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc4_16.2 (constants.%U.336)] -// CHECK:STDOUT: %U.patt.loc4_16.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt.7a9)] +// CHECK:STDOUT: %U.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_16.2 (constants.%U.patt.cec)] // CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.loc4_6.2 [symbolic = %ptr.loc4_30.2 (constants.%ptr.79f131.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.2 [symbolic = %pattern_type (constants.%pattern_type.afe393.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @F.1.%ptr.loc4_30.2 (%ptr.79f131.1); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(%U.loc13_6.1: type, %T.loc13_16.1: type) { // CHECK:STDOUT: %U.loc13_6.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc13_6.2 (constants.%U.8b3)] -// CHECK:STDOUT: %U.patt.loc13_6.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_6.2 (constants.%U.patt.e01)] +// CHECK:STDOUT: %U.patt.loc13_6.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_6.2 (constants.%U.patt.250)] // CHECK:STDOUT: %T.loc13_16.2: type = bind_symbolic_name T, 1 [symbolic = %T.loc13_16.2 (constants.%T.336)] -// CHECK:STDOUT: %T.patt.loc13_16.2: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_16.2 (constants.%T.patt.7a9)] +// CHECK:STDOUT: %T.patt.loc13_16.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_16.2 (constants.%T.patt.cec)] // CHECK:STDOUT: %ptr.loc13_30.2: type = ptr_type %U.loc13_6.2 [symbolic = %ptr.loc13_30.2 (constants.%ptr.79f131.2)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_30.2 [symbolic = %pattern_type (constants.%pattern_type.afe393.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %ptr.loc13_30.2 [symbolic = %require_complete (constants.%require_complete)] @@ -469,17 +492,19 @@ fn F(U:! type, T:! type) -> U* { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%T.8b3, constants.%U.336) { // CHECK:STDOUT: %T.loc4_6.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc4_6.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_6.2 => constants.%T.patt.250 // CHECK:STDOUT: %U.loc4_16.2 => constants.%U.336 -// CHECK:STDOUT: %U.patt.loc4_16.2 => constants.%U.patt.7a9 +// CHECK:STDOUT: %U.patt.loc4_16.2 => constants.%U.patt.cec // CHECK:STDOUT: %ptr.loc4_30.2 => constants.%ptr.79f131.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe393.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%U.8b3, constants.%T.336) { // CHECK:STDOUT: %U.loc13_6.2 => constants.%U.8b3 -// CHECK:STDOUT: %U.patt.loc13_6.2 => constants.%U.patt.e01 +// CHECK:STDOUT: %U.patt.loc13_6.2 => constants.%U.patt.250 // CHECK:STDOUT: %T.loc13_16.2 => constants.%T.336 -// CHECK:STDOUT: %T.patt.loc13_16.2 => constants.%T.patt.7a9 +// CHECK:STDOUT: %T.patt.loc13_16.2 => constants.%T.patt.cec // CHECK:STDOUT: %ptr.loc13_30.2 => constants.%ptr.79f131.2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.afe393.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/resolve_used.carbon b/toolchain/check/testdata/function/generic/resolve_used.carbon index 112020abafb0..29a090aee173 100644 --- a/toolchain/check/testdata/function/generic/resolve_used.carbon +++ b/toolchain/check/testdata/function/generic/resolve_used.carbon @@ -41,19 +41,22 @@ fn CallNegative() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %ErrorIfNIsZero.type: type = fn_type @ErrorIfNIsZero [concrete] // CHECK:STDOUT: %ErrorIfNIsZero: %ErrorIfNIsZero.type = struct_value () [concrete] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N) [symbolic] // CHECK:STDOUT: %require_complete.b4f: = require_complete_type %Int [symbolic] +// CHECK:STDOUT: %pattern_type.896: type = pattern_type %Int [symbolic] // CHECK:STDOUT: %CallNegative.type: type = fn_type @CallNegative [concrete] // CHECK:STDOUT: %CallNegative: %CallNegative.type = struct_value () [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ErrorIfNIsZero.specific_fn: = specific_function %ErrorIfNIsZero, @ErrorIfNIsZero(%int_0) [concrete] // CHECK:STDOUT: %i0: type = class_type @Int, @Int(%int_0) [concrete] // CHECK:STDOUT: %complete_type.d94: = complete_type_witness [concrete] +// CHECK:STDOUT: %pattern_type.47b: type = pattern_type %i0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -75,7 +78,7 @@ fn CallNegative() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ErrorIfNIsZero.decl: %ErrorIfNIsZero.type = fn_decl @ErrorIfNIsZero [concrete = constants.%ErrorIfNIsZero] { -// CHECK:STDOUT: %N.patt.loc4_19.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_19.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc4_19.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_19.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_39.1: type = splice_block %.loc4_39.3 [concrete = Core.IntLiteral] { // CHECK:STDOUT: %Core.ref.loc4: = name_ref Core, imports.%Core [concrete = imports.%Core] @@ -91,17 +94,18 @@ fn CallNegative() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ErrorIfNIsZero(%N.loc4_19.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc4_19.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc4_19.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc4_19.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_19.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc4_19.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_19.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Int.loc12_20.2: type = class_type @Int, @Int(%N.loc4_19.2) [symbolic = %Int.loc12_20.2 (constants.%Int)] // CHECK:STDOUT: %require_complete: = require_complete_type %Int.loc12_20.2 [symbolic = %require_complete (constants.%require_complete.b4f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Int.loc12_20.2 [symbolic = %pattern_type (constants.%pattern_type.896)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @ErrorIfNIsZero.%Int.loc12_20.2 (%Int) = binding_pattern v -// CHECK:STDOUT: %.loc12_3: @ErrorIfNIsZero.%Int.loc12_20.2 (%Int) = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: @ErrorIfNIsZero.%pattern_type (%pattern_type.896) = binding_pattern v +// CHECK:STDOUT: %.loc12_3: @ErrorIfNIsZero.%pattern_type (%pattern_type.896) = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @ErrorIfNIsZero.%Int.loc12_20.2 (%Int) = var v // CHECK:STDOUT: %.loc12_20: type = splice_block %Int.loc12_20.1 [symbolic = %Int.loc12_20.2 (constants.%Int)] { @@ -136,5 +140,6 @@ fn CallNegative() { // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Int.loc12_20.2 => constants.%i0 // CHECK:STDOUT: %require_complete => constants.%complete_type.d94 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.47b // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/generic/return_slot.carbon b/toolchain/check/testdata/function/generic/return_slot.carbon index 0ab53ea750b8..cf6390802689 100644 --- a/toolchain/check/testdata/function/generic/return_slot.carbon +++ b/toolchain/check/testdata/function/generic/return_slot.carbon @@ -24,11 +24,13 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Wrap.type: type = generic_class_type @Wrap [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Wrap.generic: %Wrap.type = struct_value () [concrete] // CHECK:STDOUT: %Wrap.af6: type = class_type @Wrap, @Wrap(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Make.type.652: type = fn_type @Make, @Wrap(%T) [symbolic] // CHECK:STDOUT: %Make.eb2: %Make.type.652 = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -47,14 +49,17 @@ fn G() { // CHECK:STDOUT: %complete_type.22a: = complete_type_witness %struct_type.arr.5f2 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Wrap.f84: type = class_type @Wrap, @Wrap(%i32) [concrete] // CHECK:STDOUT: %Make.type.572: type = fn_type @Make, @Wrap(%i32) [concrete] // CHECK:STDOUT: %Make.2c5: %Make.type.572 = struct_value () [concrete] // CHECK:STDOUT: %Make.specific_fn.f29: = specific_function %Make.2c5, @Make(%i32) [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Wrap.1aa: type = class_type @Wrap, @Wrap(%empty_tuple.type) [concrete] // CHECK:STDOUT: %Make.type.20e: type = fn_type @Make, @Wrap(%empty_tuple.type) [concrete] // CHECK:STDOUT: %Make.de0: %Make.type.20e = struct_value () [concrete] // CHECK:STDOUT: %Make.specific_fn.e43: = specific_function %Make.de0, @Make(%empty_tuple.type) [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Wrap.2eb: type = class_type @Wrap, @Wrap(%C) [concrete] // CHECK:STDOUT: %Make.type.708: type = fn_type @Make, @Wrap(%C) [concrete] // CHECK:STDOUT: %Make.e4b: %Make.type.708 = struct_value () [concrete] @@ -79,7 +84,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Wrap.decl: %Wrap.type = class_decl @Wrap [concrete = constants.%Wrap.generic] { -// CHECK:STDOUT: %T.patt.loc11_12.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_12.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_12.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_12.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_12.2 (constants.%T)] // CHECK:STDOUT: } @@ -89,7 +94,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @Wrap(%T.loc11_12.1: type) { // CHECK:STDOUT: %T.loc11_12.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_12.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_12.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_12.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_12.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Make.type: type = fn_type @Make, @Wrap(%T.loc11_12.2) [symbolic = %Make.type (constants.%Make.type.652)] @@ -97,8 +102,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Make.decl: @Wrap.%Make.type (%Make.type.652) = fn_decl @Make [symbolic = @Wrap.%Make (constants.%Make.eb2)] { -// CHECK:STDOUT: %return.patt: @Make.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Make.%T (%T) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Make.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Make.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Wrap.%T.loc11_12.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %return.param: ref @Make.%T (%T) = out_param call_param0 @@ -132,6 +137,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Make(@Wrap.%T.loc11_12.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -154,8 +160,8 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc18_3: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc18_3: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %Wrap.ref.loc18: %Wrap.type = name_ref Wrap, file.%Wrap.decl [concrete = constants.%Wrap.generic] @@ -173,8 +179,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %i32 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b -// CHECK:STDOUT: %.loc19_3: %empty_tuple.type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = binding_pattern b +// CHECK:STDOUT: %.loc19_3: %pattern_type.cb1 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var b // CHECK:STDOUT: %Wrap.ref.loc19: %Wrap.type = name_ref Wrap, file.%Wrap.decl [concrete = constants.%Wrap.generic] @@ -192,8 +198,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_tuple.type = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc20_3.1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc20_3.1: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %Wrap.ref.loc20: %Wrap.type = name_ref Wrap, file.%Wrap.decl [concrete = constants.%Wrap.generic] @@ -221,6 +227,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -246,6 +253,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%i32) { // CHECK:STDOUT: %T => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -265,6 +273,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%empty_tuple.type) { // CHECK:STDOUT: %T => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.782 @@ -284,6 +293,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%C) { // CHECK:STDOUT: %T => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.22a diff --git a/toolchain/check/testdata/function/generic/undefined.carbon b/toolchain/check/testdata/function/generic/undefined.carbon index c33c706119b3..e23e5859ad1b 100644 --- a/toolchain/check/testdata/function/generic/undefined.carbon +++ b/toolchain/check/testdata/function/generic/undefined.carbon @@ -55,12 +55,15 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Defined.type: type = fn_type @Defined [concrete] // CHECK:STDOUT: %Defined: %Defined.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %CallDefined.type: type = fn_type @CallDefined [concrete] // CHECK:STDOUT: %CallDefined: %CallDefined.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -98,11 +101,11 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Defined.decl: %Defined.type = fn_decl @Defined [concrete = constants.%Defined] { -// CHECK:STDOUT: %T.patt.loc4_12.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_12.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Defined.%T.loc4_12.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Defined.%T.loc4_12.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Defined.%T.loc4_12.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Defined.%T.loc4_12.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_12.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_31: type = name_ref T, %T.loc4_12.1 [symbolic = %T.loc4_12.2 (constants.%T)] // CHECK:STDOUT: %T.loc4_12.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_12.2 (constants.%T)] @@ -113,8 +116,8 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: %return: ref @Defined.%T.loc4_12.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallDefined.decl: %CallDefined.type = fn_decl @CallDefined [concrete = constants.%CallDefined] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc8: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc8: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -125,7 +128,8 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Defined(%T.loc4_12.1: type) { // CHECK:STDOUT: %T.loc4_12.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_12.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_12.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_12.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_12.2 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_12.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -160,11 +164,13 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: specific @Defined(constants.%T) { // CHECK:STDOUT: %T.loc4_12.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_12.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Defined(constants.%i32) { // CHECK:STDOUT: %T.loc4_12.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc4_12.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -174,11 +180,14 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Defined.type: type = fn_type @Defined [concrete] // CHECK:STDOUT: %Defined: %Defined.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %CallDefined.type: type = fn_type @CallDefined [concrete] // CHECK:STDOUT: %CallDefined: %CallDefined.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -217,11 +226,11 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Defined.decl.loc4: %Defined.type = fn_decl @Defined [concrete = constants.%Defined] { -// CHECK:STDOUT: %T.patt.loc10: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Defined.%T.loc4_12.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Defined.%T.loc4_12.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Defined.%T.loc4_12.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Defined.%T.loc4_12.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc10: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_31: type = name_ref T, %T.loc4_12.1 [symbolic = %T.loc4_12.2 (constants.%T)] // CHECK:STDOUT: %T.loc4_12.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_12.2 (constants.%T)] @@ -232,8 +241,8 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: %return.loc4: ref @Defined.%T.loc4_12.2 (%T) = return_slot %return.param.loc4 // CHECK:STDOUT: } // CHECK:STDOUT: %CallDefined.decl: %CallDefined.type = fn_decl @CallDefined [concrete = constants.%CallDefined] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -241,11 +250,11 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Defined.decl.loc10: %Defined.type = fn_decl @Defined [concrete = constants.%Defined] { -// CHECK:STDOUT: %T.patt.loc10: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Defined.%T.loc4_12.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Defined.%T.loc4_12.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Defined.%T.loc4_12.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Defined.%T.loc4_12.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc10: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Defined.%pattern_type (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc10_31: type = name_ref T, %T.loc10 [symbolic = %T.loc4_12.2 (constants.%T)] // CHECK:STDOUT: %T.loc10: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_12.2 (constants.%T)] @@ -259,7 +268,8 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Defined(%T.loc4_12.1: type) { // CHECK:STDOUT: %T.loc4_12.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_12.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_12.2 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_12.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -294,11 +304,13 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: specific @Defined(constants.%T) { // CHECK:STDOUT: %T.loc4_12.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Defined(constants.%i32) { // CHECK:STDOUT: %T.loc4_12.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc4 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -308,11 +320,14 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Undefined.type: type = fn_type @Undefined [concrete] // CHECK:STDOUT: %Undefined: %Undefined.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %CallUndefined.type: type = fn_type @CallUndefined [concrete] // CHECK:STDOUT: %CallUndefined: %CallUndefined.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -348,11 +363,11 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Undefined.decl: %Undefined.type = fn_decl @Undefined [concrete = constants.%Undefined] { -// CHECK:STDOUT: %T.patt.loc4_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Undefined.%T.loc4_14.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Undefined.%T.loc4_14.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Undefined.%T.loc4_14.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Undefined.%T.loc4_14.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Undefined.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Undefined.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Undefined.%pattern_type (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Undefined.%pattern_type (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_33: type = name_ref T, %T.loc4_14.1 [symbolic = %T.loc4_14.2 (constants.%T)] // CHECK:STDOUT: %T.loc4_14.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_14.2 (constants.%T)] @@ -363,8 +378,8 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: %return: ref @Undefined.%T.loc4_14.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallUndefined.decl: %CallUndefined.type = fn_decl @CallUndefined [concrete = constants.%CallUndefined] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -375,7 +390,8 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Undefined(%T.loc4_14.1: type) { // CHECK:STDOUT: %T.loc4_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_14.2 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @Undefined.%T.loc4_14.2 (%T)) -> @Undefined.%T.loc4_14.2 (%T); // CHECK:STDOUT: } @@ -403,10 +419,12 @@ fn CallUndefined() -> i32 { // CHECK:STDOUT: specific @Undefined(constants.%T) { // CHECK:STDOUT: %T.loc4_14.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Undefined(constants.%i32) { // CHECK:STDOUT: %T.loc4_14.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/call_basic_depth.carbon b/toolchain/check/testdata/generic/call_basic_depth.carbon index 079e649e70f6..7f059b924f19 100644 --- a/toolchain/check/testdata/generic/call_basic_depth.carbon +++ b/toolchain/check/testdata/generic/call_basic_depth.carbon @@ -43,8 +43,11 @@ fn M() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Cfn.type: type = fn_type @Cfn [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Cfn: %Cfn.type = struct_value () [concrete] @@ -66,6 +69,7 @@ fn M() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -106,9 +110,9 @@ fn M() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc16_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%T.loc16_6.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%T.loc16_6.2 (%T) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc16_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc16_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc16_6.2 (constants.%T)] // CHECK:STDOUT: %x.param: @F.%T.loc16_6.2 (%T) = value_param call_param0 @@ -116,11 +120,11 @@ fn M() { // CHECK:STDOUT: %x: @F.%T.loc16_6.2 (%T) = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %T.patt.loc19_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @H.%T.loc19_6.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @H.%T.loc19_6.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @H.%T.loc19_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @H.%T.loc19_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc19_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @H.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @H.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @H.%pattern_type (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @H.%pattern_type (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc19_25: type = name_ref T, %T.loc19_6.1 [symbolic = %T.loc19_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc19_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc19_6.2 (constants.%T)] @@ -131,11 +135,11 @@ fn M() { // CHECK:STDOUT: %return: ref @H.%T.loc19_6.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt.loc25_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @G.%T.loc25_6.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @G.%T.loc25_6.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @G.%T.loc25_6.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @G.%T.loc25_6.2 (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc25_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @G.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @G.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @G.%pattern_type (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @G.%pattern_type (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc25_25: type = name_ref T, %T.loc25_6.1 [symbolic = %T.loc25_6.2 (constants.%T)] // CHECK:STDOUT: %T.loc25_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc25_6.2 (constants.%T)] @@ -150,11 +154,11 @@ fn M() { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %Cfn.decl: %Cfn.type = fn_decl @Cfn [concrete = constants.%Cfn] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %T.patt.loc12_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_22.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Cfn.%T.loc12_22.1 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Cfn.%T.loc12_22.1 (%T) = value_param_pattern %x.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc12_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Cfn.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Cfn.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -175,7 +179,8 @@ fn M() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Cfn(%T.loc12_22.2: type) { // CHECK:STDOUT: %T.loc12_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_22.1 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc12_22.1 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc12_22.1 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -188,7 +193,8 @@ fn M() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc16_6.1: type) { // CHECK:STDOUT: %T.loc16_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc16_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc16_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc16_6.2 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc16_6.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -201,7 +207,8 @@ fn M() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @H(%T.loc19_6.1: type) { // CHECK:STDOUT: %T.loc19_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc19_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc19_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc19_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc19_6.2 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc19_6.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -220,7 +227,8 @@ fn M() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc25_6.1: type) { // CHECK:STDOUT: %T.loc25_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc25_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc25_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc25_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc25_6.2 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc25_6.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -239,8 +247,8 @@ fn M() { // CHECK:STDOUT: %F.specific_fn.loc27_3.1: = specific_function %F.ref, @F(constants.%T) [symbolic = %F.specific_fn.loc27_3.2 (constants.%F.specific_fn.ef1)] // CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn.loc27_3.1(%x.ref.loc27) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc29: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc29: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -261,8 +269,8 @@ fn M() { // CHECK:STDOUT: fn @M() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %.loc35_3.1: %i32 = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %.loc35_3.1: %pattern_type.7ce = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var n // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -279,8 +287,8 @@ fn M() { // CHECK:STDOUT: } // CHECK:STDOUT: %n: ref %i32 = bind_name n, %n.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m -// CHECK:STDOUT: %.loc36_3: %i32 = var_pattern %m.patt +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m +// CHECK:STDOUT: %.loc36_3: %pattern_type.7ce = var_pattern %m.patt // CHECK:STDOUT: } // CHECK:STDOUT: %m.var: ref %i32 = var m // CHECK:STDOUT: %.loc36_10: type = splice_block %i32.loc36 [concrete = constants.%i32] { @@ -306,6 +314,7 @@ fn M() { // CHECK:STDOUT: specific @Cfn(constants.%T) { // CHECK:STDOUT: %T.loc12_22.1 => constants.%T // CHECK:STDOUT: %T.patt.loc12_22.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -314,6 +323,7 @@ fn M() { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc16_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc16_6.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -322,6 +332,7 @@ fn M() { // CHECK:STDOUT: specific @H(constants.%T) { // CHECK:STDOUT: %T.loc19_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc19_6.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -333,6 +344,7 @@ fn M() { // CHECK:STDOUT: specific @G(constants.%T) { // CHECK:STDOUT: %T.loc25_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc25_6.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @H(@G.%T.loc25_6.2) {} @@ -344,6 +356,7 @@ fn M() { // CHECK:STDOUT: specific @F(constants.%i32) { // CHECK:STDOUT: %T.loc16_6.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc16_6.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -352,6 +365,7 @@ fn M() { // CHECK:STDOUT: specific @G(constants.%i32) { // CHECK:STDOUT: %T.loc25_6.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc25_6.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -363,6 +377,7 @@ fn M() { // CHECK:STDOUT: specific @H(constants.%i32) { // CHECK:STDOUT: %T.loc19_6.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc19_6.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -372,6 +387,7 @@ fn M() { // CHECK:STDOUT: specific @Cfn(constants.%i32) { // CHECK:STDOUT: %T.loc12_22.1 => constants.%i32 // CHECK:STDOUT: %T.patt.loc12_22.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a diff --git a/toolchain/check/testdata/generic/complete_type.carbon b/toolchain/check/testdata/generic/complete_type.carbon index 130b627b237f..770b583cc4ae 100644 --- a/toolchain/check/testdata/generic/complete_type.carbon +++ b/toolchain/check/testdata/generic/complete_type.carbon @@ -81,7 +81,8 @@ fn G() { F(B); } // CHECK:STDOUT: constants { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A.130: type = class_type @A, @A(%T) [symbolic] @@ -90,6 +91,7 @@ fn G() { F(B); } // CHECK:STDOUT: %struct_type.v.ff1: type = struct_type {.v: %T} [symbolic] // CHECK:STDOUT: %complete_type.460: = complete_type_witness %struct_type.v.ff1 [symbolic] // CHECK:STDOUT: %A.1d4: type = class_type @A, @A(%B) [concrete] +// CHECK:STDOUT: %pattern_type.1b7: type = pattern_type %A.1d4 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %A.elem.4ce: type = unbound_element_type %A.1d4, %B [concrete] @@ -116,13 +118,13 @@ fn G() { F(B); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %B.decl.loc4: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt.loc6_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.patt: %A.1d4 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %A.1d4 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.1b7 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.1b7 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %A.1d4 = value_param call_param0 // CHECK:STDOUT: %.loc27: type = splice_block %A [concrete = constants.%A.1d4] { @@ -146,7 +148,7 @@ fn G() { F(B); } // CHECK:STDOUT: // CHECK:STDOUT: generic class @A(%T.loc6_9.1: type) { // CHECK:STDOUT: %T.loc6_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc6_9.2 [symbolic = %require_complete (constants.%require_complete)] @@ -198,16 +200,19 @@ fn G() { F(B); } // CHECK:STDOUT: constants { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%B) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -227,7 +232,7 @@ fn G() { F(B); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %B.decl.loc4: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: } @@ -246,16 +251,17 @@ fn G() { F(B); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc6_6.2 [symbolic = %require_complete (constants.%require_complete)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc6_6.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%T.loc6_6.2 (%T) = binding_pattern v -// CHECK:STDOUT: %.loc7: @F.%T.loc6_6.2 (%T) = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern v +// CHECK:STDOUT: %.loc7: @F.%pattern_type (%pattern_type.7dc) = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @F.%T.loc6_6.2 (%T) = var v // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6_6.1 [symbolic = %T.loc6_6.2 (constants.%T)] @@ -284,6 +290,7 @@ fn G() { F(B); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.049 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_incomplete_in_function_at_eof.carbon @@ -291,14 +298,17 @@ fn G() { F(B); } // CHECK:STDOUT: constants { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%B) [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -318,7 +328,7 @@ fn G() { F(B); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] // CHECK:STDOUT: } @@ -329,16 +339,17 @@ fn G() { F(B); } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_6.1: type) { // CHECK:STDOUT: %T.loc6_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc6_6.2 [symbolic = %require_complete (constants.%require_complete)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc6_6.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%T.loc6_6.2 (%T) = binding_pattern v -// CHECK:STDOUT: %.loc13: @F.%T.loc6_6.2 (%T) = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern v +// CHECK:STDOUT: %.loc13: @F.%pattern_type (%pattern_type.7dc) = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @F.%T.loc6_6.2 (%T) = var v // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6_6.1 [symbolic = %T.loc6_6.2 (constants.%T)] @@ -367,5 +378,6 @@ fn G() { F(B); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.049 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/dependent_param.carbon b/toolchain/check/testdata/generic/dependent_param.carbon index ffc2edbb936e..fd1c91ac56d3 100644 --- a/toolchain/check/testdata/generic/dependent_param.carbon +++ b/toolchain/check/testdata/generic/dependent_param.carbon @@ -24,12 +24,14 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Outer.type: type = generic_class_type @Outer [concrete] // CHECK:STDOUT: %Outer.generic: %Outer.type = struct_value () [concrete] // CHECK:STDOUT: %Outer.9d6: type = class_type @Outer, @Outer(%T) [symbolic] // CHECK:STDOUT: %U: %T = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt.51c: %T = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %U.patt.7fd: %pattern_type.7dcd0a.1 = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %Inner.type.eae: type = generic_class_type @Inner, @Outer(%T) [symbolic] // CHECK:STDOUT: %Inner.generic.137: %Inner.type.eae = struct_value () [symbolic] // CHECK:STDOUT: %Inner.879: type = class_type @Inner, @Inner(%T, %U) [symbolic] @@ -42,6 +44,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Outer.545: type = class_type @Outer, @Outer(%i32) [concrete] // CHECK:STDOUT: %Inner.type.bac: type = generic_class_type @Inner, @Outer(%i32) [concrete] // CHECK:STDOUT: %Inner.generic.ba0: %Inner.type.bac = struct_value () [concrete] @@ -58,7 +61,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_42.20e, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_42.c68: %i32 = int_value 42 [concrete] -// CHECK:STDOUT: %U.patt.8cf: %i32 = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt.a8e: %pattern_type.7ce = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %Inner.025: type = class_type @Inner, @Inner(%i32, %int_42.c68) [concrete] // CHECK:STDOUT: %Get.type.512: type = fn_type @Get, @Inner(%i32, %int_42.c68) [concrete] // CHECK:STDOUT: %Get.18c: %Get.type.512 = struct_value () [concrete] @@ -82,13 +85,13 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Outer.decl: %Outer.type = class_decl @Outer [concrete = constants.%Outer.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %.loc10_1: %i32 = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %.loc10_1: %pattern_type.7ce = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var n // CHECK:STDOUT: %.loc10_8: type = splice_block %i32 [concrete = constants.%i32] { @@ -100,7 +103,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @Outer(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Inner.type: type = generic_class_type @Inner, @Outer(%T.loc4_13.2) [symbolic = %Inner.type (constants.%Inner.type.eae)] @@ -108,7 +111,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Inner.decl: @Outer.%Inner.type (%Inner.type.eae) = class_decl @Inner [symbolic = @Outer.%Inner.generic (constants.%Inner.generic.137)] { -// CHECK:STDOUT: %U.patt.loc5_15.1: @Inner.%T (%T) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt.51c)] +// CHECK:STDOUT: %U.patt.loc5_15.1: @Inner.%pattern_type (%pattern_type.7dcd0a.1) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt.7fd)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc4_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %U.loc5_15.1: @Inner.%T (%T) = bind_symbolic_name U, 1 [symbolic = %U.loc5_15.2 (constants.%U)] @@ -127,7 +130,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: generic class @Inner(@Outer.%T.loc4_13.1: type, %U.loc5_15.1: @Inner.%T (%T)) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %U.loc5_15.2: @Inner.%T (%T) = bind_symbolic_name U, 1 [symbolic = %U.loc5_15.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc5_15.2: @Inner.%T (%T) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] +// CHECK:STDOUT: %U.patt.loc5_15.2: @Inner.%pattern_type (%pattern_type.7dcd0a.1) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc5_15.2 (constants.%U.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Get.type: type = fn_type @Get, @Inner(%T, %U.loc5_15.2) [symbolic = %Get.type (constants.%Get.type.889)] @@ -135,8 +139,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Get.decl: @Inner.%Get.type (%Get.type.889) = fn_decl @Get [symbolic = @Inner.%Get (constants.%Get.118)] { -// CHECK:STDOUT: %return.patt: @Get.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Get.%T (%T) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Get.%pattern_type (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Get.%pattern_type (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc4_13.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %return.param: ref @Get.%T (%T) = out_param call_param0 @@ -156,6 +160,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Get(@Outer.%T.loc4_13.1: type, @Inner.%U.loc5_15.1: @Inner.%T (%T)) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -205,7 +210,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: specific @Inner(constants.%T, constants.%U) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %U.loc5_15.2 => constants.%U -// CHECK:STDOUT: %U.patt.loc5_15.2 => constants.%U.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 +// CHECK:STDOUT: %U.patt.loc5_15.2 => constants.%U.patt.7fd // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Get.type => constants.%Get.type.889 @@ -214,6 +220,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: specific @Get(constants.%T, constants.%U) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Inner(%T, %U.loc5_15.2) {} @@ -232,7 +239,8 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: specific @Inner(constants.%i32, constants.%int_42.c68) { // CHECK:STDOUT: %T => constants.%i32 // CHECK:STDOUT: %U.loc5_15.2 => constants.%int_42.c68 -// CHECK:STDOUT: %U.patt.loc5_15.2 => constants.%U.patt.8cf +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce +// CHECK:STDOUT: %U.patt.loc5_15.2 => constants.%U.patt.a8e // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Get.type => constants.%Get.type.512 @@ -241,6 +249,7 @@ var n: i32 = Outer(i32).Inner(42).Get(); // CHECK:STDOUT: // CHECK:STDOUT: specific @Get(constants.%i32, constants.%int_42.c68) { // CHECK:STDOUT: %T => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a diff --git a/toolchain/check/testdata/generic/local.carbon b/toolchain/check/testdata/generic/local.carbon index 4235bcc36e44..d96dae040993 100644 --- a/toolchain/check/testdata/generic/local.carbon +++ b/toolchain/check/testdata/generic/local.carbon @@ -49,7 +49,8 @@ class C(C:! type) { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f06: type = class_type @C, @C(%T) [symbolic] @@ -65,6 +66,7 @@ class C(C:! type) { // CHECK:STDOUT: %C.elem.f74: type = unbound_element_type %C.d45, %i32 [concrete] // CHECK:STDOUT: %struct_type.x.ed6: type = struct_type {.x: %i32} [concrete] // CHECK:STDOUT: %complete_type.1ec: = complete_type_witness %struct_type.x.ed6 [concrete] +// CHECK:STDOUT: %pattern_type.7db: type = pattern_type %C.d45 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.x.c96: type = struct_type {.x: Core.IntLiteral} [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -102,7 +104,7 @@ class C(C:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc5_11.1: type) { // CHECK:STDOUT: %T.loc5_11.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_11.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc5_11.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_11.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_11.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc5_11.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -128,13 +130,13 @@ class C(C:! type) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc5_11.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_11.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_11.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc5_11.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_11.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %C.d45 = binding_pattern v -// CHECK:STDOUT: %.loc8_3.1: %C.d45 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.7db = binding_pattern v +// CHECK:STDOUT: %.loc8_3.1: %pattern_type.7db = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %C.d45 = var v // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -185,7 +187,8 @@ class C(C:! type) { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %C.8b3: type = bind_symbolic_name C, 0 [symbolic] -// CHECK:STDOUT: %C.patt: type = symbolic_binding_pattern C, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %C.patt: %pattern_type = symbolic_binding_pattern C, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f06: type = class_type @C, @C(%C.8b3) [symbolic] @@ -211,7 +214,7 @@ class C(C:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%C.loc13_11.1: type) { // CHECK:STDOUT: %C.loc13_11.2: type = bind_symbolic_name C, 0 [symbolic = %C.loc13_11.2 (constants.%C.8b3)] -// CHECK:STDOUT: %C.patt.loc13_11.2: type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc13_11.2 (constants.%C.patt)] +// CHECK:STDOUT: %C.patt.loc13_11.2: %pattern_type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc13_11.2 (constants.%C.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -228,7 +231,7 @@ class C(C:! type) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %C.patt.loc13_11.1: type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc13_11.2 (constants.%C.patt)] +// CHECK:STDOUT: %C.patt.loc13_11.1: %pattern_type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc13_11.2 (constants.%C.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.loc13_11.1: type = bind_symbolic_name C, 0 [symbolic = %C.loc13_11.2 (constants.%C.8b3)] // CHECK:STDOUT: } @@ -244,7 +247,8 @@ class C(C:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C.8b3: type = bind_symbolic_name C, 0 [symbolic] -// CHECK:STDOUT: %C.patt: type = symbolic_binding_pattern C, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %C.patt: %pattern_type = symbolic_binding_pattern C, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%C.8b3) [symbolic] @@ -266,7 +270,7 @@ class C(C:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %C.patt.loc4_9.1: type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc4_9.2 (constants.%C.patt)] +// CHECK:STDOUT: %C.patt.loc4_9.1: %pattern_type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc4_9.2 (constants.%C.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.loc4_9.1: type = bind_symbolic_name C, 0 [symbolic = %C.loc4_9.2 (constants.%C.8b3)] // CHECK:STDOUT: } @@ -274,7 +278,7 @@ class C(C:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%C.loc4_9.1: type) { // CHECK:STDOUT: %C.loc4_9.2: type = bind_symbolic_name C, 0 [symbolic = %C.loc4_9.2 (constants.%C.8b3)] -// CHECK:STDOUT: %C.patt.loc4_9.2: type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc4_9.2 (constants.%C.patt)] +// CHECK:STDOUT: %C.patt.loc4_9.2: %pattern_type = symbolic_binding_pattern C, 0 [symbolic = %C.patt.loc4_9.2 (constants.%C.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/template/convert.carbon b/toolchain/check/testdata/generic/template/convert.carbon index 52f1d6a47669..18ca072dc7ba 100644 --- a/toolchain/check/testdata/generic/template/convert.carbon +++ b/toolchain/check/testdata/generic/template/convert.carbon @@ -59,9 +59,12 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [template] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -77,6 +80,7 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.96d: = impl_witness @C.%ImplicitAs.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Convert.type.dae: type = fn_type @Convert.2 [concrete] // CHECK:STDOUT: %Convert.937: %Convert.type.dae = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value %C, (%ImplicitAs.impl_witness.96d) [concrete] @@ -126,11 +130,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%T.loc4_15.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%T.loc4_15.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -142,10 +146,10 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Test1.decl: %Test1.type = fn_decl @Test1 [concrete = constants.%Test1] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc8_21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc8_21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -160,10 +164,10 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Test2.decl: %Test2.type = fn_decl @Test2 [concrete = constants.%Test2] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -177,10 +181,10 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.4e3: %Self.ref as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.dae = fn_decl @Convert.2 [concrete = constants.%Convert.937] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -221,7 +225,8 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_15.2 [template = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_15.2 [template = %require_complete (constants.%require_complete.4ae)] @@ -271,11 +276,13 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%i32) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a @@ -286,6 +293,7 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: specific @F(constants.%C) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%C // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.54b @@ -297,15 +305,19 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [template] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [template] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%D) [concrete] @@ -337,11 +349,11 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%T.loc4_15.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%T.loc4_15.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -354,10 +366,10 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %D = value_param_pattern %d.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %d.patt: %pattern_type.510 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.510 = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -380,7 +392,8 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_15.2 [template = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_15.2 [template = %require_complete (constants.%require_complete.4ae)] @@ -410,11 +423,13 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%D) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%D // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.510 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 diff --git a/toolchain/check/testdata/generic/template/member_access.carbon b/toolchain/check/testdata/generic/template/member_access.carbon index b4b2bc8c032e..0cb7e67c401e 100644 --- a/toolchain/check/testdata/generic/template/member_access.carbon +++ b/toolchain/check/testdata/generic/template/member_access.carbon @@ -82,9 +82,12 @@ fn Test(e: E) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [template] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [template] @@ -92,10 +95,12 @@ fn Test(e: E) { // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Test1.type: type = fn_type @Test1 [concrete] // CHECK:STDOUT: %Test1: %Test1.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.04a: = specific_function %F, @F(%C) [concrete] // CHECK:STDOUT: %struct_type.m.n: type = struct_type {.m: %i32, .n: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.811: type = pattern_type %struct_type.m.n [concrete] // CHECK:STDOUT: %Test2.type: type = fn_type @Test2 [concrete] // CHECK:STDOUT: %Test2: %Test2.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn.92d: = specific_function %F, @F(%struct_type.m.n) [concrete] @@ -142,11 +147,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%T.loc4_15.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%T.loc4_15.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -159,16 +164,16 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Test1.decl: %Test1.type = fn_decl @Test1 [concrete = constants.%Test1] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %c: %C = bind_name c, %c.param // CHECK:STDOUT: } // CHECK:STDOUT: %Test2.decl: %Test2.type = fn_decl @Test2 [concrete = constants.%Test2] { -// CHECK:STDOUT: %x.patt: %struct_type.m.n = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %struct_type.m.n = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.811 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.811 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %struct_type.m.n = value_param call_param0 // CHECK:STDOUT: %.loc16: type = splice_block %struct_type.m.n [concrete = constants.%struct_type.m.n] { @@ -197,7 +202,8 @@ fn Test(e: E) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_15.2 [template = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_15.2 [template = %require_complete (constants.%require_complete.4ae)] @@ -237,11 +243,13 @@ fn Test(e: E) { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%C // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.54b @@ -254,6 +262,7 @@ fn Test(e: E) { // CHECK:STDOUT: specific @F(constants.%struct_type.m.n) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%struct_type.m.n // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.811 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.622 @@ -267,9 +276,12 @@ fn Test(e: E) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [template] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [template] @@ -277,6 +289,7 @@ fn Test(e: E) { // CHECK:STDOUT: %D.elem: type = unbound_element_type %D, %i32 [concrete] // CHECK:STDOUT: %struct_type.m: type = struct_type {.m: %i32} [concrete] // CHECK:STDOUT: %complete_type.218: = complete_type_witness %struct_type.m [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F, @F(%D) [concrete] @@ -308,11 +321,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%T.loc4_15.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%T.loc4_15.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -325,8 +338,8 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %D = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %d.patt: %pattern_type.510 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.510 = value_param_pattern %d.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %D = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] @@ -350,7 +363,8 @@ fn Test(e: E) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_15.2 [template = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_15.2 [template = %require_complete (constants.%require_complete.4ae)] @@ -381,11 +395,13 @@ fn Test(e: E) { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%D) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%D // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.510 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.218 @@ -399,9 +415,12 @@ fn Test(e: E) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [template] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.c41: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [template] @@ -412,6 +431,7 @@ fn Test(e: E) { // CHECK:STDOUT: %E.elem: type = unbound_element_type %E, %F.a8a [concrete] // CHECK:STDOUT: %struct_type.n.e4c: type = struct_type {.n: %F.a8a} [concrete] // CHECK:STDOUT: %complete_type.5ba: = complete_type_witness %struct_type.n.e4c [concrete] +// CHECK:STDOUT: %pattern_type.a4a: type = pattern_type %E [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F.c41, @F.1(%E) [concrete] @@ -450,11 +470,11 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F.1 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.1.%T.loc4_15.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.1.%T.loc4_15.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.1.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.1.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -467,8 +487,8 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %E.decl: type = class_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %e.patt: %E = binding_pattern e -// CHECK:STDOUT: %e.param_patt: %E = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %e.patt: %pattern_type.a4a = binding_pattern e +// CHECK:STDOUT: %e.param_patt: %pattern_type.a4a = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %E = value_param call_param0 // CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [concrete = constants.%E] @@ -501,7 +521,8 @@ fn Test(e: E) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.1(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_15.2 [template = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_15.2 [template = %require_complete (constants.%require_complete.4ae)] @@ -532,11 +553,13 @@ fn Test(e: E) { // CHECK:STDOUT: specific @F.1(constants.%T) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%E) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%E // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a4a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.5ba diff --git a/toolchain/check/testdata/generic/template/unimplemented.carbon b/toolchain/check/testdata/generic/template/unimplemented.carbon index d87bdcb263cb..587456340da4 100644 --- a/toolchain/check/testdata/generic/template/unimplemented.carbon +++ b/toolchain/check/testdata/generic/template/unimplemented.carbon @@ -70,9 +70,12 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [template] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [template] @@ -95,11 +98,11 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc6_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%T.loc6_15.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%T.loc6_15.2 (%T) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc6_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -114,7 +117,8 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc6_15.1: type) { // CHECK:STDOUT: %T.loc6_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc6_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc6_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc6_15.2 [template = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc6_15.2 [template = %require_complete (constants.%require_complete.4ae)] @@ -135,6 +139,7 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc6_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc6_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_unimplemented_value.carbon @@ -147,7 +152,9 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %c: %C = bind_symbolic_name c, 0, template [template] -// CHECK:STDOUT: %c.patt: %C = symbolic_binding_pattern c, 0, template [template] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = symbolic_binding_pattern c, 0, template [template] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] @@ -171,9 +178,9 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt.loc11_15.1: %C = symbolic_binding_pattern c, 0, template [template = %c.patt.loc11_15.2 (constants.%c.patt)] -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %c.patt.loc11_15.1: %pattern_type.c48 = symbolic_binding_pattern c, 0, template [template = %c.patt.loc11_15.2 (constants.%c.patt)] +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -199,7 +206,7 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%c.loc11_15.1: %C) { // CHECK:STDOUT: %c.loc11_15.2: %C = bind_symbolic_name c, 0, template [template = %c.loc11_15.2 (constants.%c)] -// CHECK:STDOUT: %c.patt.loc11_15.2: %C = symbolic_binding_pattern c, 0, template [template = %c.patt.loc11_15.2 (constants.%c.patt)] +// CHECK:STDOUT: %c.patt.loc11_15.2: %pattern_type.c48 = symbolic_binding_pattern c, 0, template [template = %c.patt.loc11_15.2 (constants.%c.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %.loc16_11.2: = access_member_action %c.ref, n [template] @@ -223,7 +230,9 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [template] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [template] @@ -231,6 +240,7 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: %ImplicitAs.type.d628ce.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [template] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -249,9 +259,9 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%T.loc4_15.2 (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%T.loc4_15.2 (%T) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_15.1: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: %x.param: @F.%T.loc4_15.2 (%T) = value_param call_param0 @@ -262,7 +272,8 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_15.2 [template = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc4_15.2 [template = %require_complete (constants.%require_complete.4ae)] @@ -273,8 +284,8 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: fn(%x.param: @F.%T.loc4_15.2 (%T)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: @F.%T.loc4_15.2 (%T) = binding_pattern v -// CHECK:STDOUT: %.loc14_3.1: @F.%T.loc4_15.2 (%T) = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: @F.%pattern_type (%pattern_type.7dcd0a.1) = binding_pattern v +// CHECK:STDOUT: %.loc14_3.1: @F.%pattern_type (%pattern_type.7dcd0a.1) = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref @F.%T.loc4_15.2 (%T) = var v // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] @@ -285,8 +296,8 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: %T.ref.loc14: type = name_ref T, %T.loc4_15.1 [template = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: %v: ref @F.%T.loc4_15.2 (%T) = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %i32 = binding_pattern w -// CHECK:STDOUT: %.loc22_3.1: %i32 = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.7ce = binding_pattern w +// CHECK:STDOUT: %.loc22_3.1: %pattern_type.7ce = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var w // CHECK:STDOUT: %x.ref: @F.%T.loc4_15.2 (%T) = name_ref x, %x @@ -304,5 +315,6 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc4_15.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/template_dependence.carbon b/toolchain/check/testdata/generic/template_dependence.carbon index 2bfe836aef38..e71c76dfaf10 100644 --- a/toolchain/check/testdata/generic/template_dependence.carbon +++ b/toolchain/check/testdata/generic/template_dependence.carbon @@ -28,9 +28,12 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [template] // CHECK:STDOUT: %ptr.a13: type = ptr_type %ptr.79f [template] +// CHECK:STDOUT: %pattern_type.12d: type = pattern_type %ptr.a13 [template] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f [template] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f [template] @@ -51,11 +54,11 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @F.%ptr.loc4_30.2 (%ptr.a13) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.%ptr.loc4_30.2 (%ptr.a13) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%ptr.loc4_29.2 (%ptr.79f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%ptr.loc4_29.2 (%ptr.79f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @F.%pattern_type.loc4_25 (%pattern_type.12d) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.%pattern_type.loc4_25 (%pattern_type.12d) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc4_33 (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc4_33 (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4_36: type = name_ref T, %T.loc4_15.1 [template = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: %ptr.loc4_37: type = ptr_type %T.ref.loc4_36 [template = %ptr.loc4_29.2 (constants.%ptr.79f)] @@ -74,9 +77,11 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc4_29.2: type = ptr_type %T.loc4_15.2 [template = %ptr.loc4_29.2 (constants.%ptr.79f)] // CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %ptr.loc4_29.2 [template = %ptr.loc4_30.2 (constants.%ptr.a13)] +// CHECK:STDOUT: %pattern_type.loc4_25: type = pattern_type %ptr.loc4_30.2 [template = %pattern_type.loc4_25 (constants.%pattern_type.12d)] +// CHECK:STDOUT: %pattern_type.loc4_33: type = pattern_type %ptr.loc4_29.2 [template = %pattern_type.loc4_33 (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4_33: = require_complete_type %ptr.loc4_29.2 [template = %require_complete.loc4_33 (constants.%require_complete.6e5)] @@ -96,17 +101,21 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt // CHECK:STDOUT: %ptr.loc4_29.2 => constants.%ptr.79f // CHECK:STDOUT: %ptr.loc4_30.2 => constants.%ptr.a13 +// CHECK:STDOUT: %pattern_type.loc4_25 => constants.%pattern_type.12d +// CHECK:STDOUT: %pattern_type.loc4_33 => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- mixed.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, template [template] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0, template [template] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.30b: type = tuple_type (%T, %U) [template] +// CHECK:STDOUT: %pattern_type.65c: type = pattern_type %tuple.type.30b [template] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.fe1: = require_complete_type %tuple.type.30b [template] @@ -129,10 +138,10 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc4_15.1: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc4_25.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_25.2 (constants.%U.patt)] -// CHECK:STDOUT: %return.patt: @F.%tuple.type (%tuple.type.30b) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%tuple.type (%tuple.type.30b) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc4_25.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_25.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.65c) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.65c) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc4: type = name_ref T, %T.loc4_15.1 [template = %T.loc4_15.2 (constants.%T)] // CHECK:STDOUT: %U.ref.loc4: type = name_ref U, %U.loc4_25.1 [symbolic = %U.loc4_25.2 (constants.%U)] @@ -147,10 +156,11 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type, %U.loc4_25.1: type) { // CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T, 0, template [template = %T.loc4_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_15.2: type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_15.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc4_25.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc4_25.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc4_25.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_25.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc4_25.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_25.2 (constants.%U.patt)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%T.loc4_15.2, %U.loc4_25.2) [template = %tuple.type (constants.%tuple.type.30b)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [template = %pattern_type (constants.%pattern_type.65c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4: = require_complete_type %tuple.type [template = %require_complete.loc4 (constants.%require_complete.fe1)] @@ -187,6 +197,7 @@ fn F(template T:! type, U:! type) -> (T, U) { // CHECK:STDOUT: %U.loc4_25.2 => constants.%U // CHECK:STDOUT: %U.patt.loc4_25.2 => constants.%U.patt // CHECK:STDOUT: %tuple.type => constants.%tuple.type.30b +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.65c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc4 => constants.%require_complete.fe1 diff --git a/toolchain/check/testdata/global/class_obj.carbon b/toolchain/check/testdata/global/class_obj.carbon index 29b9a31d68f5..74e6d4e30360 100644 --- a/toolchain/check/testdata/global/class_obj.carbon +++ b/toolchain/check/testdata/global/class_obj.carbon @@ -17,6 +17,7 @@ var a: A = {}; // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -36,8 +37,8 @@ var a: A = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %.loc12: %A = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc12: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var a // CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [concrete = constants.%A] diff --git a/toolchain/check/testdata/global/class_with_fun.carbon b/toolchain/check/testdata/global/class_with_fun.carbon index cd0292598010..5809f19b3761 100644 --- a/toolchain/check/testdata/global/class_with_fun.carbon +++ b/toolchain/check/testdata/global/class_with_fun.carbon @@ -21,6 +21,7 @@ var a: A = {}; // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] // CHECK:STDOUT: %ret_a.type: type = fn_type @ret_a [concrete] // CHECK:STDOUT: %ret_a: %ret_a.type = struct_value () [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] @@ -43,16 +44,16 @@ var a: A = {}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %ret_a.decl: %ret_a.type = fn_decl @ret_a [concrete = constants.%ret_a] { -// CHECK:STDOUT: %return.patt: %A = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %A = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %return.param: ref %A = out_param call_param0 // CHECK:STDOUT: %return: ref %A = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %.loc16: %A = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc16: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var a // CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [concrete = constants.%A] diff --git a/toolchain/check/testdata/global/decl.carbon b/toolchain/check/testdata/global/decl.carbon index 84653af9461e..586139a58fed 100644 --- a/toolchain/check/testdata/global/decl.carbon +++ b/toolchain/check/testdata/global/decl.carbon @@ -14,6 +14,7 @@ var a: i32; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -31,8 +32,8 @@ var a: i32; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc10_1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc10_1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc10_8: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/global/simple_init.carbon b/toolchain/check/testdata/global/simple_init.carbon index 26ea1641873f..e421a887b8d0 100644 --- a/toolchain/check/testdata/global/simple_init.carbon +++ b/toolchain/check/testdata/global/simple_init.carbon @@ -14,6 +14,7 @@ var a: i32 = 0; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -45,8 +46,8 @@ var a: i32 = 0; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc10_1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc10_1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc10_8: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/global/simple_with_fun.carbon b/toolchain/check/testdata/global/simple_with_fun.carbon index bbbf16b7262a..03272bfb5d99 100644 --- a/toolchain/check/testdata/global/simple_with_fun.carbon +++ b/toolchain/check/testdata/global/simple_with_fun.carbon @@ -19,6 +19,7 @@ var a: i32 = test_a(); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %test_a.type: type = fn_type @test_a [concrete] // CHECK:STDOUT: %test_a: %test_a.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -53,8 +54,8 @@ var a: i32 = test_a(); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %test_a.decl: %test_a.type = fn_decl @test_a [concrete = constants.%test_a] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -62,8 +63,8 @@ var a: i32 = test_a(); // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc15_1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc15_1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc15_8: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/if/else.carbon b/toolchain/check/testdata/if/else.carbon index 41bca001e4c9..11a33dba6c4a 100644 --- a/toolchain/check/testdata/if/else.carbon +++ b/toolchain/check/testdata/if/else.carbon @@ -33,6 +33,7 @@ fn If(b: bool) { // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %If.type: type = fn_type @If [concrete] // CHECK:STDOUT: %If: %If.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -58,8 +59,8 @@ fn If(b: bool) { // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] {} {} // CHECK:STDOUT: %If.decl: %If.type = fn_decl @If [concrete = constants.%If] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc15_10.1: type = splice_block %.loc15_10.3 [concrete = bool] { diff --git a/toolchain/check/testdata/if/fail_reachable_fallthrough.carbon b/toolchain/check/testdata/if/fail_reachable_fallthrough.carbon index 002b12988a65..c3804e668a91 100644 --- a/toolchain/check/testdata/if/fail_reachable_fallthrough.carbon +++ b/toolchain/check/testdata/if/fail_reachable_fallthrough.carbon @@ -45,8 +45,10 @@ fn If3(b: bool) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %If1.type: type = fn_type @If1 [concrete] // CHECK:STDOUT: %If1: %If1.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -91,10 +93,10 @@ fn If3(b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %If1.decl: %If1.type = fn_decl @If1 [concrete = constants.%If1] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -109,10 +111,10 @@ fn If3(b: bool) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %If2.decl: %If2.type = fn_decl @If2 [concrete = constants.%If2] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -127,10 +129,10 @@ fn If3(b: bool) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %If3.decl: %If3.type = fn_decl @If3 [concrete = constants.%If3] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/if/fail_scope.carbon b/toolchain/check/testdata/if/fail_scope.carbon index 581c2ddb4683..648f23675f84 100644 --- a/toolchain/check/testdata/if/fail_scope.carbon +++ b/toolchain/check/testdata/if/fail_scope.carbon @@ -25,8 +25,10 @@ fn VarScope(b: bool) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %VarScope.type: type = fn_type @VarScope [concrete] // CHECK:STDOUT: %VarScope: %VarScope.type = struct_value () [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] @@ -62,10 +64,10 @@ fn VarScope(b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %VarScope.decl: %VarScope.type = fn_decl @VarScope [concrete = constants.%VarScope] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -88,8 +90,8 @@ fn VarScope(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %.loc13_5.1: %i32 = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %.loc13_5.1: %pattern_type.7ce = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var n // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] diff --git a/toolchain/check/testdata/if/no_else.carbon b/toolchain/check/testdata/if/no_else.carbon index 911a6cfa3be9..d04ca19147ec 100644 --- a/toolchain/check/testdata/if/no_else.carbon +++ b/toolchain/check/testdata/if/no_else.carbon @@ -28,6 +28,7 @@ fn If(b: bool) { // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %If.type: type = fn_type @If [concrete] // CHECK:STDOUT: %If: %If.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -51,8 +52,8 @@ fn If(b: bool) { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: %If.decl: %If.type = fn_decl @If [concrete = constants.%If] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc14_10.1: type = splice_block %.loc14_10.3 [concrete = bool] { diff --git a/toolchain/check/testdata/if/unreachable_fallthrough.carbon b/toolchain/check/testdata/if/unreachable_fallthrough.carbon index 7c772c5744ed..56d04c6374d8 100644 --- a/toolchain/check/testdata/if/unreachable_fallthrough.carbon +++ b/toolchain/check/testdata/if/unreachable_fallthrough.carbon @@ -22,8 +22,10 @@ fn If(b: bool) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %If.type: type = fn_type @If [concrete] // CHECK:STDOUT: %If: %If.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -62,10 +64,10 @@ fn If(b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %If.decl: %If.type = fn_decl @If [concrete = constants.%If] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/if_expr/basic.carbon b/toolchain/check/testdata/if_expr/basic.carbon index 72ec344b395d..f40740830f7e 100644 --- a/toolchain/check/testdata/if_expr/basic.carbon +++ b/toolchain/check/testdata/if_expr/basic.carbon @@ -18,12 +18,15 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -58,14 +61,14 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param1 -// CHECK:STDOUT: %m.patt: %i32 = binding_pattern m -// CHECK:STDOUT: %m.param_patt: %i32 = value_param_pattern %m.patt, call_param2 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param1 +// CHECK:STDOUT: %m.patt: %pattern_type.7ce = binding_pattern m +// CHECK:STDOUT: %m.param_patt: %pattern_type.7ce = value_param_pattern %m.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_34: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_34: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -96,8 +99,8 @@ fn F(b: bool, n: i32, m: i32) -> i32 { // CHECK:STDOUT: fn @F(%b.param: bool, %n.param: %i32, %m.param: %i32) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %array_type = binding_pattern x -// CHECK:STDOUT: %.loc12_3.1: %array_type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.a98 = binding_pattern x +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.a98 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %array_type = var x // CHECK:STDOUT: %int_0.loc12_27: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/if_expr/constant_condition.carbon b/toolchain/check/testdata/if_expr/constant_condition.carbon index 6d5688337522..47f65b1aff4a 100644 --- a/toolchain/check/testdata/if_expr/constant_condition.carbon +++ b/toolchain/check/testdata/if_expr/constant_condition.carbon @@ -36,9 +36,11 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.a2f = impl_witness_table (imports.%Core.import_ref.a5b), @impl.4f9 [concrete] @@ -66,6 +68,7 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %Constant.type: type = fn_type @Constant [concrete] // CHECK:STDOUT: %Constant: %Constant.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %PartiallyConstant.type: type = fn_type @PartiallyConstant [concrete] // CHECK:STDOUT: %PartiallyConstant: %PartiallyConstant.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -91,8 +94,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -100,8 +103,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -109,8 +112,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -118,8 +121,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -127,8 +130,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Constant.decl: %Constant.type = fn_decl @Constant [concrete = constants.%Constant] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc22: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc22: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -136,10 +139,10 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %PartiallyConstant.decl: %PartiallyConstant.type = fn_decl @PartiallyConstant [concrete = constants.%PartiallyConstant] { -// CHECK:STDOUT: %t.patt: type = binding_pattern t -// CHECK:STDOUT: %t.param_patt: type = value_param_pattern %t.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %t.patt: %pattern_type.98f = binding_pattern t +// CHECK:STDOUT: %t.param_patt: %pattern_type.98f = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc28: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc28: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -227,8 +230,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: fn @Constant() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %.loc23_3.1: %i32 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %.loc23_3.1: %pattern_type.7ce = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var v // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -263,8 +266,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: !.loc23_7: // CHECK:STDOUT: %v: ref %i32 = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %ptr.235 = binding_pattern w -// CHECK:STDOUT: %.loc24_3: %ptr.235 = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.fe8 = binding_pattern w +// CHECK:STDOUT: %.loc24_3: %pattern_type.fe8 = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %ptr.235 = var w // CHECK:STDOUT: %v.ref: ref %i32 = name_ref v, %v @@ -303,8 +306,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: fn @PartiallyConstant(%t.param: type) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %.loc29_3.1: %i32 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %.loc29_3.1: %pattern_type.7ce = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var v // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -337,8 +340,8 @@ fn PartiallyConstant(t: type) -> i32 { // CHECK:STDOUT: !.loc29_7: // CHECK:STDOUT: %v: ref %i32 = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %ptr.235 = binding_pattern w -// CHECK:STDOUT: %.loc30_3: %ptr.235 = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.fe8 = binding_pattern w +// CHECK:STDOUT: %.loc30_3: %pattern_type.fe8 = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %ptr.235 = var w // CHECK:STDOUT: %v.ref: ref %i32 = name_ref v, %v diff --git a/toolchain/check/testdata/if_expr/control_flow.carbon b/toolchain/check/testdata/if_expr/control_flow.carbon index 3489854342b9..6204d7f5751a 100644 --- a/toolchain/check/testdata/if_expr/control_flow.carbon +++ b/toolchain/check/testdata/if_expr/control_flow.carbon @@ -20,12 +20,14 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.a2f = impl_witness_table (imports.%Core.import_ref.a5b), @impl.4f9 [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.c75: = impl_witness %ImplicitAs.impl_witness_table.a2f, @impl.4f9(%int_32) [concrete] // CHECK:STDOUT: %Convert.type.035: type = fn_type @Convert.2, @impl.4f9(%int_32) [concrete] // CHECK:STDOUT: %Convert.956: %Convert.type.035 = struct_value () [concrete] @@ -66,8 +68,8 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -75,8 +77,8 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -84,10 +86,10 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/if_expr/fail_not_in_function.carbon b/toolchain/check/testdata/if_expr/fail_not_in_function.carbon index 44c94f8932b4..3daabde41eb0 100644 --- a/toolchain/check/testdata/if_expr/fail_not_in_function.carbon +++ b/toolchain/check/testdata/if_expr/fail_not_in_function.carbon @@ -125,7 +125,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic] @@ -139,7 +140,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(.inst17.loc4_14: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -154,7 +155,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %C.ref: %C.type = name_ref C, .inst21.loc4_24 [concrete = constants.%C.generic] +// CHECK:STDOUT: %C.ref: %C.type = name_ref C, .inst22.loc4_24 [concrete = constants.%C.generic] // CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true] // CHECK:STDOUT: if %true br !if.expr.then else br !if.expr.else // CHECK:STDOUT: complete_type_witness = invalid diff --git a/toolchain/check/testdata/if_expr/fail_partial_constant.carbon b/toolchain/check/testdata/if_expr/fail_partial_constant.carbon index 2695c3f52abf..46f48dfc1b34 100644 --- a/toolchain/check/testdata/if_expr/fail_partial_constant.carbon +++ b/toolchain/check/testdata/if_expr/fail_partial_constant.carbon @@ -45,6 +45,7 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %ConditionIsNonConstant.type: type = fn_type @ConditionIsNonConstant [concrete] // CHECK:STDOUT: %ConditionIsNonConstant: %ConditionIsNonConstant.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -68,8 +69,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ConditionIsNonConstant.decl: %ConditionIsNonConstant.type = fn_decl @ConditionIsNonConstant [concrete = constants.%ConditionIsNonConstant] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc4_30.1: type = splice_block %.loc4_30.3 [concrete = bool] { @@ -118,6 +119,7 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: --- fail_non_constant_result.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %ChosenBranchIsNonConstant.type: type = fn_type @ChosenBranchIsNonConstant [concrete] // CHECK:STDOUT: %ChosenBranchIsNonConstant: %ChosenBranchIsNonConstant.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -142,8 +144,8 @@ fn ChosenBranchIsNonConstant(t: type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ChosenBranchIsNonConstant.decl: %ChosenBranchIsNonConstant.type = fn_decl @ChosenBranchIsNonConstant [concrete = constants.%ChosenBranchIsNonConstant] { -// CHECK:STDOUT: %t.patt: type = binding_pattern t -// CHECK:STDOUT: %t.param_patt: type = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %t.patt: %pattern_type.98f = binding_pattern t +// CHECK:STDOUT: %t.param_patt: %pattern_type.98f = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %t.param: type = value_param call_param0 // CHECK:STDOUT: %t: type = bind_name t, %t.param diff --git a/toolchain/check/testdata/if_expr/nested.carbon b/toolchain/check/testdata/if_expr/nested.carbon index dea8b1aadfa5..0b16a3b56bc2 100644 --- a/toolchain/check/testdata/if_expr/nested.carbon +++ b/toolchain/check/testdata/if_expr/nested.carbon @@ -17,8 +17,10 @@ fn F(a: bool, b: bool, c: bool) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -65,14 +67,14 @@ fn F(a: bool, b: bool, c: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: bool = binding_pattern a -// CHECK:STDOUT: %a.param_patt: bool = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %c.patt: bool = binding_pattern c -// CHECK:STDOUT: %c.param_patt: bool = value_param_pattern %c.patt, call_param2 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param3 +// CHECK:STDOUT: %a.patt: %pattern_type.831 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.831 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.831 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.831 = value_param_pattern %c.patt, call_param2 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param3 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/if_expr/struct.carbon b/toolchain/check/testdata/if_expr/struct.carbon index 2ca49283a33d..ac84a7f99852 100644 --- a/toolchain/check/testdata/if_expr/struct.carbon +++ b/toolchain/check/testdata/if_expr/struct.carbon @@ -22,10 +22,12 @@ fn F(cond: bool) { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.851: type = pattern_type %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -67,8 +69,8 @@ fn F(cond: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %s.patt: %struct_type.a.b.501 = binding_pattern s -// CHECK:STDOUT: %s.param_patt: %struct_type.a.b.501 = value_param_pattern %s.patt, call_param0 +// CHECK:STDOUT: %s.patt: %pattern_type.851 = binding_pattern s +// CHECK:STDOUT: %s.param_patt: %pattern_type.851 = value_param_pattern %s.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %s.param: %struct_type.a.b.501 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %struct_type.a.b [concrete = constants.%struct_type.a.b.501] { @@ -81,8 +83,8 @@ fn F(cond: bool) { // CHECK:STDOUT: %s: %struct_type.a.b.501 = bind_name s, %s.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %cond.patt: bool = binding_pattern cond -// CHECK:STDOUT: %cond.param_patt: bool = value_param_pattern %cond.patt, call_param0 +// CHECK:STDOUT: %cond.patt: %pattern_type.831 = binding_pattern cond +// CHECK:STDOUT: %cond.param_patt: %pattern_type.831 = value_param_pattern %cond.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %cond.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc13_12.1: type = splice_block %.loc13_12.3 [concrete = bool] { @@ -99,8 +101,8 @@ fn F(cond: bool) { // CHECK:STDOUT: fn @F(%cond.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %struct_type.a.b.501 = binding_pattern a -// CHECK:STDOUT: %.loc14_3.1: %struct_type.a.b.501 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.851 = binding_pattern a +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.851 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %struct_type.a.b.501 = var a // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/impl/assoc_const_self.carbon b/toolchain/check/testdata/impl/assoc_const_self.carbon index 193198c7e29f..70ff236e5f05 100644 --- a/toolchain/check/testdata/impl/assoc_const_self.carbon +++ b/toolchain/check/testdata/impl/assoc_const_self.carbon @@ -376,6 +376,8 @@ fn CallF() { // CHECK:STDOUT: %ImplicitAs.type.15e: type = facet_type <@ImplicitAs, @ImplicitAs(%C)> [concrete] // CHECK:STDOUT: %Convert.type.56d: type = fn_type @Convert.1, @ImplicitAs(%C) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness file.%ImplicitAs.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Convert.type.721: type = fn_type @Convert.2 [concrete] // CHECK:STDOUT: %Convert.155: %Convert.type.721 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.15e = facet_value %empty_tuple.type, (%ImplicitAs.impl_witness) [concrete] @@ -472,10 +474,10 @@ fn CallF() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.e86: %.loc10_7.2 as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.721 = fn_decl @Convert.2 [concrete = constants.%Convert.155] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %empty_tuple.type = value_param call_param0 @@ -541,7 +543,8 @@ fn CallF() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.8a1: type = facet_type <@I, @I(%N)> [symbolic] @@ -590,7 +593,7 @@ fn CallF() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %N.patt.loc4_13.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_13.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc4_13.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_13.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_33.1: type = splice_block %.loc4_33.3 [concrete = Core.IntLiteral] { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] @@ -628,7 +631,7 @@ fn CallF() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%N.loc4_13.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc4_13.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc4_13.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc4_13.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_13.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc4_13.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_13.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%N.loc4_13.2)> [symbolic = %I.type (constants.%I.type.8a1)] @@ -726,7 +729,8 @@ fn CallF() { // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = %empty_struct and TODO> [concrete] // CHECK:STDOUT: %T: %I_where.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I_where.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.189: type = pattern_type %I_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.189 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %CallF.type: type = fn_type @CallF [concrete] @@ -752,7 +756,7 @@ fn CallF() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc8_6.1: %I_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_6.1: %pattern_type.189 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_12.1: type = splice_block %.loc8_12.2 [concrete = constants.%I_where.type] { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -805,7 +809,7 @@ fn CallF() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc8_6.1: %I_where.type) { // CHECK:STDOUT: %T.loc8_6.2: %I_where.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_6.2: %I_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_6.2: %pattern_type.189 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/impl/extend_impl.carbon b/toolchain/check/testdata/impl/extend_impl.carbon index 439055822be2..56549baedacc 100644 --- a/toolchain/check/testdata/impl/extend_impl.carbon +++ b/toolchain/check/testdata/impl/extend_impl.carbon @@ -40,6 +40,7 @@ fn G(c: C) { // CHECK:STDOUT: %HasF.facet: %HasF.type = facet_value %C, (%HasF.impl_witness) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %.a44: type = fn_type_with_self_type %F.type.b7b, %HasF.facet [concrete] @@ -63,8 +64,8 @@ fn G(c: C) { // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc21: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/extend_impl_generic.carbon b/toolchain/check/testdata/impl/extend_impl_generic.carbon index 46348cf26615..b9fd13536da8 100644 --- a/toolchain/check/testdata/impl/extend_impl_generic.carbon +++ b/toolchain/check/testdata/impl/extend_impl_generic.carbon @@ -51,11 +51,13 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HasF.type.fe3: type = generic_interface_type @HasF [concrete] // CHECK:STDOUT: %HasF.generic: %HasF.type.fe3 = struct_value () [concrete] // CHECK:STDOUT: %HasF.type.901: type = facet_type <@HasF, @HasF(%T)> [symbolic] // CHECK:STDOUT: %Self.322: %HasF.type.901 = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.46c: type = fn_type @F.1, @HasF(%T) [symbolic] // CHECK:STDOUT: %F.823: %F.type.46c = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type.dd8: type = assoc_entity_type @HasF, @HasF(%T) [symbolic] @@ -74,6 +76,7 @@ class X(U:! type) { // CHECK:STDOUT: %HasF.assoc_type.257: type = assoc_entity_type @HasF, @HasF(%Param) [concrete] // CHECK:STDOUT: %assoc0.afb: %HasF.assoc_type.257 = assoc_entity element0, @HasF.%F.decl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness @C.%HasF.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.b01: type = pattern_type %Param [concrete] // CHECK:STDOUT: %F.type.94c: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.901: %F.type.94c = struct_value () [concrete] // CHECK:STDOUT: %HasF.facet: %HasF.type.b18 = facet_value %C, (%HasF.impl_witness) [concrete] @@ -90,10 +93,12 @@ class X(U:! type) { // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_2.ecc, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_2.ecc, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %Param.val: %Param = struct_value (%int_2.ef8) [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %.22c: type = fn_type_with_self_type %F.type.7f1, %HasF.facet [concrete] @@ -118,15 +123,15 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: %HasF.type.fe3 = interface_decl @HasF [concrete = constants.%HasF.generic] { -// CHECK:STDOUT: %T.patt.loc4_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Param.decl: type = class_decl @Param [concrete = constants.%Param] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc20: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -136,7 +141,7 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @HasF(%T.loc4_16.1: type) { // CHECK:STDOUT: %T.loc4_16.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_16.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF, @HasF(%T.loc4_16.2)> [symbolic = %HasF.type (constants.%HasF.type.901)] @@ -149,8 +154,8 @@ class X(U:! type) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @HasF.%HasF.type (%HasF.type.901) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.322)] // CHECK:STDOUT: %F.decl: @HasF.%F.type (%F.type.46c) = fn_decl @F.1 [symbolic = @HasF.%F (constants.%F.823)] { -// CHECK:STDOUT: %return.patt: @F.1.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%T (%T) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @HasF.%T.loc4_16.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %return.param: ref @F.1.%T (%T) = out_param call_param0 @@ -169,8 +174,8 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.3b1: %Self.ref as %HasF.type { // CHECK:STDOUT: %F.decl: %F.type.94c = fn_decl @F.2 [concrete = constants.%F.901] { -// CHECK:STDOUT: %return.patt: %Param = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %Param = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.b01 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.b01 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Param.ref: type = name_ref Param, file.%Param.decl [concrete = constants.%Param] // CHECK:STDOUT: %return.param: ref %Param = out_param call_param0 @@ -219,6 +224,7 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.1(@HasF.%T.loc4_16.1: type, @HasF.%Self.1: @HasF.%HasF.type (%HasF.type.901)) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @F.1.%T (%T); // CHECK:STDOUT: } @@ -243,7 +249,7 @@ class X(U:! type) { // CHECK:STDOUT: fn @G(%c.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref.loc21: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc21_17: %HasF.assoc_type.257 = specific_constant @HasF.%assoc0.loc5_14.1, @HasF(constants.%Param) [concrete = constants.%assoc0.afb] @@ -260,8 +266,8 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %i32 = bind_name a, %.loc21_21 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc22_3: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc22_3: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %c.ref: %C = name_ref c, %c @@ -290,6 +296,7 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.322) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(%T.loc4_16.2) {} @@ -309,24 +316,28 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%Param, constants.%HasF.facet) { // CHECK:STDOUT: %T => constants.%Param +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b01 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- extend_impl_generic_class.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.325e65.1: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.209206.1: %I.type.325e65.1 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.209206.1 [symbolic] +// CHECK:STDOUT: %pattern_type.4be: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.2aef59.1: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.bb2dd4.1: %F.type.2aef59.1 = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type.1e5078.1: type = assoc_entity_type @I, @I(%T) [symbolic] // CHECK:STDOUT: %assoc0.8f0422.1: %I.assoc_type.1e5078.1 = assoc_entity element0, @I.%F.decl [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %X.type: type = generic_class_type @X [concrete] // CHECK:STDOUT: %X.generic: %X.type = struct_value () [concrete] // CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic] @@ -338,6 +349,8 @@ class X(U:! type) { // CHECK:STDOUT: %assoc0.8f0422.2: %I.assoc_type.1e5078.2 = assoc_entity element0, @I.%F.decl [symbolic] // CHECK:STDOUT: %require_complete.cfe: = require_complete_type %I.type.325e65.2 [symbolic] // CHECK:STDOUT: %I.impl_witness: = impl_witness @X.%I.impl_witness_table, @impl(%U) [symbolic] +// CHECK:STDOUT: %pattern_type.830: type = pattern_type %X [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %U [symbolic] // CHECK:STDOUT: %F.type.e88: type = fn_type @F.2, @impl(%U) [symbolic] // CHECK:STDOUT: %F.b02: %F.type.e88 = struct_value () [symbolic] // CHECK:STDOUT: %I.facet: %I.type.325e65.2 = facet_value %X, (%I.impl_witness) [symbolic] @@ -362,12 +375,12 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: %X.type = class_decl @X [concrete = constants.%X.generic] { -// CHECK:STDOUT: %U.patt.loc8_9.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_9.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc8_9.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_9.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc8_9.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc8_9.2 (constants.%U)] // CHECK:STDOUT: } @@ -375,7 +388,7 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc4_13.2)> [symbolic = %I.type (constants.%I.type.325e65.1)] @@ -388,10 +401,10 @@ class X(U:! type) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.325e65.1) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.209206.1)] // CHECK:STDOUT: %F.decl: @I.%F.type (%F.type.2aef59.1) = fn_decl @F.1 [symbolic = @I.%F (constants.%F.bb2dd4.1)] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %t.patt: @F.1.%T (%T) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.1.%T (%T) = value_param_pattern %t.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type.loc5_8 (%pattern_type.4be) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type.loc5_8 (%pattern_type.4be) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %t.patt: @F.1.%pattern_type.loc5_20 (%pattern_type.7dcd0a.1) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.1.%pattern_type.loc5_20 (%pattern_type.7dcd0a.1) = value_param_pattern %t.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.3 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -429,10 +442,10 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %Self.ref as %I.type.loc9_21.1 { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.e88) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.b02)] { -// CHECK:STDOUT: %self.patt: @F.2.%X (%X) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%X (%X) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %t.patt: @F.2.%U (%U) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.2.%U (%U) = value_param_pattern %t.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type.loc10_10 (%pattern_type.830) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type.loc10_10 (%pattern_type.830) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %t.patt: @F.2.%pattern_type.loc10_22 (%pattern_type.7dcd0a.2) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.2.%pattern_type.loc10_22 (%pattern_type.7dcd0a.2) = value_param_pattern %t.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.2.%X (%X) = value_param call_param0 // CHECK:STDOUT: %.loc10_16.1: type = splice_block %Self.ref [symbolic = %X (constants.%X)] { @@ -454,7 +467,7 @@ class X(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @X(%U.loc8_9.1: type) { // CHECK:STDOUT: %U.loc8_9.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc8_9.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc8_9.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_9.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc8_9.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_9.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%U.loc8_9.2)> [symbolic = %I.type (constants.%I.type.325e65.2)] @@ -487,6 +500,8 @@ class X(U:! type) { // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325e65.1)] // CHECK:STDOUT: %Self: @F.1.%I.type (%I.type.325e65.1) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.209206.1)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc5_8: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type.loc5_8 (constants.%pattern_type.4be)] +// CHECK:STDOUT: %pattern_type.loc5_20: type = pattern_type %T [symbolic = %pattern_type.loc5_20 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type), %t.param: @F.1.%T (%T)); // CHECK:STDOUT: } @@ -494,8 +509,10 @@ class X(U:! type) { // CHECK:STDOUT: generic fn @F.2(@X.%U.loc8_9.1: type) { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %X: type = class_type @X, @X(%U) [symbolic = %X (constants.%X)] +// CHECK:STDOUT: %pattern_type.loc10_10: type = pattern_type %X [symbolic = %pattern_type.loc10_10 (constants.%pattern_type.830)] // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%U)> [symbolic = %I.type (constants.%I.type.325e65.2)] // CHECK:STDOUT: %require_complete.loc10_25: = require_complete_type %I.type [symbolic = %require_complete.loc10_25 (constants.%require_complete.cfe)] +// CHECK:STDOUT: %pattern_type.loc10_22: type = pattern_type %U [symbolic = %pattern_type.loc10_22 (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10_14: = require_complete_type %X [symbolic = %require_complete.loc10_14 (constants.%require_complete.441)] @@ -517,6 +534,8 @@ class X(U:! type) { // CHECK:STDOUT: %I.type => constants.%I.type.325e65.1 // CHECK:STDOUT: %Self => constants.%Self.209206.1 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.4be +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(@F.1.%T) {} @@ -566,8 +585,10 @@ class X(U:! type) { // CHECK:STDOUT: specific @F.2(constants.%U) { // CHECK:STDOUT: %U => constants.%U // CHECK:STDOUT: %X => constants.%X +// CHECK:STDOUT: %pattern_type.loc10_10 => constants.%pattern_type.830 // CHECK:STDOUT: %I.type => constants.%I.type.325e65.2 // CHECK:STDOUT: %require_complete.loc10_25 => constants.%require_complete.cfe +// CHECK:STDOUT: %pattern_type.loc10_22 => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(@F.2.%U) {} @@ -579,6 +600,8 @@ class X(U:! type) { // CHECK:STDOUT: %I.type => constants.%I.type.325e65.2 // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%X +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.830 +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(@X.%U.loc8_9.2) {} diff --git a/toolchain/check/testdata/impl/fail_call_invalid.carbon b/toolchain/check/testdata/impl/fail_call_invalid.carbon index f37e0b9aad5f..d1e6deb64ffe 100644 --- a/toolchain/check/testdata/impl/fail_call_invalid.carbon +++ b/toolchain/check/testdata/impl/fail_call_invalid.carbon @@ -30,6 +30,7 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %Simple.type: type = facet_type <@Simple> [concrete] // CHECK:STDOUT: %Self.3c9: %Simple.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.716: type = facet_access_type %Self.3c9 [symbolic] +// CHECK:STDOUT: %pattern_type.f88: type = pattern_type %Self.as_type.716 [symbolic] // CHECK:STDOUT: %G.type.b60: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %G.cb0: %G.type.b60 = struct_value () [concrete] // CHECK:STDOUT: %Simple.assoc_type: type = assoc_entity_type @Simple [concrete] @@ -40,6 +41,7 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %G.type.c98: type = fn_type @G.2 [concrete] // CHECK:STDOUT: %G.e73: %G.type.c98 = struct_value () [concrete] // CHECK:STDOUT: %Simple.facet: %Simple.type = facet_value %i32, (%Simple.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %InstanceCall.type: type = fn_type @InstanceCall [concrete] // CHECK:STDOUT: %InstanceCall: %InstanceCall.type = struct_value () [concrete] // CHECK:STDOUT: %.0aa: type = fn_type_with_self_type %G.type.b60, %Simple.facet [concrete] @@ -70,8 +72,8 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: %Simple.impl_witness_table = impl_witness_table (), @impl.006 [concrete] // CHECK:STDOUT: %Simple.impl_witness: = impl_witness %Simple.impl_witness_table [concrete = constants.%Simple.impl_witness] // CHECK:STDOUT: %InstanceCall.decl: %InstanceCall.type = fn_decl @InstanceCall [concrete = constants.%InstanceCall] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc23: type = splice_block %i32 [concrete = constants.%i32] { @@ -85,8 +87,8 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: interface @Simple { // CHECK:STDOUT: %Self: %Simple.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.3c9] // CHECK:STDOUT: %G.decl: %G.type.b60 = fn_decl @G.1 [concrete = constants.%G.cb0] { -// CHECK:STDOUT: %self.patt: @G.1.%Self.as_type.loc12_14.1 (%Self.as_type.716) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.1.%Self.as_type.loc12_14.1 (%Self.as_type.716) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @G.1.%pattern_type (%pattern_type.f88) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.1.%pattern_type (%pattern_type.f88) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @G.1.%Self.as_type.loc12_14.1 (%Self.as_type.716) = value_param call_param0 // CHECK:STDOUT: %.loc12_14.1: type = splice_block %.loc12_14.2 [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type.716)] { @@ -123,6 +125,7 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: generic fn @G.1(@Simple.%Self: %Simple.type) { // CHECK:STDOUT: %Self: %Simple.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.3c9)] // CHECK:STDOUT: %Self.as_type.loc12_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type.716)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc12_14.1 [symbolic = %pattern_type (constants.%pattern_type.f88)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @G.1.%Self.as_type.loc12_14.1 (%Self.as_type.716)); // CHECK:STDOUT: } @@ -141,10 +144,12 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: specific @G.1(constants.%Self.3c9) { // CHECK:STDOUT: %Self => constants.%Self.3c9 // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%Self.as_type.716 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f88 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G.1(constants.%Simple.facet) { // CHECK:STDOUT: %Self => constants.%Simple.facet // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon b/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon index 3f13353fdffa..2cbfa62b7621 100644 --- a/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon +++ b/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon @@ -26,11 +26,13 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.c92: type = generic_interface_type @GenericInterface [concrete] // CHECK:STDOUT: %GenericInterface.generic: %GenericInterface.type.c92 = struct_value () [concrete] // CHECK:STDOUT: %GenericInterface.type.3fe: type = facet_type <@GenericInterface, @GenericInterface(%T)> [symbolic] // CHECK:STDOUT: %Self: %GenericInterface.type.3fe = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.a4b: type = fn_type @F.1, @GenericInterface(%T) [symbolic] // CHECK:STDOUT: %F.3d9: %F.type.a4b = struct_value () [symbolic] // CHECK:STDOUT: %GenericInterface.assoc_type: type = assoc_entity_type @GenericInterface, @GenericInterface(%T) [symbolic] @@ -60,7 +62,7 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %GenericInterface.decl: %GenericInterface.type.c92 = interface_decl @GenericInterface [concrete = constants.%GenericInterface.generic] { -// CHECK:STDOUT: %T.patt.loc11_28.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_28.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_28.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_28.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_28.2 (constants.%T)] // CHECK:STDOUT: } @@ -69,7 +71,7 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericInterface(%T.loc11_28.1: type) { // CHECK:STDOUT: %T.loc11_28.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_28.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_28.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_28.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_28.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %GenericInterface.type: type = facet_type <@GenericInterface, @GenericInterface(%T.loc11_28.2)> [symbolic = %GenericInterface.type (constants.%GenericInterface.type.3fe)] @@ -82,8 +84,8 @@ class C { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @GenericInterface.%GenericInterface.type (%GenericInterface.type.3fe) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %F.decl: @GenericInterface.%F.type (%F.type.a4b) = fn_decl @F.1 [symbolic = @GenericInterface.%F (constants.%F.3d9)] { -// CHECK:STDOUT: %x.patt: @F.1.%T (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.1.%T (%T) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: @F.1.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.1.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: @F.1.%T (%T) = value_param call_param0 // CHECK:STDOUT: %T.ref: type = name_ref T, @GenericInterface.%T.loc11_28.1 [symbolic = %T (constants.%T)] @@ -101,7 +103,7 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc20_23.1: type) { // CHECK:STDOUT: %T.loc20_23.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc20_23.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc20_23.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_23.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc20_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_23.2 (constants.%T.patt)] // CHECK:STDOUT: %GenericInterface.type.loc20_54.2: type = facet_type <@GenericInterface, @GenericInterface(%T.loc20_23.2)> [symbolic = %GenericInterface.type.loc20_54.2 (constants.%GenericInterface.type.3fe)] // CHECK:STDOUT: %require_complete: = require_complete_type %GenericInterface.type.loc20_54.2 [symbolic = %require_complete (constants.%require_complete.70f)] // CHECK:STDOUT: %GenericInterface.impl_witness: = impl_witness @C.%GenericInterface.impl_witness_table, @impl(%T.loc20_23.2) [symbolic = %GenericInterface.impl_witness (constants.%GenericInterface.impl_witness)] @@ -112,8 +114,8 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: impl: %Self.ref as %GenericInterface.type.loc20_54.1 { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.2cb) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.4b1)] { -// CHECK:STDOUT: %x.patt: @F.2.%T (%T) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.2.%T (%T) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: @F.2.%pattern_type (%pattern_type.7dc) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.2.%pattern_type (%pattern_type.7dc) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: @F.2.%T (%T) = value_param call_param0 // CHECK:STDOUT: %T.ref: type = name_ref T, @impl.%T.loc20_23.1 [symbolic = %T (constants.%T)] @@ -129,7 +131,7 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc20_23.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_23.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc20_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_23.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] // CHECK:STDOUT: %GenericInterface.ref: %GenericInterface.type.c92 = name_ref GenericInterface, file.%GenericInterface.decl [concrete = constants.%GenericInterface.generic] @@ -152,12 +154,14 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.1(@GenericInterface.%T.loc11_28.1: type, @GenericInterface.%Self.1: @GenericInterface.%GenericInterface.type (%GenericInterface.type.3fe)) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @F.1.%T (%T)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(@impl.%T.loc20_23.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -183,6 +187,7 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface(%T.loc11_28.2) {} @@ -205,5 +210,6 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_extend_undefined_interface.carbon b/toolchain/check/testdata/impl/fail_extend_undefined_interface.carbon index 5600638284cf..15c27a5b59c9 100644 --- a/toolchain/check/testdata/impl/fail_extend_undefined_interface.carbon +++ b/toolchain/check/testdata/impl/fail_extend_undefined_interface.carbon @@ -34,6 +34,7 @@ fn F(c: C) { // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.%I.impl_witness_table [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -56,8 +57,8 @@ fn F(c: C) { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc24: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon index 77916fe7b4bd..05b9e4a2f811 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon @@ -133,7 +133,7 @@ class FMissingReturnType { class FDifferentParamType { impl as J { - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+7]]:22: error: type `FDifferentParamType` of parameter 1 in redeclaration differs from previous parameter type `bool` [RedeclParamDiffersType] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+7]]:22: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: fn F[self: bool](b: Self) -> bool; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-46]]:32: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -146,7 +146,7 @@ class FDifferentParamType { class FDifferentImplicitParamType { impl as J { - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+7]]:10: error: type `FDifferentImplicitParamType` of implicit parameter 1 in redeclaration differs from previous parameter type `bool` [RedeclParamDiffersType] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+7]]:10: error: type `` of implicit parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: fn F[self: Self](b: bool) -> bool; // CHECK:STDERR: ^~~~~~~~~~ // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-59]]:20: note: previous declaration's corresponding implicit parameter here [RedeclParamPrevious] @@ -190,7 +190,7 @@ interface SelfNested { class SelfNestedBadParam { impl as SelfNested { - // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+7]]:10: error: type `(SelfNestedBadParam*, {.x: i32, .y: i32})` of parameter 1 in redeclaration differs from previous parameter type `(SelfNestedBadParam*, {.x: SelfNestedBadParam, .y: i32})` [RedeclParamDiffersType] + // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE+7]]:10: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: fn F(x: (SelfNestedBadParam*, {.x: i32, .y: i32})) -> array(SelfNestedBadParam, 4); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_impl_bad_assoc_fn.carbon:[[@LINE-8]]:8: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -238,11 +238,13 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %I.impl_witness.f6b: = impl_witness @FExtraParam.%I.impl_witness_table [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %F.type.44e: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.424: %F.type.44e = struct_value () [concrete] // CHECK:STDOUT: %I.facet.86d: %I.type = facet_value %FExtraParam, (%I.impl_witness.f6b) [concrete] // CHECK:STDOUT: %FExtraImplicitParam: type = class_type @FExtraImplicitParam [concrete] // CHECK:STDOUT: %I.impl_witness.e58: = impl_witness @FExtraImplicitParam.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.8ae: type = pattern_type %FExtraImplicitParam [concrete] // CHECK:STDOUT: %F.type.e1a: type = fn_type @F.3 [concrete] // CHECK:STDOUT: %F.6ff: %F.type.e1a = struct_value () [concrete] // CHECK:STDOUT: %I.facet.919: %I.type = facet_value %FExtraImplicitParam, (%I.impl_witness.e58) [concrete] @@ -274,16 +276,19 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %J.facet.97a: %J.type = facet_value %FMissingReturnType, (%J.impl_witness.39b) [concrete] // CHECK:STDOUT: %FDifferentParamType: type = class_type @FDifferentParamType [concrete] // CHECK:STDOUT: %J.impl_witness.eab: = impl_witness @FDifferentParamType.%J.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.b90: type = pattern_type %FDifferentParamType [concrete] // CHECK:STDOUT: %F.type.6b5: type = fn_type @F.9 [concrete] // CHECK:STDOUT: %F.043: %F.type.6b5 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.955: %J.type = facet_value %FDifferentParamType, (%J.impl_witness.eab) [concrete] // CHECK:STDOUT: %FDifferentImplicitParamType: type = class_type @FDifferentImplicitParamType [concrete] // CHECK:STDOUT: %J.impl_witness.103: = impl_witness @FDifferentImplicitParamType.%J.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.9cc: type = pattern_type %FDifferentImplicitParamType [concrete] // CHECK:STDOUT: %F.type.d62: type = fn_type @F.10 [concrete] // CHECK:STDOUT: %F.886: %F.type.d62 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.130: %J.type = facet_value %FDifferentImplicitParamType, (%J.impl_witness.103) [concrete] // CHECK:STDOUT: %FDifferentReturnType: type = class_type @FDifferentReturnType [concrete] // CHECK:STDOUT: %J.impl_witness.6f7: = impl_witness @FDifferentReturnType.%J.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.8ee: type = pattern_type %FDifferentReturnType [concrete] // CHECK:STDOUT: %F.type.d3b: type = fn_type @F.11 [concrete] // CHECK:STDOUT: %F.be8: %F.type.d3b = struct_value () [concrete] // CHECK:STDOUT: %J.facet.1a7: %J.type = facet_value %FDifferentReturnType, (%J.impl_witness.6f7) [concrete] @@ -301,8 +306,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %struct_type.x.y.81e: type = struct_type {.x: %Self.as_type, .y: %i32} [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.229: type = tuple_type (%ptr.e87, %struct_type.x.y.81e) [symbolic] +// CHECK:STDOUT: %pattern_type.ced: type = pattern_type %tuple.type.229 [symbolic] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %array_type.873: type = array_type %int_4, %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.c7e: type = pattern_type %array_type.873 [symbolic] // CHECK:STDOUT: %F.type.6ed: type = fn_type @F.13 [concrete] // CHECK:STDOUT: %F.998: %F.type.6ed = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.assoc_type: type = assoc_entity_type @SelfNested [concrete] @@ -312,21 +319,26 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %ptr.4cd: type = ptr_type %SelfNestedBadParam [concrete] // CHECK:STDOUT: %struct_type.x.y.871: type = struct_type {.x: %i32, .y: %i32} [concrete] // CHECK:STDOUT: %tuple.type.a7d: type = tuple_type (%ptr.4cd, %struct_type.x.y.871) [concrete] +// CHECK:STDOUT: %pattern_type.714: type = pattern_type %tuple.type.a7d [concrete] // CHECK:STDOUT: %array_type.a41: type = array_type %int_4, %SelfNestedBadParam [concrete] +// CHECK:STDOUT: %pattern_type.1f1: type = pattern_type %array_type.a41 [concrete] // CHECK:STDOUT: %F.type.f90: type = fn_type @F.14 [concrete] // CHECK:STDOUT: %F.fa8: %F.type.f90 = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.facet.9f5: %SelfNested.type = facet_value %SelfNestedBadParam, (%SelfNested.impl_witness.21a) [concrete] // CHECK:STDOUT: %struct_type.x.y.a89: type = struct_type {.x: %SelfNestedBadParam, .y: %i32} [concrete] // CHECK:STDOUT: %tuple.type.9c9: type = tuple_type (%ptr.4cd, %struct_type.x.y.a89) [concrete] +// CHECK:STDOUT: %pattern_type.a5c: type = pattern_type %tuple.type.9c9 [concrete] // CHECK:STDOUT: %SelfNestedBadReturnType: type = class_type @SelfNestedBadReturnType [concrete] // CHECK:STDOUT: %SelfNested.impl_witness.b10: = impl_witness @SelfNestedBadReturnType.%SelfNested.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.612: type = ptr_type %SelfNestedBadReturnType [concrete] // CHECK:STDOUT: %struct_type.x.y.ac5: type = struct_type {.x: %SelfNestedBadReturnType, .y: %i32} [concrete] // CHECK:STDOUT: %tuple.type.eb9: type = tuple_type (%ptr.612, %struct_type.x.y.ac5) [concrete] +// CHECK:STDOUT: %pattern_type.23f: type = pattern_type %tuple.type.eb9 [concrete] // CHECK:STDOUT: %F.type.0e7: type = fn_type @F.15 [concrete] // CHECK:STDOUT: %F.0bc: %F.type.0e7 = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.facet.3bd: %SelfNested.type = facet_value %SelfNestedBadReturnType, (%SelfNested.impl_witness.b10) [concrete] // CHECK:STDOUT: %array_type.126: type = array_type %int_4, %SelfNestedBadReturnType [concrete] +// CHECK:STDOUT: %pattern_type.f56: type = pattern_type %array_type.126 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -397,12 +409,12 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: interface @J { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.ccd] // CHECK:STDOUT: %F.decl: %F.type.c14 = fn_decl @F.5 [concrete = constants.%F.b71] { -// CHECK:STDOUT: %self.patt: bool = binding_pattern self -// CHECK:STDOUT: %self.param_patt: bool = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc93_44: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc93_44.1: type = value_of_initializer %bool.make_type.loc93_44 [concrete = bool] @@ -435,10 +447,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: interface @SelfNested { // CHECK:STDOUT: %Self: %SelfNested.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.2ff] // CHECK:STDOUT: %F.decl: %F.type.6ed = fn_decl @F.13 [concrete = constants.%F.998] { -// CHECK:STDOUT: %x.patt: @F.13.%tuple.type (%tuple.type.229) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.13.%tuple.type (%tuple.type.229) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.13.%array_type.loc188_57.1 (%array_type.873) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.13.%array_type.loc188_57.1 (%array_type.873) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: @F.13.%pattern_type.loc188_8 (%pattern_type.ced) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.13.%pattern_type.loc188_8 (%pattern_type.ced) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.13.%pattern_type.loc188_41 (%pattern_type.c7e) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.13.%pattern_type.loc188_41 (%pattern_type.c7e) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc188_50: %SelfNested.type = name_ref Self, @SelfNested.%Self [symbolic = %Self (constants.%Self.2ff)] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] @@ -498,8 +510,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.ddd: %Self.ref as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.44e = fn_decl @F.2 [concrete = constants.%F.424] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc62_13.1: type = splice_block %.loc62_13.3 [concrete = bool] { @@ -517,8 +529,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.698: %Self.ref as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.e1a = fn_decl @F.3 [concrete = constants.%F.6ff] { -// CHECK:STDOUT: %self.patt: %FExtraImplicitParam = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %FExtraImplicitParam = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.8ae = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.8ae = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %FExtraImplicitParam = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraImplicitParam [concrete = constants.%FExtraImplicitParam] @@ -532,8 +544,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.77b: %Self.ref as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.387 = fn_decl @F.4 [concrete = constants.%F.df5] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc89_15.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -549,10 +561,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.5cf: %Self.ref as %J.ref { // CHECK:STDOUT: %F.decl: %F.type.695 = fn_decl @F.6 [concrete = constants.%F.738] { -// CHECK:STDOUT: %self.patt: bool = binding_pattern self -// CHECK:STDOUT: %self.param_patt: bool = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc104_27: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc104_27.1: type = value_of_initializer %bool.make_type.loc104_27 [concrete = bool] @@ -575,10 +587,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.bac: %Self.ref as %J.ref { // CHECK:STDOUT: %F.decl: %F.type.d97 = fn_decl @F.7 [concrete = constants.%F.01d] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc117_22: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc117_22.1: type = value_of_initializer %bool.make_type.loc117_22 [concrete = bool] @@ -601,10 +613,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.1a7: %Self.ref as %J.ref { // CHECK:STDOUT: %F.decl: %F.type.123 = fn_decl @F.8 [concrete = constants.%F.c7d] { -// CHECK:STDOUT: %self.patt: bool = binding_pattern self -// CHECK:STDOUT: %self.param_patt: bool = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc130_16.1: type = splice_block %.loc130_16.3 [concrete = bool] { @@ -629,12 +641,12 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.f2b: %Self.ref as %J.ref { // CHECK:STDOUT: %F.decl: %F.type.6b5 = fn_decl @F.9 [concrete = constants.%F.043] { -// CHECK:STDOUT: %self.patt: bool = binding_pattern self -// CHECK:STDOUT: %self.param_patt: bool = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %b.patt: %FDifferentParamType = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %FDifferentParamType = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.b90 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.b90 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc143_34: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc143_34.1: type = value_of_initializer %bool.make_type.loc143_34 [concrete = bool] @@ -660,12 +672,12 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.db4: %Self.ref as %J.ref { // CHECK:STDOUT: %F.decl: %F.type.d62 = fn_decl @F.10 [concrete = constants.%F.886] { -// CHECK:STDOUT: %self.patt: %FDifferentImplicitParamType = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %FDifferentImplicitParamType = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.9cc = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.9cc = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc156_34: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc156_34.1: type = value_of_initializer %bool.make_type.loc156_34 [concrete = bool] @@ -691,12 +703,12 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.fcc: %Self.ref as %J.ref { // CHECK:STDOUT: %F.decl: %F.type.d3b = fn_decl @F.11 [concrete = constants.%F.be8] { -// CHECK:STDOUT: %self.patt: bool = binding_pattern self -// CHECK:STDOUT: %self.param_patt: bool = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %FDifferentReturnType = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %FDifferentReturnType = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.8ee = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.8ee = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentReturnType [concrete = constants.%FDifferentReturnType] // CHECK:STDOUT: %self.param: bool = value_param call_param0 @@ -724,12 +736,12 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c5d: %Self.ref as %J.ref { // CHECK:STDOUT: %F.decl: %F.type.d19 = fn_decl @F.12 [concrete = constants.%F.669] { -// CHECK:STDOUT: %self.patt: bool = binding_pattern self -// CHECK:STDOUT: %self.param_patt: bool = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %not_b.patt: bool = binding_pattern not_b -// CHECK:STDOUT: %not_b.param_patt: bool = value_param_pattern %not_b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.831 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.831 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %not_b.patt: %pattern_type.831 = binding_pattern not_b +// CHECK:STDOUT: %not_b.param_patt: %pattern_type.831 = value_param_pattern %not_b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc183_38: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc183_38.1: type = value_of_initializer %bool.make_type.loc183_38 [concrete = bool] @@ -759,10 +771,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.6a5: %Self.ref as %SelfNested.ref { // CHECK:STDOUT: %F.decl: %F.type.f90 = fn_decl @F.14 [concrete = constants.%F.fa8] { -// CHECK:STDOUT: %x.patt: %tuple.type.a7d = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %tuple.type.a7d = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %array_type.a41 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %array_type.a41 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.714 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.714 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.1f1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.1f1 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %SelfNestedBadParam.ref.loc200_65: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [concrete = constants.%SelfNestedBadParam] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] @@ -792,10 +804,10 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.bfc: %Self.ref as %SelfNested.ref { // CHECK:STDOUT: %F.decl: %F.type.0e7 = fn_decl @F.15 [concrete = constants.%F.0bc] { -// CHECK:STDOUT: %x.patt: %tuple.type.eb9 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %tuple.type.eb9 = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %array_type.a41 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %array_type.a41 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.23f = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.23f = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.1f1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.1f1 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %SelfNestedBadParam.ref: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [concrete = constants.%SelfNestedBadParam] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4] @@ -1105,7 +1117,9 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %ptr.loc188_16.1: type = ptr_type %Self.as_type.loc188_16.1 [symbolic = %ptr.loc188_16.1 (constants.%ptr.e87)] // CHECK:STDOUT: %struct_type.x.y.loc188_37.1: type = struct_type {.x: @F.13.%Self.as_type.loc188_16.1 (%Self.as_type), .y: %i32} [symbolic = %struct_type.x.y.loc188_37.1 (constants.%struct_type.x.y.81e)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%ptr.loc188_16.1, %struct_type.x.y.loc188_37.1) [symbolic = %tuple.type (constants.%tuple.type.229)] +// CHECK:STDOUT: %pattern_type.loc188_8: type = pattern_type %tuple.type [symbolic = %pattern_type.loc188_8 (constants.%pattern_type.ced)] // CHECK:STDOUT: %array_type.loc188_57.1: type = array_type constants.%int_4, %Self.as_type.loc188_16.1 [symbolic = %array_type.loc188_57.1 (constants.%array_type.873)] +// CHECK:STDOUT: %pattern_type.loc188_41: type = pattern_type %array_type.loc188_57.1 [symbolic = %pattern_type.loc188_41 (constants.%pattern_type.c7e)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @F.13.%tuple.type (%tuple.type.229)) -> @F.13.%array_type.loc188_57.1 (%array_type.873); // CHECK:STDOUT: } @@ -1144,7 +1158,9 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %ptr.loc188_16.1 => constants.%ptr.e87 // CHECK:STDOUT: %struct_type.x.y.loc188_37.1 => constants.%struct_type.x.y.81e // CHECK:STDOUT: %tuple.type => constants.%tuple.type.229 +// CHECK:STDOUT: %pattern_type.loc188_8 => constants.%pattern_type.ced // CHECK:STDOUT: %array_type.loc188_57.1 => constants.%array_type.873 +// CHECK:STDOUT: %pattern_type.loc188_41 => constants.%pattern_type.c7e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.13(constants.%SelfNested.facet.9f5) { @@ -1153,7 +1169,9 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %ptr.loc188_16.1 => constants.%ptr.4cd // CHECK:STDOUT: %struct_type.x.y.loc188_37.1 => constants.%struct_type.x.y.a89 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.9c9 +// CHECK:STDOUT: %pattern_type.loc188_8 => constants.%pattern_type.a5c // CHECK:STDOUT: %array_type.loc188_57.1 => constants.%array_type.a41 +// CHECK:STDOUT: %pattern_type.loc188_41 => constants.%pattern_type.1f1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.13(constants.%SelfNested.facet.3bd) { @@ -1162,6 +1180,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: %ptr.loc188_16.1 => constants.%ptr.612 // CHECK:STDOUT: %struct_type.x.y.loc188_37.1 => constants.%struct_type.x.y.ac5 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.eb9 +// CHECK:STDOUT: %pattern_type.loc188_8 => constants.%pattern_type.23f // CHECK:STDOUT: %array_type.loc188_57.1 => constants.%array_type.126 +// CHECK:STDOUT: %pattern_type.loc188_41 => constants.%pattern_type.f56 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon b/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon index 059128c2a6ea..fa1c2ecd3063 100644 --- a/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon +++ b/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon @@ -23,7 +23,7 @@ impl bool as I { } impl i32 as I { - // CHECK:STDERR: fail_self_type_mismatch.carbon:[[@LINE+7]]:8: error: type `C(i32)` of parameter 1 in redeclaration differs from previous parameter type `C(i32 as I)` [RedeclParamDiffersType] + // CHECK:STDERR: fail_self_type_mismatch.carbon:[[@LINE+7]]:8: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: fn F(c: C(i32)); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: fail_self_type_mismatch.carbon:[[@LINE-14]]:8: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -37,9 +37,11 @@ impl i32 as I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %X.patt.51c: %T = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.7fd: %pattern_type.7dc = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.b36: type = class_type @C, @C(%T, %X) [symbolic] @@ -47,8 +49,10 @@ impl i32 as I { // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %X.patt.3c8: %I.type = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %X.patt.5d4: %pattern_type.2b5 = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %C.dbb: type = class_type @C, @C(%I.type, %Self) [symbolic] +// CHECK:STDOUT: %pattern_type.4fb: type = pattern_type %C.dbb [symbolic] // CHECK:STDOUT: %F.type.cf0: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.bc6: %F.type.cf0 = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -58,17 +62,20 @@ impl i32 as I { // CHECK:STDOUT: %I.impl_witness.c21: = impl_witness file.%I.impl_witness_table.loc18 [concrete] // CHECK:STDOUT: %I.facet.e8a: %I.type = facet_value bool, (%I.impl_witness.c21) [concrete] // CHECK:STDOUT: %C.7db: type = class_type @C, @C(%I.type, %I.facet.e8a) [concrete] +// CHECK:STDOUT: %pattern_type.225: type = pattern_type %C.7db [concrete] // CHECK:STDOUT: %F.type.8ba: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.2cf: %F.type.8ba = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %I.impl_witness.d39: = impl_witness file.%I.impl_witness_table.loc25 [concrete] -// CHECK:STDOUT: %X.patt.7a9: type = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %X.patt.cec: %pattern_type.98f = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %C.6fb: type = class_type @C, @C(type, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.52b: type = pattern_type %C.6fb [concrete] // CHECK:STDOUT: %F.type.066: type = fn_type @F.3 [concrete] // CHECK:STDOUT: %F.9ec: %F.type.066 = struct_value () [concrete] // CHECK:STDOUT: %I.facet.8b2: %I.type = facet_value %i32, (%I.impl_witness.d39) [concrete] // CHECK:STDOUT: %C.835: type = class_type @C, @C(%I.type, %I.facet.8b2) [concrete] +// CHECK:STDOUT: %pattern_type.023: type = pattern_type %C.835 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -88,8 +95,8 @@ impl i32 as I { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc11_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_9.2 (constants.%T.patt)] -// CHECK:STDOUT: %X.patt.loc11_19.1: @C.%T.loc11_9.2 (%T) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc11_19.2 (constants.%X.patt.51c)] +// CHECK:STDOUT: %T.patt.loc11_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %X.patt.loc11_19.1: @C.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc11_19.2 (constants.%X.patt.7fd)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_9.2 (constants.%T)] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_9.1 [symbolic = %T.loc11_9.2 (constants.%T)] @@ -116,8 +123,8 @@ impl i32 as I { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type.cf0 = fn_decl @F.1 [concrete = constants.%F.bc6] { -// CHECK:STDOUT: %c.patt: @F.1.%C.loc15_17.1 (%C.dbb) = binding_pattern c -// CHECK:STDOUT: %c.param_patt: @F.1.%C.loc15_17.1 (%C.dbb) = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: @F.1.%pattern_type (%pattern_type.4fb) = binding_pattern c +// CHECK:STDOUT: %c.param_patt: @F.1.%pattern_type (%pattern_type.4fb) = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: @F.1.%C.loc15_17.1 (%C.dbb) = value_param call_param0 // CHECK:STDOUT: %.loc15: type = splice_block %C.loc15_17.2 [symbolic = %C.loc15_17.1 (constants.%C.dbb)] { @@ -138,8 +145,8 @@ impl i32 as I { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.049: %.loc18_6.2 as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.8ba = fn_decl @F.2 [concrete = constants.%F.2cf] { -// CHECK:STDOUT: %c.patt: %C.7db = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C.7db = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.225 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.225 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.7db = value_param call_param0 // CHECK:STDOUT: %.loc22_22: type = splice_block %C [concrete = constants.%C.7db] { @@ -162,8 +169,8 @@ impl i32 as I { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.a9a: %i32 as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.066 = fn_decl @F.3 [concrete = constants.%F.9ec] { -// CHECK:STDOUT: %c.patt: %C.6fb = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C.6fb = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.52b = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.52b = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.6fb = value_param call_param0 // CHECK:STDOUT: %.loc33: type = splice_block %C [concrete = constants.%C.6fb] { @@ -183,9 +190,10 @@ impl i32 as I { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc11_9.1: type, %X.loc11_19.1: @C.%T.loc11_9.2 (%T)) { // CHECK:STDOUT: %T.loc11_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_9.2 (constants.%T.patt)] // CHECK:STDOUT: %X.loc11_19.2: @C.%T.loc11_9.2 (%T) = bind_symbolic_name X, 1 [symbolic = %X.loc11_19.2 (constants.%X)] -// CHECK:STDOUT: %X.patt.loc11_19.2: @C.%T.loc11_9.2 (%T) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc11_19.2 (constants.%X.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc11_9.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %X.patt.loc11_19.2: @C.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc11_19.2 (constants.%X.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -202,6 +210,7 @@ impl i32 as I { // CHECK:STDOUT: generic fn @F.1(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %C.loc15_17.1: type = class_type @C, @C(constants.%I.type, %Self) [symbolic = %C.loc15_17.1 (constants.%C.dbb)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C.loc15_17.1 [symbolic = %pattern_type (constants.%pattern_type.4fb)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%c.param: @F.1.%C.loc15_17.1 (%C.dbb)); // CHECK:STDOUT: } @@ -214,19 +223,22 @@ impl i32 as I { // CHECK:STDOUT: %T.loc11_9.2 => constants.%T // CHECK:STDOUT: %T.patt.loc11_9.2 => constants.%T.patt // CHECK:STDOUT: %X.loc11_19.2 => constants.%X -// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc +// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.7fd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%I.type, constants.%Self) { // CHECK:STDOUT: %T.loc11_9.2 => constants.%I.type // CHECK:STDOUT: %T.patt.loc11_9.2 => constants.%T.patt // CHECK:STDOUT: %X.loc11_19.2 => constants.%Self -// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.3c8 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2b5 +// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.5d4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %C.loc15_17.1 => constants.%C.dbb +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4fb // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%I.type, @F.1.%Self) {} @@ -235,30 +247,35 @@ impl i32 as I { // CHECK:STDOUT: %T.loc11_9.2 => constants.%I.type // CHECK:STDOUT: %T.patt.loc11_9.2 => constants.%T.patt // CHECK:STDOUT: %X.loc11_19.2 => constants.%I.facet.e8a -// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.3c8 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2b5 +// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.5d4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%I.facet.e8a) { // CHECK:STDOUT: %Self => constants.%I.facet.e8a // CHECK:STDOUT: %C.loc15_17.1 => constants.%C.7db +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.225 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(type, constants.%i32) { // CHECK:STDOUT: %T.loc11_9.2 => type // CHECK:STDOUT: %T.patt.loc11_9.2 => constants.%T.patt // CHECK:STDOUT: %X.loc11_19.2 => constants.%i32 -// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.7a9 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f +// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.cec // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%I.facet.8b2) { // CHECK:STDOUT: %Self => constants.%I.facet.8b2 // CHECK:STDOUT: %C.loc15_17.1 => constants.%C.835 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.023 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%I.type, constants.%I.facet.8b2) { // CHECK:STDOUT: %T.loc11_9.2 => constants.%I.type // CHECK:STDOUT: %T.patt.loc11_9.2 => constants.%T.patt // CHECK:STDOUT: %X.loc11_19.2 => constants.%I.facet.8b2 -// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.3c8 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2b5 +// CHECK:STDOUT: %X.patt.loc11_19.2 => constants.%X.patt.5d4 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/impl_as.carbon b/toolchain/check/testdata/impl/impl_as.carbon index 2b56a1e4c9bd..130e7fe534ae 100644 --- a/toolchain/check/testdata/impl/impl_as.carbon +++ b/toolchain/check/testdata/impl/impl_as.carbon @@ -37,6 +37,7 @@ class C { // CHECK:STDOUT: %Simple.facet: %Simple.type = facet_value %C, (%Simple.impl_witness) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -102,8 +103,8 @@ class C { // CHECK:STDOUT: fn @F.2() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc19_7.1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc19_7.1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc19_19.1: %empty_struct_type = struct_literal () diff --git a/toolchain/check/testdata/impl/impl_forall.carbon b/toolchain/check/testdata/impl/impl_forall.carbon index 941ea3d90eba..18735daa9992 100644 --- a/toolchain/check/testdata/impl/impl_forall.carbon +++ b/toolchain/check/testdata/impl/impl_forall.carbon @@ -26,7 +26,8 @@ impl forall [T:! type] T as Simple { // CHECK:STDOUT: %Simple.assoc_type: type = assoc_entity_type @Simple [concrete] // CHECK:STDOUT: %assoc0: %Simple.assoc_type = assoc_entity element0, @Simple.%F.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Simple.impl_witness: = impl_witness file.%Simple.impl_witness_table, @impl(%T) [symbolic] // CHECK:STDOUT: %F.type.1e1: type = fn_type @F.2, @impl(%T) [symbolic] // CHECK:STDOUT: %F.4c3: %F.type.1e1 = struct_value () [symbolic] @@ -48,7 +49,7 @@ impl forall [T:! type] T as Simple { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Simple.decl: type = interface_decl @Simple [concrete = constants.%Simple.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc15_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc15_14.1 [symbolic = %T.loc15_14.2 (constants.%T)] // CHECK:STDOUT: %Simple.ref: type = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.type] @@ -71,7 +72,7 @@ impl forall [T:! type] T as Simple { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc15_14.1: type) { // CHECK:STDOUT: %T.loc15_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc15_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: %Simple.impl_witness: = impl_witness file.%Simple.impl_witness_table, @impl(%T.loc15_14.2) [symbolic = %Simple.impl_witness (constants.%Simple.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/impl/lookup/alias.carbon b/toolchain/check/testdata/impl/lookup/alias.carbon index 360b415320a9..261ad116f6b1 100644 --- a/toolchain/check/testdata/impl/lookup/alias.carbon +++ b/toolchain/check/testdata/impl/lookup/alias.carbon @@ -42,6 +42,7 @@ fn G(c: C) { // CHECK:STDOUT: %F.type.a02: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.dc7: %F.type.a02 = struct_value () [concrete] // CHECK:STDOUT: %HasF.facet: %HasF.type = facet_value %C, (%HasF.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %.fec: type = fn_type_with_self_type %F.type.b7b, %HasF.facet [concrete] @@ -71,8 +72,8 @@ fn G(c: C) { // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness %HasF.impl_witness_table [concrete = constants.%HasF.impl_witness] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc23: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon b/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon index c56713f1a491..509ee0271b3c 100644 --- a/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon +++ b/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon @@ -41,6 +41,7 @@ fn F(c: C) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -63,8 +64,8 @@ fn F(c: C) { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc19: type = name_ref C, file.%C.decl [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/lookup/generic.carbon b/toolchain/check/testdata/impl/lookup/generic.carbon index 718229ebee39..120b7d9a04eb 100644 --- a/toolchain/check/testdata/impl/lookup/generic.carbon +++ b/toolchain/check/testdata/impl/lookup/generic.carbon @@ -129,19 +129,23 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.28f: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.b7b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.f50: %F.type.b7b = struct_value () [concrete] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, @HasF.%F.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HasF.impl_witness.ec7: = impl_witness file.%HasF.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.3fd: type = fn_type @F.2, @impl(%T) [symbolic] // CHECK:STDOUT: %F.c98: %F.type.3fd = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet.216: %HasF.type = facet_value %T, (%HasF.impl_witness.ec7) [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.impl_witness.6e4: = impl_witness file.%HasF.impl_witness_table, @impl(%empty_struct_type) [concrete] @@ -169,7 +173,7 @@ fn G(x: A) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_14.1 [symbolic = %T.loc8_14.2 (constants.%T)] // CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type] @@ -178,8 +182,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness %HasF.impl_witness_table, @impl(constants.%T) [symbolic = @impl.%HasF.impl_witness (constants.%HasF.impl_witness.ec7)] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_struct_type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc12_10.1: type = splice_block %.loc12_10.3 [concrete = constants.%empty_struct_type] { @@ -193,8 +197,8 @@ fn G(x: A) { // CHECK:STDOUT: interface @HasF { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type.b7b = fn_decl @F.1 [concrete = constants.%F.f50] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.28f) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.28f) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -214,7 +218,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc8_14.1: type) { // CHECK:STDOUT: %T.loc8_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table, @impl(%T.loc8_14.2) [symbolic = %HasF.impl_witness (constants.%HasF.impl_witness.ec7)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -223,8 +227,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %HasF.ref { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.3fd) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.c98)] { -// CHECK:STDOUT: %self.patt: @F.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%T (%T) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type (%pattern_type.7dc) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type (%pattern_type.7dc) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.2.%T (%T) = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] @@ -240,12 +244,14 @@ fn G(x: A) { // CHECK:STDOUT: generic fn @F.1(@HasF.%Self: %HasF.type) { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.28f)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(@impl.%T.loc8_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete)] @@ -272,6 +278,7 @@ fn G(x: A) { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.28f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -288,11 +295,13 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%HasF.facet.216) { // CHECK:STDOUT: %Self => constants.%HasF.facet.216 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%empty_struct_type) { @@ -307,6 +316,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%empty_struct_type) { // CHECK:STDOUT: %T => constants.%empty_struct_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a96 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -318,18 +328,22 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.28f: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.b7b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.f50: %F.type.b7b = struct_value () [concrete] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, @HasF.%F.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HasF.impl_witness.ec7: = impl_witness file.%HasF.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.3fd: type = fn_type @F.2, @impl(%T) [symbolic] // CHECK:STDOUT: %F.c98: %F.type.3fd = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet.216: %HasF.type = facet_value %T, (%HasF.impl_witness.ec7) [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.impl_witness.6e4: = impl_witness file.%HasF.impl_witness_table, @impl(%empty_struct_type) [concrete] @@ -358,7 +372,7 @@ fn G(x: A) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_14.1 [symbolic = %T.loc8_14.2 (constants.%T)] // CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type] @@ -367,10 +381,10 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness %HasF.impl_witness_table, @impl(constants.%T) [symbolic = @impl.%HasF.impl_witness (constants.%HasF.impl_witness.ec7)] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_struct_type = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_17.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc12_17.2: type = converted %.loc12_17.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -388,10 +402,10 @@ fn G(x: A) { // CHECK:STDOUT: interface @HasF { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type.b7b = fn_decl @F.1 [concrete = constants.%F.f50] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.28f) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.28f) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.28f) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.28f) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc5_25: %HasF.type = name_ref Self, @HasF.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_25: type = facet_access_type %Self.ref.loc5_25 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] @@ -416,7 +430,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc8_14.1: type) { // CHECK:STDOUT: %T.loc8_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table, @impl(%T.loc8_14.2) [symbolic = %HasF.impl_witness (constants.%HasF.impl_witness.ec7)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -425,10 +439,10 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %HasF.ref { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.3fd) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.c98)] { -// CHECK:STDOUT: %self.patt: @F.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%T (%T) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type (%pattern_type.7dc) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type (%pattern_type.7dc) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @impl.%T.loc8_14.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @F.2.%T (%T) = value_param call_param0 @@ -448,12 +462,14 @@ fn G(x: A) { // CHECK:STDOUT: generic fn @F.1(@HasF.%Self: %HasF.type) { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.28f)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type)) -> @F.1.%Self.as_type.loc5_14.1 (%Self.as_type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(@impl.%T.loc8_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete)] @@ -485,6 +501,7 @@ fn G(x: A) { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.28f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -501,11 +518,13 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%HasF.facet.216) { // CHECK:STDOUT: %Self => constants.%HasF.facet.216 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%empty_struct_type) { @@ -520,6 +539,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%empty_struct_type) { // CHECK:STDOUT: %T => constants.%empty_struct_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a96 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -531,24 +551,28 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.28f: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.b7b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.f50: %F.type.b7b = struct_value () [concrete] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, @HasF.%F.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %HasF.impl_witness.834: = impl_witness file.%HasF.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.e5e: type = pattern_type %C.f2e [symbolic] // CHECK:STDOUT: %F.type.8fe: type = fn_type @F.2, @impl(%T) [symbolic] // CHECK:STDOUT: %F.92a: %F.type.8fe = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet.766: %HasF.type = facet_value %C.f2e, (%HasF.impl_witness.834) [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %C.f2e [symbolic] // CHECK:STDOUT: %C.7a7: type = class_type @C, @C(%empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.99a: type = pattern_type %C.7a7 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.impl_witness.0de: = impl_witness file.%HasF.impl_witness_table, @impl(%empty_struct_type) [concrete] @@ -576,12 +600,12 @@ fn G(x: A) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc8_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc10_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc10_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc10_14.1 [symbolic = %T.loc10_14.2 (constants.%T)] @@ -592,8 +616,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness %HasF.impl_witness_table, @impl(constants.%T) [symbolic = @impl.%HasF.impl_witness (constants.%HasF.impl_witness.834)] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.patt: %C.7a7 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %C.7a7 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.99a = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.99a = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %C.7a7 = value_param call_param0 // CHECK:STDOUT: %.loc14_13.1: type = splice_block %C [concrete = constants.%C.7a7] { @@ -609,8 +633,8 @@ fn G(x: A) { // CHECK:STDOUT: interface @HasF { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type.b7b = fn_decl @F.1 [concrete = constants.%F.f50] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.28f) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.28f) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -630,7 +654,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc10_14.1: type) { // CHECK:STDOUT: %T.loc10_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc10_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc10_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc10_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt)] // CHECK:STDOUT: %C.loc10_27.2: type = class_type @C, @C(%T.loc10_14.2) [symbolic = %C.loc10_27.2 (constants.%C.f2e)] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table, @impl(%T.loc10_14.2) [symbolic = %HasF.impl_witness (constants.%HasF.impl_witness.834)] // CHECK:STDOUT: @@ -640,8 +664,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %C.loc10_27.1 as %HasF.ref { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.8fe) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.92a)] { -// CHECK:STDOUT: %self.patt: @F.2.%C (%C.f2e) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%C (%C.f2e) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type (%pattern_type.e5e) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type (%pattern_type.e5e) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.2.%C (%C.f2e) = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%C.loc10_27.1 [symbolic = %C (constants.%C.f2e)] @@ -656,7 +680,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc8_9.1: type) { // CHECK:STDOUT: %T.loc8_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -673,6 +697,7 @@ fn G(x: A) { // CHECK:STDOUT: generic fn @F.1(@HasF.%Self: %HasF.type) { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.28f)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -680,6 +705,7 @@ fn G(x: A) { // CHECK:STDOUT: generic fn @F.2(@impl.%T.loc10_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [symbolic = %pattern_type (constants.%pattern_type.e5e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %C [symbolic = %require_complete (constants.%require_complete)] @@ -706,6 +732,7 @@ fn G(x: A) { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.28f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%T) { @@ -733,6 +760,7 @@ fn G(x: A) { // CHECK:STDOUT: specific @F.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %C => constants.%C.f2e +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e5e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(@F.2.%T) {} @@ -740,6 +768,7 @@ fn G(x: A) { // CHECK:STDOUT: specific @F.1(constants.%HasF.facet.766) { // CHECK:STDOUT: %Self => constants.%HasF.facet.766 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%C.f2e +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e5e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%empty_struct_type) { @@ -763,6 +792,7 @@ fn G(x: A) { // CHECK:STDOUT: specific @F.2(constants.%empty_struct_type) { // CHECK:STDOUT: %T => constants.%empty_struct_type // CHECK:STDOUT: %C => constants.%C.7a7 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.99a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -772,13 +802,15 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HasF.type.fe3: type = generic_interface_type @HasF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %HasF.generic: %HasF.type.fe3 = struct_value () [concrete] // CHECK:STDOUT: %HasF.type.901: type = facet_type <@HasF, @HasF(%T)> [symbolic] // CHECK:STDOUT: %Self.322: %HasF.type.901 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.322 [symbolic] +// CHECK:STDOUT: %pattern_type.dfb: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.46c: type = fn_type @F.1, @HasF(%T) [symbolic] // CHECK:STDOUT: %F.823: %F.type.46c = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type.dd8: type = assoc_entity_type @HasF, @HasF(%T) [symbolic] @@ -786,6 +818,7 @@ fn G(x: A) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %require_complete: = require_complete_type %HasF.type.901 [symbolic] // CHECK:STDOUT: %HasF.impl_witness.55c: = impl_witness file.%HasF.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %F.type.6c8: type = fn_type @F.2, @impl(%T) [symbolic] // CHECK:STDOUT: %F.008: %F.type.6c8 = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet.566: %HasF.type.901 = facet_value %empty_struct_type, (%HasF.impl_witness.55c) [symbolic] @@ -821,12 +854,12 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: %HasF.type.fe3 = interface_decl @HasF [concrete = constants.%HasF.generic] { -// CHECK:STDOUT: %T.patt.loc4_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_25.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc8_25.2: type = converted %.loc8_25.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -838,8 +871,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness %HasF.impl_witness_table, @impl(constants.%T) [symbolic = @impl.%HasF.impl_witness (constants.%HasF.impl_witness.55c)] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_struct_type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc12_10.1: type = splice_block %.loc12_10.3 [concrete = constants.%empty_struct_type] { @@ -852,7 +885,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @HasF(%T.loc4_16.1: type) { // CHECK:STDOUT: %T.loc4_16.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_16.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF, @HasF(%T.loc4_16.2)> [symbolic = %HasF.type (constants.%HasF.type.901)] @@ -865,8 +898,8 @@ fn G(x: A) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @HasF.%HasF.type (%HasF.type.901) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.322)] // CHECK:STDOUT: %F.decl: @HasF.%F.type (%F.type.46c) = fn_decl @F.1 [symbolic = @HasF.%F (constants.%F.823)] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.dfb) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.dfb) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.3 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -888,7 +921,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc8_14.1: type) { // CHECK:STDOUT: %T.loc8_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: %HasF.type.loc8_36.2: type = facet_type <@HasF, @HasF(%T.loc8_14.2)> [symbolic = %HasF.type.loc8_36.2 (constants.%HasF.type.901)] // CHECK:STDOUT: %require_complete: = require_complete_type %HasF.type.loc8_36.2 [symbolic = %require_complete (constants.%require_complete)] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table, @impl(%T.loc8_14.2) [symbolic = %HasF.impl_witness (constants.%HasF.impl_witness.55c)] @@ -899,8 +932,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %.loc8_25.2 as %HasF.type.loc8_36.1 { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.6c8) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.008)] { -// CHECK:STDOUT: %self.patt: %empty_struct_type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_struct_type = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.a96 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.a96 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%.loc8_25.2 [concrete = constants.%empty_struct_type] @@ -918,6 +951,7 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF, @HasF(%T)> [symbolic = %HasF.type (constants.%HasF.type.901)] // CHECK:STDOUT: %Self: @F.1.%HasF.type (%HasF.type.901) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.322)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.dfb)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -966,6 +1000,7 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type => constants.%HasF.type.901 // CHECK:STDOUT: %Self => constants.%Self.322 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dfb // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(@F.1.%T) {} @@ -995,6 +1030,7 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type => constants.%HasF.type.901 // CHECK:STDOUT: %Self => constants.%HasF.facet.566 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%empty_struct_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a96 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(constants.%empty_struct_type) { @@ -1032,19 +1068,23 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.28f: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.b7b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.f50: %F.type.b7b = struct_value () [concrete] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, @HasF.%F.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table, @impl(%T, %U) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.56e: type = fn_type @F.2, @impl(%T, %U) [symbolic] // CHECK:STDOUT: %F.9b8: %F.type.56e = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -1065,8 +1105,8 @@ fn G(x: A) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: type = interface_decl @HasF [concrete = constants.%HasF.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc12_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt.loc12_24.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_24.2 (constants.%U.patt)] +// CHECK:STDOUT: %T.patt.loc12_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt.loc12_24.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_24.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc12_14.1 [symbolic = %T.loc12_14.2 (constants.%T)] // CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type] @@ -1076,8 +1116,8 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness %HasF.impl_witness_table, @impl(constants.%T, constants.%U) [symbolic = @impl.%HasF.impl_witness (constants.%HasF.impl_witness)] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_struct_type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.a96 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc16_10.1: type = splice_block %.loc16_10.3 [concrete = constants.%empty_struct_type] { @@ -1091,8 +1131,8 @@ fn G(x: A) { // CHECK:STDOUT: interface @HasF { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type.b7b = fn_decl @F.1 [concrete = constants.%F.f50] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.28f) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.28f) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -1112,9 +1152,9 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc12_14.1: type, %U.loc12_24.1: type) { // CHECK:STDOUT: %T.loc12_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt)] // CHECK:STDOUT: %U.loc12_24.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc12_24.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc12_24.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_24.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc12_24.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc12_24.2 (constants.%U.patt)] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table, @impl(%T.loc12_14.2, %U.loc12_24.2) [symbolic = %HasF.impl_witness (constants.%HasF.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1123,8 +1163,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %HasF.ref { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.56e) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.9b8)] { -// CHECK:STDOUT: %self.patt: @F.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%T (%T) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type (%pattern_type.7dc) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type (%pattern_type.7dc) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.2.%T (%T) = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] @@ -1140,12 +1180,14 @@ fn G(x: A) { // CHECK:STDOUT: generic fn @F.1(@HasF.%Self: %HasF.type) { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.28f)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(@impl.%T.loc12_14.1: type, @impl.%U.loc12_24.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete)] @@ -1167,6 +1209,7 @@ fn G(x: A) { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.28f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T, constants.%U) { @@ -1185,24 +1228,28 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%T, constants.%U) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_inconsistent_deduction.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %HasF.type.fe3: type = generic_interface_type @HasF [concrete] // CHECK:STDOUT: %HasF.generic: %HasF.type.fe3 = struct_value () [concrete] // CHECK:STDOUT: %HasF.type.901: type = facet_type <@HasF, @HasF(%T)> [symbolic] // CHECK:STDOUT: %Self.322: %HasF.type.901 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.322 [symbolic] +// CHECK:STDOUT: %pattern_type.dfb: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.46c: type = fn_type @F.1, @HasF(%T) [symbolic] // CHECK:STDOUT: %F.823: %F.type.46c = struct_value () [symbolic] // CHECK:STDOUT: %HasF.assoc_type.dd8: type = assoc_entity_type @HasF, @HasF(%T) [symbolic] // CHECK:STDOUT: %assoc0.d31: %HasF.assoc_type.dd8 = assoc_entity element0, @HasF.%F.decl [symbolic] // CHECK:STDOUT: %require_complete.03f: = require_complete_type %HasF.type.901 [symbolic] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %F.type.912: type = fn_type @F.2, @impl(%T) [symbolic] // CHECK:STDOUT: %F.f30: %F.type.912 = struct_value () [symbolic] // CHECK:STDOUT: %HasF.facet: %HasF.type.901 = facet_value %T, (%HasF.impl_witness) [symbolic] @@ -1211,6 +1258,7 @@ fn G(x: A) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %HasF.type.2f5: type = facet_type <@HasF, @HasF(%B)> [concrete] @@ -1238,12 +1286,12 @@ fn G(x: A) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasF.decl: %HasF.type.fe3 = interface_decl @HasF [concrete = constants.%HasF.generic] { -// CHECK:STDOUT: %T.patt.loc4_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_24: type = name_ref T, %T.loc8_14.1 [symbolic = %T.loc8_14.2 (constants.%T)] // CHECK:STDOUT: %HasF.ref: %HasF.type.fe3 = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.generic] @@ -1256,8 +1304,8 @@ fn G(x: A) { // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.patt: %A = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %A = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.c10 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.c10 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -1267,7 +1315,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @HasF(%T.loc4_16.1: type) { // CHECK:STDOUT: %T.loc4_16.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_16.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF, @HasF(%T.loc4_16.2)> [symbolic = %HasF.type (constants.%HasF.type.901)] @@ -1280,8 +1328,8 @@ fn G(x: A) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @HasF.%HasF.type (%HasF.type.901) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.322)] // CHECK:STDOUT: %F.decl: @HasF.%F.type (%F.type.46c) = fn_decl @F.1 [symbolic = @HasF.%F (constants.%F.823)] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.dfb) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.dfb) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.3 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -1303,7 +1351,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc8_14.1: type) { // CHECK:STDOUT: %T.loc8_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: %HasF.type.loc8_35.2: type = facet_type <@HasF, @HasF(%T.loc8_14.2)> [symbolic = %HasF.type.loc8_35.2 (constants.%HasF.type.901)] // CHECK:STDOUT: %require_complete: = require_complete_type %HasF.type.loc8_35.2 [symbolic = %require_complete (constants.%require_complete.03f)] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table, @impl(%T.loc8_14.2) [symbolic = %HasF.impl_witness (constants.%HasF.impl_witness)] @@ -1314,8 +1362,8 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref.loc8_24 as %HasF.type.loc8_35.1 { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.912) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.f30)] { -// CHECK:STDOUT: %self.patt: @F.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%T (%T) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type (%pattern_type.7dc) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type (%pattern_type.7dc) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.2.%T (%T) = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%T.ref.loc8_24 [symbolic = %T (constants.%T)] @@ -1351,12 +1399,14 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF, @HasF(%T)> [symbolic = %HasF.type (constants.%HasF.type.901)] // CHECK:STDOUT: %Self: @F.1.%HasF.type (%HasF.type.901) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.322)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.dfb)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(@impl.%T.loc8_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -1396,6 +1446,7 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type => constants.%HasF.type.901 // CHECK:STDOUT: %Self => constants.%Self.322 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dfb // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(@F.1.%T) {} @@ -1420,6 +1471,7 @@ fn G(x: A) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%T, constants.%HasF.facet) { @@ -1427,6 +1479,7 @@ fn G(x: A) { // CHECK:STDOUT: %HasF.type => constants.%HasF.type.901 // CHECK:STDOUT: %Self => constants.%HasF.facet // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @HasF(constants.%B) { diff --git a/toolchain/check/testdata/impl/lookup/instance_method.carbon b/toolchain/check/testdata/impl/lookup/instance_method.carbon index 9f80df9c5192..2c5bb1390219 100644 --- a/toolchain/check/testdata/impl/lookup/instance_method.carbon +++ b/toolchain/check/testdata/impl/lookup/instance_method.carbon @@ -31,13 +31,16 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.cf0: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.bc6: %F.type.cf0 = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%F.decl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type.f36: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.4c3: %F.type.f36 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] @@ -68,10 +71,10 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl.loc17: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.3 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -86,10 +89,10 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type.cf0 = fn_decl @F.1 [concrete = constants.%F.bc6] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc14_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc14_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.6de) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.6de) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -113,10 +116,10 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %Self.ref as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.f36 = fn_decl @F.2 [concrete = constants.%F.4c3] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -153,6 +156,7 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: generic fn @F.1(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc14_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc14_14.1 [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc14_14.1 (%Self.as_type)) -> %i32; // CHECK:STDOUT: } @@ -174,10 +178,12 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc14_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc14_14.1 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/min_prelude/canonical_query_self.carbon b/toolchain/check/testdata/impl/lookup/min_prelude/canonical_query_self.carbon index 7a8ce67acc00..4ee2b2b4c2e3 100644 --- a/toolchain/check/testdata/impl/lookup/min_prelude/canonical_query_self.carbon +++ b/toolchain/check/testdata/impl/lookup/min_prelude/canonical_query_self.carbon @@ -51,6 +51,7 @@ fn G() { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self.826: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.b70: type = facet_access_type %Self.826 [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %Self.as_type.b70 [symbolic] // CHECK:STDOUT: %II.type.465: type = fn_type @II.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %II.a07: %II.type.465 = struct_value () [concrete] @@ -59,6 +60,7 @@ fn G() { // CHECK:STDOUT: %J.type: type = facet_type <@J> [concrete] // CHECK:STDOUT: %Self.ccd: %J.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.3df: type = facet_access_type %Self.ccd [symbolic] +// CHECK:STDOUT: %pattern_type.4ca: type = pattern_type %Self.as_type.3df [symbolic] // CHECK:STDOUT: %JJ.type.622: type = fn_type @JJ.1 [concrete] // CHECK:STDOUT: %JJ.5f5: %JJ.type.622 = struct_value () [concrete] // CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete] @@ -69,12 +71,15 @@ fn G() { // CHECK:STDOUT: %assoc0.d45: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type.19f: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type.19f [symbolic] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl.f92 [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl.f92(%T.8b3) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T.8b3) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T.8b3 [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl.f92(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] @@ -87,8 +92,10 @@ fn G() { // CHECK:STDOUT: %bound_method: = bound_method %I.type, %Op.specific_fn [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@I & @J> [concrete] // CHECK:STDOUT: %T.527: %facet_type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.6c2: %facet_type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.f8f: type = pattern_type %facet_type [concrete] +// CHECK:STDOUT: %T.patt.401: %pattern_type.f8f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.527 [symbolic] +// CHECK:STDOUT: %pattern_type.a4f: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.df2: = require_complete_type %T.as_type [symbolic] @@ -103,6 +110,7 @@ fn G() { // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.893: type = pattern_type %C [concrete] // CHECK:STDOUT: %II.type.f11: type = fn_type @II.2 [concrete] // CHECK:STDOUT: %II.b71: %II.type.f11 = struct_value () [concrete] // CHECK:STDOUT: %I.facet.98f: %I.type = facet_value %C, (%I.impl_witness) [concrete] @@ -123,10 +131,10 @@ fn G() { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0.d45] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.f92.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.f92.%T (constants.%T.8b3)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.f92.%T (constants.%T.8b3)] @@ -146,9 +154,9 @@ fn G() { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc21_6.1: %facet_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_6.2 (constants.%T.patt.6c2)] -// CHECK:STDOUT: %t.patt: @F.%T.as_type.loc21_20.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.%T.as_type.loc21_20.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc21_6.1: %pattern_type.f8f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_6.2 (constants.%T.patt.401)] +// CHECK:STDOUT: %t.patt: @F.%pattern_type (%pattern_type.a4f) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.%pattern_type (%pattern_type.a4f) = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc21_12.1: type = splice_block %.loc21_12.3 [concrete = constants.%facet_type] { // CHECK:STDOUT: %I.ref.loc21: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -176,8 +184,8 @@ fn G() { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.826] // CHECK:STDOUT: %II.decl: %II.type.465 = fn_decl @II.1 [concrete = constants.%II.a07] { -// CHECK:STDOUT: %self.patt: @II.1.%Self.as_type.loc15_15.1 (%Self.as_type.b70) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @II.1.%Self.as_type.loc15_15.1 (%Self.as_type.b70) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @II.1.%pattern_type (%pattern_type.6de) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @II.1.%pattern_type (%pattern_type.6de) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @II.1.%Self.as_type.loc15_15.1 (%Self.as_type.b70) = value_param call_param0 // CHECK:STDOUT: %.loc15_15.1: type = splice_block %.loc15_15.2 [symbolic = %Self.as_type.loc15_15.1 (constants.%Self.as_type.b70)] { @@ -200,8 +208,8 @@ fn G() { // CHECK:STDOUT: interface @J { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.ccd] // CHECK:STDOUT: %JJ.decl: %JJ.type.622 = fn_decl @JJ.1 [concrete = constants.%JJ.5f5] { -// CHECK:STDOUT: %self.patt: @JJ.1.%Self.as_type.loc18_15.1 (%Self.as_type.3df) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @JJ.1.%Self.as_type.loc18_15.1 (%Self.as_type.3df) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @JJ.1.%pattern_type (%pattern_type.4ca) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @JJ.1.%pattern_type (%pattern_type.4ca) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @JJ.1.%Self.as_type.loc18_15.1 (%Self.as_type.3df) = value_param call_param0 // CHECK:STDOUT: %.loc18_15.1: type = splice_block %.loc18_15.2 [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.3df)] { @@ -228,7 +236,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.f92(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.250)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl.f92(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -244,8 +252,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.093: %Self.ref as %I.ref { // CHECK:STDOUT: %II.decl: %II.type.f11 = fn_decl @II.2 [concrete = constants.%II.b71] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.893 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.893 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -259,8 +267,8 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.023: %Self.ref as %J.ref { // CHECK:STDOUT: %JJ.decl: %JJ.type.811 = fn_decl @JJ.2 [concrete = constants.%JJ.9c9] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.893 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.893 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] @@ -301,6 +309,7 @@ fn G() { // CHECK:STDOUT: generic fn @II.1(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.826)] // CHECK:STDOUT: %Self.as_type.loc15_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc15_15.1 (constants.%Self.as_type.b70)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc15_15.1 [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @II.1.%Self.as_type.loc15_15.1 (%Self.as_type.b70)); // CHECK:STDOUT: } @@ -308,6 +317,7 @@ fn G() { // CHECK:STDOUT: generic fn @JJ.1(@J.%Self: %J.type) { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.ccd)] // CHECK:STDOUT: %Self.as_type.loc18_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.3df)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_15.1 [symbolic = %pattern_type (constants.%pattern_type.4ca)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @JJ.1.%Self.as_type.loc18_15.1 (%Self.as_type.3df)); // CHECK:STDOUT: } @@ -315,12 +325,14 @@ fn G() { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.19f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -329,8 +341,9 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc21_6.1: %facet_type) { // CHECK:STDOUT: %T.loc21_6.2: %facet_type = bind_symbolic_name T, 0 [symbolic = %T.loc21_6.2 (constants.%T.527)] -// CHECK:STDOUT: %T.patt.loc21_6.2: %facet_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_6.2 (constants.%T.patt.6c2)] +// CHECK:STDOUT: %T.patt.loc21_6.2: %pattern_type.f8f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_6.2 (constants.%T.patt.401)] // CHECK:STDOUT: %T.as_type.loc21_20.2: type = facet_access_type %T.loc21_6.2 [symbolic = %T.as_type.loc21_20.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc21_20.2 [symbolic = %pattern_type (constants.%pattern_type.a4f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc21_20.2 [symbolic = %require_complete (constants.%require_complete.df2)] @@ -447,21 +460,24 @@ fn G() { // CHECK:STDOUT: specific @II.1(constants.%Self.826) { // CHECK:STDOUT: %Self => constants.%Self.826 // CHECK:STDOUT: %Self.as_type.loc15_15.1 => constants.%Self.as_type.b70 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @JJ.1(constants.%Self.ccd) { // CHECK:STDOUT: %Self => constants.%Self.ccd // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%Self.as_type.3df +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4ca // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.19f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %T.patt => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt => constants.%T.patt.250 // CHECK:STDOUT: %BitAnd.impl_witness => constants.%BitAnd.impl_witness.b7b // CHECK:STDOUT: } // CHECK:STDOUT: @@ -469,11 +485,12 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(type) { // CHECK:STDOUT: %T => type -// CHECK:STDOUT: %T.patt => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt => constants.%T.patt.250 // CHECK:STDOUT: %BitAnd.impl_witness => constants.%BitAnd.impl_witness.0e5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -484,19 +501,22 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.527) { // CHECK:STDOUT: %T.loc21_6.2 => constants.%T.527 -// CHECK:STDOUT: %T.patt.loc21_6.2 => constants.%T.patt.6c2 +// CHECK:STDOUT: %T.patt.loc21_6.2 => constants.%T.patt.401 // CHECK:STDOUT: %T.as_type.loc21_20.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a4f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @JJ.1(constants.%J.facet.fa4) { // CHECK:STDOUT: %Self => constants.%J.facet.fa4 // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a4f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @JJ.1(@F.%J.facet.loc25_33.2) {} @@ -504,17 +524,20 @@ fn G() { // CHECK:STDOUT: specific @II.1(constants.%I.facet.98f) { // CHECK:STDOUT: %Self => constants.%I.facet.98f // CHECK:STDOUT: %Self.as_type.loc15_15.1 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.893 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @JJ.1(constants.%J.facet.5df) { // CHECK:STDOUT: %Self => constants.%J.facet.5df // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.893 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%facet_value) { // CHECK:STDOUT: %T.loc21_6.2 => constants.%facet_value -// CHECK:STDOUT: %T.patt.loc21_6.2 => constants.%T.patt.6c2 +// CHECK:STDOUT: %T.patt.loc21_6.2 => constants.%T.patt.401 // CHECK:STDOUT: %T.as_type.loc21_20.2 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.893 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.357 @@ -531,12 +554,15 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -546,6 +572,7 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -553,13 +580,15 @@ fn G() { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Self.e44: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.560: type = facet_access_type %Self.e44 [symbolic] +// CHECK:STDOUT: %pattern_type.a80: type = pattern_type %Self.as_type.560 [symbolic] // CHECK:STDOUT: %Op.type.613: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d98: %Op.type.613 = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.assoc_type: type = assoc_entity_type @BitAnd [concrete] // CHECK:STDOUT: %assoc0.220: %BitAnd.assoc_type = assoc_entity element0, @BitAnd.%Op.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Op.type.28d: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.902: %Op.type.28d = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -573,18 +602,18 @@ fn G() { // CHECK:STDOUT: .BitAnd = %BitAnd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc9_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc9_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc13_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc13_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %BitAnd.decl: type = interface_decl @BitAnd [concrete = constants.%BitAnd.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc21_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc21_14.1 [symbolic = %T.loc21_14.2 (constants.%T)] // CHECK:STDOUT: %BitAnd.ref: type = name_ref BitAnd, file.%BitAnd.decl [concrete = constants.%BitAnd.type] @@ -596,7 +625,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc9_14.1: type) { // CHECK:STDOUT: %Dest.loc9_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc9_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc9_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -609,10 +638,10 @@ fn G() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc9_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -638,7 +667,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc13_22.1: type) { // CHECK:STDOUT: %Dest.loc13_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc13_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc13_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -651,10 +680,10 @@ fn G() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc13_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -681,12 +710,12 @@ fn G() { // CHECK:STDOUT: interface @BitAnd { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.e44] // CHECK:STDOUT: %Op.decl: %Op.type.613 = fn_decl @Op.1 [concrete = constants.%Op.d98] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.a80) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18_37: %BitAnd.type = name_ref Self, @BitAnd.%Self [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_37: type = facet_access_type %Self.ref.loc18_37 [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] @@ -718,7 +747,7 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc21_14.1: type) { // CHECK:STDOUT: %T.loc21_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T.loc21_14.2) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -728,12 +757,12 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %BitAnd.ref { // CHECK:STDOUT: %Op.decl: @impl.%Op.type (%Op.type.28d) = fn_decl @Op.2 [symbolic = @impl.%Op (constants.%Op.902)] { -// CHECK:STDOUT: %self.patt: @Op.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.2.%T (%T) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.2.%T (%T) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.2.%T (%T) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.2.%T (%T) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc22_37: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Op.2.%T (%T) = value_param call_param0 @@ -757,6 +786,8 @@ fn G() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc10_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc10_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc10_14: type = pattern_type %Self.as_type.loc10_20.1 [symbolic = %pattern_type.loc10_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc10_28: type = pattern_type %Dest [symbolic = %pattern_type.loc10_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -766,6 +797,8 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -773,12 +806,14 @@ fn G() { // CHECK:STDOUT: generic fn @Op.1(@BitAnd.%Self: %BitAnd.type) { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_15.1 [symbolic = %pattern_type (constants.%pattern_type.a80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560), %other.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560)) -> @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(@impl.%T.loc21_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -795,6 +830,8 @@ fn G() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc10_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc10_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc10_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -811,6 +848,8 @@ fn G() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} @@ -820,6 +859,7 @@ fn G() { // CHECK:STDOUT: specific @Op.1(constants.%Self.e44) { // CHECK:STDOUT: %Self => constants.%Self.e44 // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%Self.as_type.560 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -832,10 +872,12 @@ fn G() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%BitAnd.facet) { // CHECK:STDOUT: %Self => constants.%BitAnd.facet // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/min_prelude/impl_forall.carbon b/toolchain/check/testdata/impl/lookup/min_prelude/impl_forall.carbon index ffc453ad7796..174eee71b9d0 100644 --- a/toolchain/check/testdata/impl/lookup/min_prelude/impl_forall.carbon +++ b/toolchain/check/testdata/impl/lookup/min_prelude/impl_forall.carbon @@ -40,7 +40,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A.13025a.1: type = class_type @A, @A(%T) [symbolic] @@ -49,18 +50,20 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %struct_type.n.848971.1: type = struct_type {.n: %T} [symbolic] // CHECK:STDOUT: %complete_type.84bb3d.1: = complete_type_witness %struct_type.n.848971.1 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.325e65.1: type = facet_type <@I, @I(%U)> [symbolic] // CHECK:STDOUT: %Self.209206.1: %I.type.325e65.1 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.209206.1 [symbolic] +// CHECK:STDOUT: %pattern_type.4be: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %U [symbolic] // CHECK:STDOUT: %F.type.2aef59.1: type = fn_type @F.1, @I(%U) [symbolic] // CHECK:STDOUT: %F.bb2dd4.1: %F.type.2aef59.1 = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type.1e5078.1: type = assoc_entity_type @I, @I(%U) [symbolic] // CHECK:STDOUT: %assoc0.8f0422.1: %I.assoc_type.1e5078.1 = assoc_entity element0, @I.%F.decl [symbolic] // CHECK:STDOUT: %V: type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %A.13025a.2: type = class_type @A, @A(%V) [symbolic] // CHECK:STDOUT: %I.type.325e65.2: type = facet_type <@I, @I(%V)> [symbolic] // CHECK:STDOUT: %Self.209206.2: %I.type.325e65.2 = bind_symbolic_name Self, 1 [symbolic] @@ -70,6 +73,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %assoc0.8f0422.2: %I.assoc_type.1e5078.2 = assoc_entity element0, @I.%F.decl [symbolic] // CHECK:STDOUT: %require_complete.cfebb2.1: = require_complete_type %I.type.325e65.2 [symbolic] // CHECK:STDOUT: %I.impl_witness.40ab31.1: = impl_witness file.%I.impl_witness_table, @impl(%V) [symbolic] +// CHECK:STDOUT: %pattern_type.68d8d3.1: type = pattern_type %A.13025a.2 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %V [symbolic] // CHECK:STDOUT: %F.type.0fea45.1: type = fn_type @F.2, @impl(%V) [symbolic] // CHECK:STDOUT: %F.d6ae34.1: %F.type.0fea45.1 = struct_value () [symbolic] // CHECK:STDOUT: %I.facet.de3: %I.type.325e65.2 = facet_value %A.13025a.2, (%I.impl_witness.40ab31.1) [symbolic] @@ -79,8 +84,10 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %complete_type.84bb3d.2: = complete_type_witness %struct_type.n.848971.2 [symbolic] // CHECK:STDOUT: %require_complete.5b8aee.1: = require_complete_type %A.13025a.2 [symbolic] // CHECK:STDOUT: %W: type = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: type = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %A.13025a.3: type = class_type @A, @A(%W) [symbolic] +// CHECK:STDOUT: %pattern_type.68d8d3.2: type = pattern_type %A.13025a.3 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.3: type = pattern_type %W [symbolic] // CHECK:STDOUT: %TestGeneric.type: type = fn_type @TestGeneric [concrete] // CHECK:STDOUT: %TestGeneric: %TestGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4aeca8.3: = require_complete_type %W [symbolic] @@ -105,6 +112,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @F.1(%W, %I.facet.6d2) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %A.235: type = class_type @A, @A(%empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.496: type = pattern_type %A.235 [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %TestSpecific.type: type = fn_type @TestSpecific [concrete] // CHECK:STDOUT: %TestSpecific: %TestSpecific.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] @@ -143,17 +152,17 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = class_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt.loc3_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc3_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc3_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %U.patt.loc7_13.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_13.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_13.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_13.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc7_13.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc7_13.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %V.patt.loc11_14.1: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc11_14.1: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: %A.type = name_ref A, file.%A.decl [concrete = constants.%A.generic] // CHECK:STDOUT: %V.ref.loc11_26: type = name_ref V, %V.loc11_14.1 [symbolic = %V.loc11_14.2 (constants.%V)] @@ -166,11 +175,11 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (@impl.%F.decl), @impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table, @impl(constants.%V) [symbolic = @impl.%I.impl_witness (constants.%I.impl_witness.40ab31.1)] // CHECK:STDOUT: %TestGeneric.decl: %TestGeneric.type = fn_decl @TestGeneric [concrete = constants.%TestGeneric] { -// CHECK:STDOUT: %W.patt.loc17_16.1: type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc17_16.2 (constants.%W.patt)] -// CHECK:STDOUT: %a.patt: @TestGeneric.%A.loc17_32.2 (%A.13025a.3) = binding_pattern a -// CHECK:STDOUT: %a.param_patt: @TestGeneric.%A.loc17_32.2 (%A.13025a.3) = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: @TestGeneric.%W.loc17_16.2 (%W) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @TestGeneric.%W.loc17_16.2 (%W) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %W.patt.loc17_16.1: %pattern_type.98f = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc17_16.2 (constants.%W.patt)] +// CHECK:STDOUT: %a.patt: @TestGeneric.%pattern_type.loc17_26 (%pattern_type.68d8d3.2) = binding_pattern a +// CHECK:STDOUT: %a.param_patt: @TestGeneric.%pattern_type.loc17_26 (%pattern_type.68d8d3.2) = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: @TestGeneric.%pattern_type.loc17_35 (%pattern_type.7dcd0a.3) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @TestGeneric.%pattern_type.loc17_35 (%pattern_type.7dcd0a.3) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %W.ref.loc17_38: type = name_ref W, %W.loc17_16.1 [symbolic = %W.loc17_16.2 (constants.%W)] // CHECK:STDOUT: %W.loc17_16.1: type = bind_symbolic_name W, 0 [symbolic = %W.loc17_16.2 (constants.%W)] @@ -185,10 +194,10 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %return: ref @TestGeneric.%W.loc17_16.2 (%W) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestSpecific.decl: %TestSpecific.type = fn_decl @TestSpecific [concrete = constants.%TestSpecific] { -// CHECK:STDOUT: %a.patt: %A.235 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A.235 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.496 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.496 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc21_31.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc21_31.2: type = converted %.loc21_31.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -207,7 +216,7 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%U.loc7_13.1: type) { // CHECK:STDOUT: %U.loc7_13.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc7_13.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc7_13.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_13.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_13.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_13.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%U.loc7_13.2)> [symbolic = %I.type (constants.%I.type.325e65.1)] @@ -220,10 +229,10 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.325e65.1) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.209206.1)] // CHECK:STDOUT: %F.decl: @I.%F.type (%F.type.2aef59.1) = fn_decl @F.1 [symbolic = @I.%F (constants.%F.bb2dd4.1)] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc8_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc8_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%U (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%U (%U) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type.loc8_8 (%pattern_type.4be) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type.loc8_8 (%pattern_type.4be) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type.loc8_22 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type.loc8_22 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, @I.%U.loc7_13.1 [symbolic = %U (constants.%U)] // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc8_14.1 (%Self.as_type) = value_param call_param0 @@ -249,7 +258,7 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%V.loc11_14.1: type) { // CHECK:STDOUT: %V.loc11_14.2: type = bind_symbolic_name V, 0 [symbolic = %V.loc11_14.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc11_14.2: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc11_14.2: %pattern_type.98f = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] // CHECK:STDOUT: %A.loc11_27.2: type = class_type @A, @A(%V.loc11_14.2) [symbolic = %A.loc11_27.2 (constants.%A.13025a.2)] // CHECK:STDOUT: %I.type.loc11_35.2: type = facet_type <@I, @I(%V.loc11_14.2)> [symbolic = %I.type.loc11_35.2 (constants.%I.type.325e65.2)] // CHECK:STDOUT: %require_complete: = require_complete_type %I.type.loc11_35.2 [symbolic = %require_complete (constants.%require_complete.cfebb2.1)] @@ -261,10 +270,10 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: // CHECK:STDOUT: impl: %A.loc11_27.1 as %I.type.loc11_35.1 { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.0fea45.1) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.d6ae34.1)] { -// CHECK:STDOUT: %self.patt: @F.2.%A (%A.13025a.2) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%A (%A.13025a.2) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.2.%V (%V) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%V (%V) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type.loc12_8 (%pattern_type.68d8d3.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type.loc12_8 (%pattern_type.68d8d3.1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type.loc12_22 (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type.loc12_22 (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %V.ref: type = name_ref V, @impl.%V.loc11_14.1 [symbolic = %V (constants.%V)] // CHECK:STDOUT: %self.param: @F.2.%A (%A.13025a.2) = value_param call_param0 @@ -283,7 +292,7 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: // CHECK:STDOUT: generic class @A(%T.loc3_9.1: type) { // CHECK:STDOUT: %T.loc3_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc3_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc3_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc3_9.2 [symbolic = %require_complete (constants.%require_complete.4aeca8.1)] @@ -311,6 +320,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%U)> [symbolic = %I.type (constants.%I.type.325e65.1)] // CHECK:STDOUT: %Self: @F.1.%I.type (%I.type.325e65.1) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.209206.1)] // CHECK:STDOUT: %Self.as_type.loc8_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc8_8: type = pattern_type %Self.as_type.loc8_14.1 [symbolic = %pattern_type.loc8_8 (constants.%pattern_type.4be)] +// CHECK:STDOUT: %pattern_type.loc8_22: type = pattern_type %U [symbolic = %pattern_type.loc8_22 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc8_14.1 (%Self.as_type)) -> @F.1.%U (%U); // CHECK:STDOUT: } @@ -318,6 +329,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: generic fn @F.2(@impl.%V.loc11_14.1: type) { // CHECK:STDOUT: %V: type = bind_symbolic_name V, 0 [symbolic = %V (constants.%V)] // CHECK:STDOUT: %A: type = class_type @A, @A(%V) [symbolic = %A (constants.%A.13025a.2)] +// CHECK:STDOUT: %pattern_type.loc12_8: type = pattern_type %A [symbolic = %pattern_type.loc12_8 (constants.%pattern_type.68d8d3.1)] +// CHECK:STDOUT: %pattern_type.loc12_22: type = pattern_type %V [symbolic = %pattern_type.loc12_22 (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc12_22: = require_complete_type %V [symbolic = %require_complete.loc12_22 (constants.%require_complete.4aeca8.2)] @@ -336,8 +349,10 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestGeneric(%W.loc17_16.1: type) { // CHECK:STDOUT: %W.loc17_16.2: type = bind_symbolic_name W, 0 [symbolic = %W.loc17_16.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc17_16.2: type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc17_16.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc17_16.2: %pattern_type.98f = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc17_16.2 (constants.%W.patt)] // CHECK:STDOUT: %A.loc17_32.2: type = class_type @A, @A(%W.loc17_16.2) [symbolic = %A.loc17_32.2 (constants.%A.13025a.3)] +// CHECK:STDOUT: %pattern_type.loc17_26: type = pattern_type %A.loc17_32.2 [symbolic = %pattern_type.loc17_26 (constants.%pattern_type.68d8d3.2)] +// CHECK:STDOUT: %pattern_type.loc17_35: type = pattern_type %W.loc17_16.2 [symbolic = %pattern_type.loc17_35 (constants.%pattern_type.7dcd0a.3)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17_35: = require_complete_type %W.loc17_16.2 [symbolic = %require_complete.loc17_35 (constants.%require_complete.4aeca8.3)] @@ -410,6 +425,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %I.type => constants.%I.type.325e65.1 // CHECK:STDOUT: %Self => constants.%Self.209206.1 // CHECK:STDOUT: %Self.as_type.loc8_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc8_8 => constants.%pattern_type.4be +// CHECK:STDOUT: %pattern_type.loc8_22 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(@F.1.%U) {} @@ -463,6 +480,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: specific @F.2(constants.%V) { // CHECK:STDOUT: %V => constants.%V // CHECK:STDOUT: %A => constants.%A.13025a.2 +// CHECK:STDOUT: %pattern_type.loc12_8 => constants.%pattern_type.68d8d3.1 +// CHECK:STDOUT: %pattern_type.loc12_22 => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(@F.2.%V) {} @@ -472,6 +491,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %I.type => constants.%I.type.325e65.2 // CHECK:STDOUT: %Self => constants.%I.facet.de3 // CHECK:STDOUT: %Self.as_type.loc8_14.1 => constants.%A.13025a.2 +// CHECK:STDOUT: %pattern_type.loc8_8 => constants.%pattern_type.68d8d3.1 +// CHECK:STDOUT: %pattern_type.loc8_22 => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%W) { @@ -490,6 +511,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %W.loc17_16.2 => constants.%W // CHECK:STDOUT: %W.patt.loc17_16.2 => constants.%W.patt // CHECK:STDOUT: %A.loc17_32.2 => constants.%A.13025a.3 +// CHECK:STDOUT: %pattern_type.loc17_26 => constants.%pattern_type.68d8d3.2 +// CHECK:STDOUT: %pattern_type.loc17_35 => constants.%pattern_type.7dcd0a.3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(@TestGeneric.%W.loc17_16.2) {} @@ -525,6 +548,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %I.type => constants.%I.type.325e65.3 // CHECK:STDOUT: %Self => constants.%I.facet.6d2 // CHECK:STDOUT: %Self.as_type.loc8_14.1 => constants.%A.13025a.3 +// CHECK:STDOUT: %pattern_type.loc8_8 => constants.%pattern_type.68d8d3.2 +// CHECK:STDOUT: %pattern_type.loc8_22 => constants.%pattern_type.7dcd0a.3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(@TestGeneric.%W.loc17_16.2) {} @@ -572,6 +597,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: specific @F.2(constants.%empty_struct_type) { // CHECK:STDOUT: %V => constants.%empty_struct_type // CHECK:STDOUT: %A => constants.%A.235 +// CHECK:STDOUT: %pattern_type.loc12_8 => constants.%pattern_type.496 +// CHECK:STDOUT: %pattern_type.loc12_22 => constants.%pattern_type.a96 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc12_22 => constants.%complete_type.357 diff --git a/toolchain/check/testdata/impl/lookup/min_prelude/import.carbon b/toolchain/check/testdata/impl/lookup/min_prelude/import.carbon index 484f690df068..6c11e5f254c0 100644 --- a/toolchain/check/testdata/impl/lookup/min_prelude/import.carbon +++ b/toolchain/check/testdata/impl/lookup/min_prelude/import.carbon @@ -228,6 +228,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.28f: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.b7b: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.f50: %F.type.b7b = struct_value () [concrete] // CHECK:STDOUT: %HasF.assoc_type: type = assoc_entity_type @HasF [concrete] @@ -236,6 +237,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type.a02: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.dc7: %F.type.a02 = struct_value () [concrete] // CHECK:STDOUT: %HasF.facet: %HasF.type = facet_value %C, (%HasF.impl_witness) [concrete] @@ -267,8 +269,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: interface @HasF { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type.b7b = fn_decl @F.1 [concrete = constants.%F.f50] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.28f) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.28f) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -288,8 +290,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %C.ref as %HasF.ref { // CHECK:STDOUT: %F.decl: %F.type.a02 = fn_decl @F.2 [concrete = constants.%F.dc7] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%C.ref [concrete = constants.%C] @@ -313,6 +315,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @F.1(@HasF.%Self: %HasF.type) { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.28f)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -325,11 +328,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.28f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%HasF.facet) { // CHECK:STDOUT: %Self => constants.%HasF.facet // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- package_b.carbon @@ -338,6 +343,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasG.type: type = facet_type <@HasG> [concrete] // CHECK:STDOUT: %Self.d42: %HasG.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.133: type = facet_access_type %Self.d42 [symbolic] +// CHECK:STDOUT: %pattern_type.293: type = pattern_type %Self.as_type.133 [symbolic] // CHECK:STDOUT: %G.type.d27: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %G.688: %G.type.d27 = struct_value () [concrete] // CHECK:STDOUT: %HasG.assoc_type: type = assoc_entity_type @HasG [concrete] @@ -347,6 +353,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %HasG.impl_witness.69b: = impl_witness file.%HasG.impl_witness_table.loc13 [concrete] +// CHECK:STDOUT: %pattern_type.8e5: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type.05c: type = fn_type @G.2 [concrete] // CHECK:STDOUT: %G.486: %G.type.05c = struct_value () [concrete] // CHECK:STDOUT: %HasG.facet.704: %HasG.type = facet_value %C, (%HasG.impl_witness.69b) [concrete] @@ -355,7 +362,9 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %F.type.dbc: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.a2b: %F.type.dbc = struct_value () [concrete] // CHECK:STDOUT: %Self.as_type.7cf: type = facet_access_type %Self.cf3 [symbolic] +// CHECK:STDOUT: %pattern_type.dc3: type = pattern_type %Self.as_type.7cf [symbolic] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness file.%HasF.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %F.type.bab: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.46f: %F.type.bab = struct_value () [concrete] // CHECK:STDOUT: %HasF.facet: %HasF.type = facet_value %D, (%HasF.impl_witness) [concrete] @@ -376,7 +385,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: %PackageA.C: type = import_ref PackageA//default, C, loaded [concrete = constants.%C] // CHECK:STDOUT: %PackageA.import_ref.8f2: = import_ref PackageA//default, loc8_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst40 [no loc], unloaded +// CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst42 [no loc], unloaded // CHECK:STDOUT: %PackageA.HasF: type = import_ref PackageA//default, HasF, loaded [concrete = constants.%HasF.type] // CHECK:STDOUT: %PackageA.import_ref.28c = import_ref PackageA//default, inst19 [no loc], unloaded // CHECK:STDOUT: %PackageA.import_ref.c63 = import_ref PackageA//default, loc5_21, unloaded @@ -420,8 +429,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: interface @HasG { // CHECK:STDOUT: %Self: %HasG.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.d42] // CHECK:STDOUT: %G.decl: %G.type.d27 = fn_decl @G.1 [concrete = constants.%G.688] { -// CHECK:STDOUT: %self.patt: @G.1.%Self.as_type.loc7_14.1 (%Self.as_type.133) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.1.%Self.as_type.loc7_14.1 (%Self.as_type.133) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @G.1.%pattern_type (%pattern_type.293) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.1.%pattern_type (%pattern_type.293) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @G.1.%Self.as_type.loc7_14.1 (%Self.as_type.133) = value_param call_param0 // CHECK:STDOUT: %.loc7_14.1: type = splice_block %.loc7_14.2 [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type.133)] { @@ -448,8 +457,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.e95: %C.ref as %HasG.ref { // CHECK:STDOUT: %G.decl: %G.type.05c = fn_decl @G.2 [concrete = constants.%G.486] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.8e5 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.8e5 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.e95.%C.ref [concrete = constants.%C] @@ -463,8 +472,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.8af: %D.ref as %HasF.ref { // CHECK:STDOUT: %F.decl: %F.type.bab = fn_decl @F.2 [concrete = constants.%F.46f] { -// CHECK:STDOUT: %self.patt: %D = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %D = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.510 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.510 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %D = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.8af.%D.ref [concrete = constants.%D] @@ -478,8 +487,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.da9: %D.ref as %HasG.ref { // CHECK:STDOUT: %G.decl: %G.type.c1d = fn_decl @G.3 [concrete = constants.%G.294] { -// CHECK:STDOUT: %self.patt: %D = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %D = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.510 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.510 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %D = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.da9.%D.ref [concrete = constants.%D] @@ -510,6 +519,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @G.1(@HasG.%Self: %HasG.type) { // CHECK:STDOUT: %Self: %HasG.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.d42)] // CHECK:STDOUT: %Self.as_type.loc7_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type.133)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc7_14.1 [symbolic = %pattern_type (constants.%pattern_type.293)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @G.1.%Self.as_type.loc7_14.1 (%Self.as_type.133)); // CHECK:STDOUT: } @@ -522,6 +532,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @F.1(imports.%PackageA.import_ref.e73: %HasF.type) [from "package_a.carbon"] { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.cf3)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.7cf)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.dc3)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -539,26 +550,31 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @G.1(constants.%Self.d42) { // CHECK:STDOUT: %Self => constants.%Self.d42 // CHECK:STDOUT: %Self.as_type.loc7_14.1 => constants.%Self.as_type.133 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.293 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G.1(constants.%HasG.facet.704) { // CHECK:STDOUT: %Self => constants.%HasG.facet.704 // CHECK:STDOUT: %Self.as_type.loc7_14.1 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8e5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%Self.cf3) { // CHECK:STDOUT: %Self => constants.%Self.cf3 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.7cf +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%HasF.facet) { // CHECK:STDOUT: %Self => constants.%HasF.facet // CHECK:STDOUT: %Self.as_type => constants.%D +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G.1(constants.%HasG.facet.9c8) { // CHECK:STDOUT: %Self => constants.%HasG.facet.9c8 // CHECK:STDOUT: %Self.as_type.loc7_14.1 => constants.%D +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_cf.carbon @@ -567,6 +583,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.8e5: type = pattern_type %C [concrete] // CHECK:STDOUT: %TestCF.type: type = fn_type @TestCF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestCF: %TestCF.type = struct_value () [concrete] @@ -576,6 +593,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, imports.%PackageA.import_ref.ab2 [concrete] // CHECK:STDOUT: %F.type.dbc: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.dc3: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (imports.%PackageA.import_ref.148), @impl [concrete] // CHECK:STDOUT: %HasF.impl_witness: = impl_witness %HasF.impl_witness_table [concrete] // CHECK:STDOUT: %HasF.facet: %HasF.type = facet_value %C, (%HasF.impl_witness) [concrete] @@ -595,7 +613,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: %PackageA.C: type = import_ref PackageA//default, C, loaded [concrete = constants.%C] // CHECK:STDOUT: %PackageA.import_ref.8f2: = import_ref PackageA//default, loc8_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst40 [no loc], unloaded +// CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst42 [no loc], unloaded // CHECK:STDOUT: %PackageA.HasF: type = import_ref PackageA//default, HasF, loaded [concrete = constants.%HasF.type] // CHECK:STDOUT: %PackageA.import_ref.28c = import_ref PackageA//default, inst19 [no loc], unloaded // CHECK:STDOUT: %PackageA.import_ref.b36: %HasF.assoc_type = import_ref PackageA//default, loc5_21, loaded [concrete = constants.%assoc0] @@ -615,8 +633,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PackageA.import = import PackageA // CHECK:STDOUT: %TestCF.decl: %TestCF.type = fn_decl @TestCF [concrete = constants.%TestCF] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.8e5 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.8e5 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %C.ref [concrete = constants.%C] { @@ -661,6 +679,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @F.1(imports.%PackageA.import_ref.e73: %HasF.type) [from "package_a.carbon"] { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.dc3)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -670,6 +689,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_df.carbon @@ -678,6 +698,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.f09: type = pattern_type %D [concrete] // CHECK:STDOUT: %TestDF.type: type = fn_type @TestDF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestDF: %TestDF.type = struct_value () [concrete] @@ -687,6 +708,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %assoc0: %HasF.assoc_type = assoc_entity element0, imports.%PackageA.import_ref.ab2 [concrete] // CHECK:STDOUT: %F.type.dbc: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.cf3 [symbolic] +// CHECK:STDOUT: %pattern_type.dc3: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %HasG.type: type = facet_type <@HasG> [concrete] // CHECK:STDOUT: %HasF.impl_witness_table = impl_witness_table (imports.%PackageB.import_ref.0cd), @impl.52b [concrete] @@ -711,7 +733,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: %PackageB.D: type = import_ref PackageB//default, D, loaded [concrete = constants.%D] // CHECK:STDOUT: %PackageB.import_ref.8f2: = import_ref PackageB//default, loc10_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageB.import_ref.cab = import_ref PackageB//default, inst42 [no loc], unloaded +// CHECK:STDOUT: %PackageB.import_ref.cab = import_ref PackageB//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageA.HasF: type = import_ref PackageA//default, HasF, loaded [concrete = constants.%HasF.type] // CHECK:STDOUT: %PackageA.import_ref.28c = import_ref PackageA//default, inst19 [no loc], unloaded // CHECK:STDOUT: %PackageA.import_ref.b36: %HasF.assoc_type = import_ref PackageA//default, loc5_21, loaded [concrete = constants.%assoc0] @@ -719,7 +741,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageA.import_ref.e73: %HasF.type = import_ref PackageA//default, inst19 [no loc], loaded [symbolic = constants.%Self.cf3] // CHECK:STDOUT: %PackageA.import_ref.5cd = import_ref PackageA//default, loc11_16, unloaded // CHECK:STDOUT: %PackageA.import_ref.8f2: = import_ref PackageA//default, loc8_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst40 [no loc], unloaded +// CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst42 [no loc], unloaded // CHECK:STDOUT: %PackageA.import_ref.29a: type = import_ref PackageA//default, loc11_6, loaded [concrete = constants.%C] // CHECK:STDOUT: %PackageA.import_ref.e8c: type = import_ref PackageA//default, loc11_11, loaded [concrete = constants.%HasF.type] // CHECK:STDOUT: %PackageB.import_ref.5d8 = import_ref PackageB//default, inst21 [no loc], unloaded @@ -747,8 +769,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageA.import = import PackageA // CHECK:STDOUT: %PackageB.import = import PackageB // CHECK:STDOUT: %TestDF.decl: %TestDF.type = fn_decl @TestDF [concrete = constants.%TestDF] { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %D = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %d.patt: %pattern_type.f09 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.f09 = value_param_pattern %d.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %D = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %D.ref [concrete = constants.%D] { @@ -822,6 +844,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @F.1(imports.%PackageA.import_ref.e73: %HasF.type) [from "package_a.carbon"] { // CHECK:STDOUT: %Self: %HasF.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.cf3)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.dc3)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -831,6 +854,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @F.1(constants.%Self.cf3) { // CHECK:STDOUT: %Self => constants.%Self.cf3 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_cg.carbon @@ -839,6 +863,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.8e5: type = pattern_type %C [concrete] // CHECK:STDOUT: %TestCG.type: type = fn_type @TestCG [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestCG: %TestCG.type = struct_value () [concrete] @@ -848,6 +873,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %assoc0: %HasG.assoc_type = assoc_entity element0, imports.%PackageB.import_ref.70a [concrete] // CHECK:STDOUT: %G.type.d9e: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.fcb [symbolic] +// CHECK:STDOUT: %pattern_type.76a: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %HasG.impl_witness_table = impl_witness_table (imports.%PackageB.import_ref.9ec), @impl.922 [concrete] @@ -872,7 +898,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: %PackageA.C: type = import_ref PackageA//default, C, loaded [concrete = constants.%C] // CHECK:STDOUT: %PackageA.import_ref.8f2: = import_ref PackageA//default, loc8_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst40 [no loc], unloaded +// CHECK:STDOUT: %PackageA.import_ref.2c4 = import_ref PackageA//default, inst42 [no loc], unloaded // CHECK:STDOUT: %PackageB.HasG: type = import_ref PackageB//default, HasG, loaded [concrete = constants.%HasG.type] // CHECK:STDOUT: %PackageB.import_ref.5d8 = import_ref PackageB//default, inst21 [no loc], unloaded // CHECK:STDOUT: %PackageB.import_ref.6c2: %HasG.assoc_type = import_ref PackageB//default, loc7_21, loaded [concrete = constants.%assoc0] @@ -889,7 +915,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageB.import_ref.cee586.1: type = import_ref PackageB//default, loc13_20, loaded [concrete = constants.%HasG.type] // CHECK:STDOUT: %PackageB.import_ref.5ba = import_ref PackageB//default, loc18_25, unloaded // CHECK:STDOUT: %PackageB.import_ref.8f2: = import_ref PackageB//default, loc10_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageB.import_ref.cab = import_ref PackageB//default, inst42 [no loc], unloaded +// CHECK:STDOUT: %PackageB.import_ref.cab = import_ref PackageB//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageB.import_ref.aa9f8a.1: type = import_ref PackageB//default, loc18_6, loaded [concrete = constants.%D] // CHECK:STDOUT: %PackageB.import_ref.831: type = import_ref PackageB//default, loc18_19, loaded [concrete = constants.%HasF.type] // CHECK:STDOUT: %PackageB.import_ref.569 = import_ref PackageB//default, loc23_16, unloaded @@ -908,8 +934,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageA.import = import PackageA // CHECK:STDOUT: %PackageB.import = import PackageB // CHECK:STDOUT: %TestCG.decl: %TestCG.type = fn_decl @TestCG [concrete = constants.%TestCG] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.8e5 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.8e5 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %C.ref [concrete = constants.%C] { @@ -983,6 +1009,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @G.1(imports.%PackageB.import_ref.ef5: %HasG.type) [from "package_b.carbon"] { // CHECK:STDOUT: %Self: %HasG.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.fcb)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.76a)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -992,6 +1019,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @G.1(constants.%Self.fcb) { // CHECK:STDOUT: %Self => constants.%Self.fcb // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.76a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_dg.carbon @@ -1000,6 +1028,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.f09: type = pattern_type %D [concrete] // CHECK:STDOUT: %TestDG.type: type = fn_type @TestDG [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %TestDG: %TestDG.type = struct_value () [concrete] @@ -1009,6 +1038,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %assoc0: %HasG.assoc_type = assoc_entity element0, imports.%PackageB.import_ref.70a [concrete] // CHECK:STDOUT: %G.type.d9e: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.fcb [symbolic] +// CHECK:STDOUT: %pattern_type.76a: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %HasF.type: type = facet_type <@HasF> [concrete] // CHECK:STDOUT: %HasG.impl_witness_table = impl_witness_table (imports.%PackageB.import_ref.b0a), @impl.47e [concrete] @@ -1030,19 +1060,19 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: %PackageB.D: type = import_ref PackageB//default, D, loaded [concrete = constants.%D] // CHECK:STDOUT: %PackageB.import_ref.8f2: = import_ref PackageB//default, loc10_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageB.import_ref.cab = import_ref PackageB//default, inst42 [no loc], unloaded +// CHECK:STDOUT: %PackageB.import_ref.cab = import_ref PackageB//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageB.HasG: type = import_ref PackageB//default, HasG, loaded [concrete = constants.%HasG.type] // CHECK:STDOUT: %PackageB.import_ref.5d8 = import_ref PackageB//default, inst21 [no loc], unloaded // CHECK:STDOUT: %PackageB.import_ref.6c2: %HasG.assoc_type = import_ref PackageB//default, loc7_21, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %PackageB.G = import_ref PackageB//default, G, unloaded // CHECK:STDOUT: %PackageB.import_ref.ef5: %HasG.type = import_ref PackageB//default, inst21 [no loc], loaded [symbolic = constants.%Self.fcb] // CHECK:STDOUT: %PackageB.import_ref.ea7 = import_ref PackageB//default, loc13_25, unloaded -// CHECK:STDOUT: %PackageB.import_ref.8db: = import_ref PackageB//default, inst51 [indirect], loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageB.import_ref.6a9 = import_ref PackageB//default, inst52 [indirect], unloaded +// CHECK:STDOUT: %PackageB.import_ref.8db: = import_ref PackageB//default, inst53 [indirect], loaded [concrete = constants.%complete_type] +// CHECK:STDOUT: %PackageB.import_ref.6a9 = import_ref PackageB//default, inst54 [indirect], unloaded // CHECK:STDOUT: %PackageB.import_ref.dfb: type = import_ref PackageB//default, loc13_14, loaded [concrete = constants.%C] // CHECK:STDOUT: %PackageB.import_ref.cee586.1: type = import_ref PackageB//default, loc13_20, loaded [concrete = constants.%HasG.type] -// CHECK:STDOUT: %PackageB.import_ref.96f = import_ref PackageB//default, inst76 [indirect], unloaded -// CHECK:STDOUT: %PackageB.import_ref.a0b = import_ref PackageB//default, inst77 [indirect], unloaded +// CHECK:STDOUT: %PackageB.import_ref.96f = import_ref PackageB//default, inst79 [indirect], unloaded +// CHECK:STDOUT: %PackageB.import_ref.a0b = import_ref PackageB//default, inst80 [indirect], unloaded // CHECK:STDOUT: %PackageB.F = import_ref PackageB//default, F, unloaded // CHECK:STDOUT: %PackageB.import_ref.5ba = import_ref PackageB//default, loc18_25, unloaded // CHECK:STDOUT: %PackageB.import_ref.aa9f8a.1: type = import_ref PackageB//default, loc18_6, loaded [concrete = constants.%D] @@ -1061,8 +1091,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PackageB.import = import PackageB // CHECK:STDOUT: %TestDG.decl: %TestDG.type = fn_decl @TestDG [concrete = constants.%TestDG] { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %D = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %d.patt: %pattern_type.f09 = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type.f09 = value_param_pattern %d.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %D = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %D.ref [concrete = constants.%D] { @@ -1131,6 +1161,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @G.1(imports.%PackageB.import_ref.ef5: %HasG.type) [from "package_b.carbon"] { // CHECK:STDOUT: %Self: %HasG.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.fcb)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.76a)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1140,6 +1171,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @G.1(constants.%Self.fcb) { // CHECK:STDOUT: %Self => constants.%Self.fcb // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.76a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- associated_interface.carbon @@ -1148,12 +1180,14 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete] // CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.a40: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %H.type.474: type = fn_type @H.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %H.c1d: %H.type.474 = struct_value () [concrete] // CHECK:STDOUT: %Z.assoc_type: type = assoc_entity_type @Z [concrete] // CHECK:STDOUT: %assoc0: %Z.assoc_type = assoc_entity element0, @Z.%H.decl [concrete] // CHECK:STDOUT: %Z.impl_witness: = impl_witness file.%Z.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %H.type.707: type = fn_type @H.2 [concrete] // CHECK:STDOUT: %H.8d7: %H.type.707 = struct_value () [concrete] // CHECK:STDOUT: %Z.facet: %Z.type = facet_value %empty_tuple.type, (%Z.impl_witness) [concrete] @@ -1184,8 +1218,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: interface @Z { // CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %H.decl: %H.type.474 = fn_decl @H.1 [concrete = constants.%H.c1d] { -// CHECK:STDOUT: %self.patt: @H.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @H.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @H.1.%pattern_type (%pattern_type.a40) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @H.1.%pattern_type (%pattern_type.a40) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @H.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -1205,8 +1239,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %.loc8_7.2 as %Z.ref { // CHECK:STDOUT: %H.decl: %H.type.707 = fn_decl @H.2 [concrete = constants.%H.8d7] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%.loc8_7.2 [concrete = constants.%empty_tuple.type] @@ -1221,6 +1255,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @H.1(@Z.%Self: %Z.type) { // CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.a40)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @H.1.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -1233,11 +1268,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @H.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a40 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @H.1(constants.%Z.facet) { // CHECK:STDOUT: %Self => constants.%Z.facet // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_associated_interface.carbon @@ -1252,6 +1289,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %assoc0: %Z.assoc_type = assoc_entity element0, imports.%PackageAssociatedInterface.import_ref.250 [concrete] // CHECK:STDOUT: %H.type.386: type = fn_type @H.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.75f: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Z.impl_witness_table = impl_witness_table (imports.%PackageAssociatedInterface.import_ref.6d7), @impl [concrete] // CHECK:STDOUT: %Z.impl_witness: = impl_witness %Z.impl_witness_table [concrete] // CHECK:STDOUT: %Z.facet: %Z.type = facet_value %empty_tuple.type, (%Z.impl_witness) [concrete] @@ -1319,6 +1357,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @H.1(imports.%PackageAssociatedInterface.import_ref.d26: %Z.type) [from "associated_interface.carbon"] { // CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.75f)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1328,15 +1367,18 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @H.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.75f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- has_param.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %X.patt: %T = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt: %pattern_type.7dc = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.type: type = generic_class_type @AnyParam [concrete] // CHECK:STDOUT: %AnyParam.generic: %AnyParam.type = struct_value () [concrete] // CHECK:STDOUT: %AnyParam: type = class_type @AnyParam, @AnyParam(%T, %X) [symbolic] @@ -1345,6 +1387,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.f04: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %K.type: type = fn_type @K [concrete] // CHECK:STDOUT: %K: %K.type = struct_value () [concrete] // CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete] @@ -1366,8 +1409,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %AnyParam.decl: %AnyParam.type = class_decl @AnyParam [concrete = constants.%AnyParam.generic] { -// CHECK:STDOUT: %T.patt.loc4_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] -// CHECK:STDOUT: %X.patt.loc4_26.1: @AnyParam.%T.loc4_16.2 (%T) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc4_26.2 (constants.%X.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %X.patt.loc4_26.1: @AnyParam.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc4_26.2 (constants.%X.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_16.1 [symbolic = %T.loc4_16.2 (constants.%T)] @@ -1379,8 +1422,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: interface @Y { // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %K.decl: %K.type = fn_decl @K [concrete = constants.%K] { -// CHECK:STDOUT: %self.patt: @K.%Self.as_type.loc7_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @K.%Self.as_type.loc7_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @K.%pattern_type (%pattern_type.f04) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @K.%pattern_type (%pattern_type.f04) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @K.%Self.as_type.loc7_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc7_14.1: type = splice_block %.loc7_14.2 [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type)] { @@ -1400,9 +1443,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(%T.loc4_16.1: type, %X.loc4_26.1: @AnyParam.%T.loc4_16.2 (%T)) { // CHECK:STDOUT: %T.loc4_16.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_16.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_16.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_16.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt)] // CHECK:STDOUT: %X.loc4_26.2: @AnyParam.%T.loc4_16.2 (%T) = bind_symbolic_name X, 1 [symbolic = %X.loc4_26.2 (constants.%X)] -// CHECK:STDOUT: %X.patt.loc4_26.2: @AnyParam.%T.loc4_16.2 (%T) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc4_26.2 (constants.%X.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_16.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %X.patt.loc4_26.2: @AnyParam.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern X, 1 [symbolic = %X.patt.loc4_26.2 (constants.%X.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1419,6 +1463,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @K(@Y.%Self: %Y.type) { // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc7_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc7_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc7_14.1 [symbolic = %pattern_type (constants.%pattern_type.f04)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc7_14.1 [symbolic = %require_complete (constants.%require_complete)] @@ -1433,19 +1478,22 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T.loc4_16.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_16.2 => constants.%T.patt // CHECK:STDOUT: %X.loc4_26.2 => constants.%X +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: %X.patt.loc4_26.2 => constants.%X.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @K(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc7_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f04 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- has_generic_interface.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.c92: type = generic_interface_type @GenericInterface [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %GenericInterface.generic: %GenericInterface.type.c92 = struct_value () [concrete] @@ -1457,17 +1505,21 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %X.patt.51c: %T = symbolic_binding_pattern X, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %X.patt.e4e: %GenericInterface.type.c92 = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.7fd: %pattern_type.7dc = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.438: type = pattern_type %GenericInterface.type.c92 [concrete] +// CHECK:STDOUT: %X.patt.abf: %pattern_type.438 = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.241: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.c92, %GenericInterface.generic) [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self.f64: %Y.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %K.type.311: type = fn_type @K.1 [concrete] // CHECK:STDOUT: %K.7a1: %K.type.311 = struct_value () [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.f64 [symbolic] +// CHECK:STDOUT: %pattern_type.cb4: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic] // CHECK:STDOUT: %Y.impl_witness: = impl_witness file.%Y.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.004: type = pattern_type %AnyParam.241 [concrete] // CHECK:STDOUT: %K.type.dcd: type = fn_type @K.2 [concrete] // CHECK:STDOUT: %K.2e9: %K.type.dcd = struct_value () [concrete] // CHECK:STDOUT: %Y.facet: %Y.type = facet_value %AnyParam.241, (%Y.impl_witness) [concrete] @@ -1492,12 +1544,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageHasParam.import_ref.5ab: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] // CHECK:STDOUT: %PackageHasParam.import_ref.34c: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: %PackageHasParam.import_ref.8f2: = import_ref PackageHasParam//default, loc4_34, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst34 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst37 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.Y: type = import_ref PackageHasParam//default, Y, loaded [concrete = constants.%Y.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.dc1 = import_ref PackageHasParam//default, inst41 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.dc1 = import_ref PackageHasParam//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.f69: %Y.assoc_type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %PackageHasParam.K: %K.type.311 = import_ref PackageHasParam//default, K, loaded [concrete = constants.%K.7a1] -// CHECK:STDOUT: %PackageHasParam.import_ref.292: %Y.type = import_ref PackageHasParam//default, inst41 [no loc], loaded [symbolic = constants.%Self.f64] +// CHECK:STDOUT: %PackageHasParam.import_ref.292: %Y.type = import_ref PackageHasParam//default, inst44 [no loc], loaded [symbolic = constants.%Self.f64] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1510,7 +1562,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PackageHasParam.import = import PackageHasParam // CHECK:STDOUT: %GenericInterface.decl: %GenericInterface.type.c92 = interface_decl @GenericInterface [concrete = constants.%GenericInterface.generic] { -// CHECK:STDOUT: %U.patt.loc6_28.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_28.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc6_28.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_28.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc6_28.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc6_28.2 (constants.%U)] // CHECK:STDOUT: } @@ -1529,7 +1581,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericInterface(%U.loc6_28.1: type) { // CHECK:STDOUT: %U.loc6_28.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc6_28.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc6_28.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_28.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc6_28.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_28.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %GenericInterface.type: type = facet_type <@GenericInterface, @GenericInterface(%U.loc6_28.2)> [symbolic = %GenericInterface.type (constants.%GenericInterface.type.3fe)] @@ -1553,8 +1605,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %AnyParam as %Y.ref { // CHECK:STDOUT: %K.decl: %K.type.dcd = fn_decl @K.2 [concrete = constants.%K.2e9] { -// CHECK:STDOUT: %self.patt: %AnyParam.241 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AnyParam.241 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.004 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.004 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AnyParam.241 = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%AnyParam [concrete = constants.%AnyParam.241] @@ -1568,9 +1620,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab: type, imports.%PackageHasParam.import_ref.34c: @AnyParam.%T (%T)) [from "has_param.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %X: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %X.patt: @AnyParam.%T (%T) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1585,6 +1638,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @K.1(imports.%PackageHasParam.import_ref.292: %Y.type) [from "has_param.carbon"] { // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.f64)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.cb4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic = %require_complete (constants.%require_complete)] @@ -1600,8 +1654,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn @L() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %obj.patt: %AnyParam.241 = binding_pattern obj -// CHECK:STDOUT: %.loc13_3.1: %AnyParam.241 = var_pattern %obj.patt +// CHECK:STDOUT: %obj.patt: %pattern_type.004 = binding_pattern obj +// CHECK:STDOUT: %.loc13_3.1: %pattern_type.004 = var_pattern %obj.patt // CHECK:STDOUT: } // CHECK:STDOUT: %obj.var: ref %AnyParam.241 = var obj // CHECK:STDOUT: %.loc13_58.1: %empty_struct_type = struct_literal () @@ -1637,14 +1691,16 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %X.patt => constants.%X.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc +// CHECK:STDOUT: %X.patt => constants.%X.patt.7fd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%GenericInterface.type.c92, constants.%GenericInterface.generic) { // CHECK:STDOUT: %T => constants.%GenericInterface.type.c92 // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %X => constants.%GenericInterface.generic -// CHECK:STDOUT: %X.patt => constants.%X.patt.e4e +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.438 +// CHECK:STDOUT: %X.patt => constants.%X.patt.abf // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -1652,11 +1708,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @K.1(constants.%Self.f64) { // CHECK:STDOUT: %Self => constants.%Self.f64 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @K.1(constants.%Y.facet) { // CHECK:STDOUT: %Self => constants.%Y.facet // CHECK:STDOUT: %Self.as_type => constants.%AnyParam.241 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.004 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_generic_interface_as_param.carbon @@ -1671,16 +1729,20 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %X.patt.51c: %T = symbolic_binding_pattern X, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.7fd: %pattern_type.7dc = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.0da: type = generic_interface_type @GenericInterface [concrete] // CHECK:STDOUT: %GenericInterface.generic: %GenericInterface.type.0da = struct_value () [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.138: type = facet_type <@GenericInterface, @GenericInterface(%U)> [symbolic] // CHECK:STDOUT: %Self.13b: %GenericInterface.type.138 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] -// CHECK:STDOUT: %X.patt.978: %GenericInterface.type.0da = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.a64: type = pattern_type %GenericInterface.type.0da [concrete] +// CHECK:STDOUT: %X.patt.18f: %pattern_type.a64 = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.861: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.0da, %GenericInterface.generic) [concrete] +// CHECK:STDOUT: %pattern_type.3ad: type = pattern_type %AnyParam.861 [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.861 = struct_value () [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self.f64: %Y.type = bind_symbolic_name Self, 0 [symbolic] @@ -1688,6 +1750,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %assoc0: %Y.assoc_type = assoc_entity element0, imports.%PackageHasParam.import_ref.ce2 [concrete] // CHECK:STDOUT: %K.type.311: type = fn_type @K.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.f64 [symbolic] +// CHECK:STDOUT: %pattern_type.cb4: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic] // CHECK:STDOUT: %Y.impl_witness_table = impl_witness_table (imports.%PackageGenericInterface.import_ref.456), @impl [concrete] // CHECK:STDOUT: %Y.impl_witness: = impl_witness %Y.impl_witness_table [concrete] @@ -1714,15 +1777,15 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageHasParam.import_ref.5ab: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] // CHECK:STDOUT: %PackageHasParam.import_ref.34c: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: %PackageHasParam.import_ref.8f2: = import_ref PackageHasParam//default, loc4_34, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst34 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst37 [no loc], unloaded // CHECK:STDOUT: %PackageGenericInterface.GenericInterface: %GenericInterface.type.0da = import_ref PackageGenericInterface//default, GenericInterface, loaded [concrete = constants.%GenericInterface.generic] // CHECK:STDOUT: %PackageGenericInterface.import_ref.5ab: type = import_ref PackageGenericInterface//default, loc6_28, loaded [symbolic = @GenericInterface.%U (constants.%U)] -// CHECK:STDOUT: %PackageGenericInterface.import_ref.c3b = import_ref PackageGenericInterface//default, inst30 [no loc], unloaded +// CHECK:STDOUT: %PackageGenericInterface.import_ref.c3b = import_ref PackageGenericInterface//default, inst31 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.Y: type = import_ref PackageHasParam//default, Y, loaded [concrete = constants.%Y.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.dc1 = import_ref PackageHasParam//default, inst41 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.dc1 = import_ref PackageHasParam//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.f69: %Y.assoc_type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %PackageHasParam.K = import_ref PackageHasParam//default, K, unloaded -// CHECK:STDOUT: %PackageHasParam.import_ref.292: %Y.type = import_ref PackageHasParam//default, inst41 [no loc], loaded [symbolic = constants.%Self.f64] +// CHECK:STDOUT: %PackageHasParam.import_ref.292: %Y.type = import_ref PackageHasParam//default, inst44 [no loc], loaded [symbolic = constants.%Self.f64] // CHECK:STDOUT: %PackageGenericInterface.import_ref.53c: = import_ref PackageGenericInterface//default, loc8_70, loaded [concrete = constants.%Y.impl_witness] // CHECK:STDOUT: %PackageGenericInterface.import_ref.321: type = import_ref PackageGenericInterface//default, loc8_47, loaded [concrete = constants.%AnyParam.861] // CHECK:STDOUT: %PackageGenericInterface.import_ref.ca6: type = import_ref PackageGenericInterface//default, loc8_67, loaded [concrete = constants.%Y.type] @@ -1743,7 +1806,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericInterface(imports.%PackageGenericInterface.import_ref.5ab: type) [from "has_generic_interface.carbon"] { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %GenericInterface.type: type = facet_type <@GenericInterface, @GenericInterface(%U)> [symbolic = %GenericInterface.type (constants.%GenericInterface.type.138)] @@ -1770,9 +1833,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab: type, imports.%PackageHasParam.import_ref.34c: @AnyParam.%T (%T)) [from "has_param.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %X: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %X.patt: @AnyParam.%T (%T) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1787,8 +1851,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn @M() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %obj.patt: %AnyParam.861 = binding_pattern obj -// CHECK:STDOUT: %.loc8_3.1: %AnyParam.861 = var_pattern %obj.patt +// CHECK:STDOUT: %obj.patt: %pattern_type.3ad = binding_pattern obj +// CHECK:STDOUT: %.loc8_3.1: %pattern_type.3ad = var_pattern %obj.patt // CHECK:STDOUT: } // CHECK:STDOUT: %obj.var: ref %AnyParam.861 = var obj // CHECK:STDOUT: %.loc9_50.1: %empty_struct_type = struct_literal () @@ -1817,6 +1881,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @K.1(imports.%PackageHasParam.import_ref.292: %Y.type) [from "has_param.carbon"] { // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.f64)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.cb4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic = %require_complete (constants.%require_complete)] @@ -1830,7 +1895,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %X.patt => constants.%X.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc +// CHECK:STDOUT: %X.patt => constants.%X.patt.7fd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface(constants.%U) { @@ -1844,7 +1910,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T => constants.%GenericInterface.type.0da // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %X => constants.%GenericInterface.generic -// CHECK:STDOUT: %X.patt => constants.%X.patt.978 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a64 +// CHECK:STDOUT: %X.patt => constants.%X.patt.18f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -1852,13 +1919,15 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @K.1(constants.%Self.f64) { // CHECK:STDOUT: %Self => constants.%Self.f64 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- has_generic_class.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %GenericClass.type: type = generic_class_type @GenericClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %GenericClass.generic: %GenericClass.type = struct_value () [concrete] @@ -1869,17 +1938,21 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %AnyParam.generic: %AnyParam.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %X.patt.51c: %T = symbolic_binding_pattern X, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %X.patt.2a8: %GenericClass.type = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.7fd: %pattern_type.7dc = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.17e: type = pattern_type %GenericClass.type [concrete] +// CHECK:STDOUT: %X.patt.312: %pattern_type.17e = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.0dd: type = class_type @AnyParam, @AnyParam(%GenericClass.type, %GenericClass.generic) [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %K.type.311: type = fn_type @K.1 [concrete] // CHECK:STDOUT: %K.7a1: %K.type.311 = struct_value () [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.cb4: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic] // CHECK:STDOUT: %Y.impl_witness: = impl_witness file.%Y.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.64f: type = pattern_type %AnyParam.0dd [concrete] // CHECK:STDOUT: %K.type.965: type = fn_type @K.2 [concrete] // CHECK:STDOUT: %K.5a9: %K.type.965 = struct_value () [concrete] // CHECK:STDOUT: %Y.facet: %Y.type = facet_value %AnyParam.0dd, (%Y.impl_witness) [concrete] @@ -1904,12 +1977,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageHasParam.import_ref.5ab: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] // CHECK:STDOUT: %PackageHasParam.import_ref.34c: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: %PackageHasParam.import_ref.8f2: = import_ref PackageHasParam//default, loc4_34, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst34 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst37 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.Y: type = import_ref PackageHasParam//default, Y, loaded [concrete = constants.%Y.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.dc1 = import_ref PackageHasParam//default, inst41 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.dc1 = import_ref PackageHasParam//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.f69: %Y.assoc_type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %PackageHasParam.K: %K.type.311 = import_ref PackageHasParam//default, K, loaded [concrete = constants.%K.7a1] -// CHECK:STDOUT: %PackageHasParam.import_ref.292: %Y.type = import_ref PackageHasParam//default, inst41 [no loc], loaded [symbolic = constants.%Self] +// CHECK:STDOUT: %PackageHasParam.import_ref.292: %Y.type = import_ref PackageHasParam//default, inst44 [no loc], loaded [symbolic = constants.%Self] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1922,7 +1995,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PackageHasParam.import = import PackageHasParam // CHECK:STDOUT: %GenericClass.decl: %GenericClass.type = class_decl @GenericClass [concrete = constants.%GenericClass.generic] { -// CHECK:STDOUT: %U.patt.loc6_20.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc6_20.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_20.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc6_20.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc6_20.2 (constants.%U)] // CHECK:STDOUT: } @@ -1948,8 +2021,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %AnyParam as %Y.ref { // CHECK:STDOUT: %K.decl: %K.type.965 = fn_decl @K.2 [concrete = constants.%K.5a9] { -// CHECK:STDOUT: %self.patt: %AnyParam.0dd = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %AnyParam.0dd = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.64f = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.64f = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %AnyParam.0dd = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%AnyParam [concrete = constants.%AnyParam.0dd] @@ -1963,7 +2036,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericClass(%U.loc6_20.1: type) { // CHECK:STDOUT: %U.loc6_20.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc6_20.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc6_20.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc6_20.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_20.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1979,9 +2052,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab: type, imports.%PackageHasParam.import_ref.34c: @AnyParam.%T (%T)) [from "has_param.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %X: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %X.patt: @AnyParam.%T (%T) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1996,6 +2070,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @K.1(imports.%PackageHasParam.import_ref.292: %Y.type) [from "has_param.carbon"] { // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.cb4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic = %require_complete (constants.%require_complete)] @@ -2011,8 +2086,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn @L() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %obj.patt: %AnyParam.0dd = binding_pattern obj -// CHECK:STDOUT: %.loc13_3.1: %AnyParam.0dd = var_pattern %obj.patt +// CHECK:STDOUT: %obj.patt: %pattern_type.64f = binding_pattern obj +// CHECK:STDOUT: %.loc13_3.1: %pattern_type.64f = var_pattern %obj.patt // CHECK:STDOUT: } // CHECK:STDOUT: %obj.var: ref %AnyParam.0dd = var obj // CHECK:STDOUT: %.loc13_54.1: %empty_struct_type = struct_literal () @@ -2046,14 +2121,16 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %X.patt => constants.%X.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc +// CHECK:STDOUT: %X.patt => constants.%X.patt.7fd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%GenericClass.type, constants.%GenericClass.generic) { // CHECK:STDOUT: %T => constants.%GenericClass.type // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %X => constants.%GenericClass.generic -// CHECK:STDOUT: %X.patt => constants.%X.patt.2a8 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.17e +// CHECK:STDOUT: %X.patt => constants.%X.patt.312 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -2061,11 +2138,13 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @K.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @K.1(constants.%Y.facet) { // CHECK:STDOUT: %Self => constants.%Y.facet // CHECK:STDOUT: %Self.as_type => constants.%AnyParam.0dd +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.64f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_generic_class_as_param.carbon @@ -2080,14 +2159,18 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %X.patt.51c: %T = symbolic_binding_pattern X, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %X.patt.7fd: %pattern_type.7dc = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %GenericClass.type: type = generic_class_type @GenericClass [concrete] // CHECK:STDOUT: %GenericClass.generic: %GenericClass.type = struct_value () [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] -// CHECK:STDOUT: %X.patt.7fb: %GenericClass.type = symbolic_binding_pattern X, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.17a: type = pattern_type %GenericClass.type [concrete] +// CHECK:STDOUT: %X.patt.80f: %pattern_type.17a = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.d71: type = class_type @AnyParam, @AnyParam(%GenericClass.type, %GenericClass.generic) [concrete] +// CHECK:STDOUT: %pattern_type.312: type = pattern_type %AnyParam.d71 [concrete] // CHECK:STDOUT: %AnyParam.val: %AnyParam.d71 = struct_value () [concrete] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete] // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic] @@ -2095,6 +2178,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %assoc0: %Y.assoc_type = assoc_entity element0, imports.%PackageHasParam.import_ref.ce2 [concrete] // CHECK:STDOUT: %K.type.311: type = fn_type @K.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.cb4: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic] // CHECK:STDOUT: %Y.impl_witness_table = impl_witness_table (imports.%PackageGenericClass.import_ref.fbf), @impl [concrete] // CHECK:STDOUT: %Y.impl_witness: = impl_witness %Y.impl_witness_table [concrete] @@ -2121,16 +2205,16 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %PackageHasParam.import_ref.5ab: type = import_ref PackageHasParam//default, loc4_16, loaded [symbolic = @AnyParam.%T (constants.%T)] // CHECK:STDOUT: %PackageHasParam.import_ref.34c: @AnyParam.%T (%T) = import_ref PackageHasParam//default, loc4_26, loaded [symbolic = @AnyParam.%X (constants.%X)] // CHECK:STDOUT: %PackageHasParam.import_ref.8f2: = import_ref PackageHasParam//default, loc4_34, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst34 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.601 = import_ref PackageHasParam//default, inst37 [no loc], unloaded // CHECK:STDOUT: %PackageGenericClass.GenericClass: %GenericClass.type = import_ref PackageGenericClass//default, GenericClass, loaded [concrete = constants.%GenericClass.generic] // CHECK:STDOUT: %PackageGenericClass.import_ref.5ab: type = import_ref PackageGenericClass//default, loc6_20, loaded [symbolic = @GenericClass.%U (constants.%U)] // CHECK:STDOUT: %PackageGenericClass.import_ref.8f2: = import_ref PackageGenericClass//default, loc6_31, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %PackageGenericClass.import_ref.065 = import_ref PackageGenericClass//default, inst29 [no loc], unloaded +// CHECK:STDOUT: %PackageGenericClass.import_ref.065 = import_ref PackageGenericClass//default, inst30 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.Y: type = import_ref PackageHasParam//default, Y, loaded [concrete = constants.%Y.type] -// CHECK:STDOUT: %PackageHasParam.import_ref.dc1 = import_ref PackageHasParam//default, inst41 [no loc], unloaded +// CHECK:STDOUT: %PackageHasParam.import_ref.dc1 = import_ref PackageHasParam//default, inst44 [no loc], unloaded // CHECK:STDOUT: %PackageHasParam.import_ref.f69: %Y.assoc_type = import_ref PackageHasParam//default, loc7_22, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %PackageHasParam.K = import_ref PackageHasParam//default, K, unloaded -// CHECK:STDOUT: %PackageHasParam.import_ref.292: %Y.type = import_ref PackageHasParam//default, inst41 [no loc], loaded [symbolic = constants.%Self] +// CHECK:STDOUT: %PackageHasParam.import_ref.292: %Y.type = import_ref PackageHasParam//default, inst44 [no loc], loaded [symbolic = constants.%Self] // CHECK:STDOUT: %PackageGenericClass.import_ref.246: = import_ref PackageGenericClass//default, loc8_66, loaded [concrete = constants.%Y.impl_witness] // CHECK:STDOUT: %PackageGenericClass.import_ref.a0e: type = import_ref PackageGenericClass//default, loc8_43, loaded [concrete = constants.%AnyParam.d71] // CHECK:STDOUT: %PackageGenericClass.import_ref.ca6: type = import_ref PackageGenericClass//default, loc8_63, loaded [concrete = constants.%Y.type] @@ -2163,9 +2247,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(imports.%PackageHasParam.import_ref.5ab: type, imports.%PackageHasParam.import_ref.34c: @AnyParam.%T (%T)) [from "has_param.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %X: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %X.patt: @AnyParam.%T (%T) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %X.patt: @AnyParam.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2179,7 +2264,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @GenericClass(imports.%PackageGenericClass.import_ref.5ab: type) [from "has_generic_class.carbon"] { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic = %U (constants.%U)] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2194,8 +2279,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: fn @M() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %obj.patt: %AnyParam.d71 = binding_pattern obj -// CHECK:STDOUT: %.loc8_3.1: %AnyParam.d71 = var_pattern %obj.patt +// CHECK:STDOUT: %obj.patt: %pattern_type.312 = binding_pattern obj +// CHECK:STDOUT: %.loc8_3.1: %pattern_type.312 = var_pattern %obj.patt // CHECK:STDOUT: } // CHECK:STDOUT: %obj.var: ref %AnyParam.d71 = var obj // CHECK:STDOUT: %.loc8_74.1: %empty_struct_type = struct_literal () @@ -2224,6 +2309,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @K.1(imports.%PackageHasParam.import_ref.292: %Y.type) [from "has_param.carbon"] { // CHECK:STDOUT: %Self: %Y.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.cb4)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type [symbolic = %require_complete (constants.%require_complete)] @@ -2237,7 +2323,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %X => constants.%X -// CHECK:STDOUT: %X.patt => constants.%X.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc +// CHECK:STDOUT: %X.patt => constants.%X.patt.7fd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericClass(constants.%U) { @@ -2249,7 +2336,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %T => constants.%GenericClass.type // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %X => constants.%GenericClass.generic -// CHECK:STDOUT: %X.patt => constants.%X.patt.7fb +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.17a +// CHECK:STDOUT: %X.patt => constants.%X.patt.80f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -2257,6 +2345,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @K.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- has_extra_interfaces.carbon @@ -2279,7 +2368,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Extra8.type: type = facet_type <@Extra8> [concrete] // CHECK:STDOUT: %Self.f90: %Extra8.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] @@ -2288,6 +2378,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self.826: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.826 [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.cf0: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.bc6: %F.type.cf0 = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -2296,6 +2387,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %tuple.type.15d: type = tuple_type (%Extra1.type, %Extra2.type, %Extra3.type, %Extra4.type, %Extra5.type, %Extra6.type, %Extra7.type, %Extra8.type) [concrete] // CHECK:STDOUT: %C.69b: type = class_type @C, @C(%tuple.type.15d) [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.e23: type = pattern_type %C.69b [concrete] // CHECK:STDOUT: %F.type.06f: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.13c: %F.type.06f = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C.69b, (%I.impl_witness) [concrete] @@ -2331,7 +2423,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Extra7.decl: type = interface_decl @Extra7 [concrete = constants.%Extra7.type] {} {} // CHECK:STDOUT: %Extra8.decl: type = interface_decl @Extra8 [concrete = constants.%Extra8.type] {} {} // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc13_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc13_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc13_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -2422,8 +2514,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.826] // CHECK:STDOUT: %F.decl: %F.type.cf0 = fn_decl @F.1 [concrete = constants.%F.bc6] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc14_26.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc14_26.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.6de) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.6de) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc14_26.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc14_26.1: type = splice_block %.loc14_26.2 [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type)] { @@ -2443,8 +2535,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %C as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.06f = fn_decl @F.2 [concrete = constants.%F.13c] { -// CHECK:STDOUT: %self.patt: %C.69b = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.69b = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.e23 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.e23 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C.69b = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%C [concrete = constants.%C.69b] @@ -2458,7 +2550,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc13_9.1: type) { // CHECK:STDOUT: %T.loc13_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc13_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc13_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc13_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2475,6 +2567,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @F.1(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.826)] // CHECK:STDOUT: %Self.as_type.loc14_26.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_26.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc14_26.1 [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc14_26.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -2492,6 +2585,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @F.1(constants.%Self.826) { // CHECK:STDOUT: %Self => constants.%Self.826 // CHECK:STDOUT: %Self.as_type.loc14_26.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%tuple.type.15d) { @@ -2504,6 +2598,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @F.1(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc14_26.1 => constants.%C.69b +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e23 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_use_has_extra_interfaces.carbon @@ -2514,8 +2609,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.42e: type = class_type @C, @C(type) [concrete] +// CHECK:STDOUT: %pattern_type.6e4: type = pattern_type %C.42e [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] @@ -2523,6 +2620,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, imports.%HasExtraInterfaces.import_ref.d54 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.013 [symbolic] +// CHECK:STDOUT: %pattern_type.e10: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Extra8.type: type = facet_type <@Extra8> [concrete] // CHECK:STDOUT: %Extra7.type: type = facet_type <@Extra7> [concrete] // CHECK:STDOUT: %Extra6.type: type = facet_type <@Extra6> [concrete] @@ -2547,12 +2645,12 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %HasExtraInterfaces.C: %C.type = import_ref HasExtraInterfaces//default, C, loaded [concrete = constants.%C.generic] // CHECK:STDOUT: %HasExtraInterfaces.import_ref.5ab: type = import_ref HasExtraInterfaces//default, loc13_9, loaded [symbolic = @C.%T (constants.%T)] // CHECK:STDOUT: %HasExtraInterfaces.import_ref.8f2: = import_ref HasExtraInterfaces//default, loc13_20, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %HasExtraInterfaces.import_ref.4c0 = import_ref HasExtraInterfaces//default, inst59 [no loc], unloaded +// CHECK:STDOUT: %HasExtraInterfaces.import_ref.4c0 = import_ref HasExtraInterfaces//default, inst60 [no loc], unloaded // CHECK:STDOUT: %HasExtraInterfaces.I: type = import_ref HasExtraInterfaces//default, I, loaded [concrete = constants.%I.type] -// CHECK:STDOUT: %HasExtraInterfaces.import_ref.e5d = import_ref HasExtraInterfaces//default, inst66 [no loc], unloaded +// CHECK:STDOUT: %HasExtraInterfaces.import_ref.e5d = import_ref HasExtraInterfaces//default, inst67 [no loc], unloaded // CHECK:STDOUT: %HasExtraInterfaces.import_ref.be9: %I.assoc_type = import_ref HasExtraInterfaces//default, loc14_33, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %HasExtraInterfaces.F = import_ref HasExtraInterfaces//default, F, unloaded -// CHECK:STDOUT: %HasExtraInterfaces.import_ref.1db: %I.type = import_ref HasExtraInterfaces//default, inst66 [no loc], loaded [symbolic = constants.%Self.013] +// CHECK:STDOUT: %HasExtraInterfaces.import_ref.1db: %I.type = import_ref HasExtraInterfaces//default, inst67 [no loc], loaded [symbolic = constants.%Self.013] // CHECK:STDOUT: %HasExtraInterfaces.import_ref.bca = import_ref HasExtraInterfaces//default, loc16_79, unloaded // CHECK:STDOUT: %HasExtraInterfaces.import_ref.9c8 = import_ref HasExtraInterfaces//default, inst47 [no loc], unloaded // CHECK:STDOUT: %HasExtraInterfaces.import_ref.dfe = import_ref HasExtraInterfaces//default, inst43 [no loc], unloaded @@ -2575,8 +2673,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %HasExtraInterfaces.import = import HasExtraInterfaces // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %c.patt: %C.42e = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C.42e = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.6e4 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.6e4 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.42e = value_param call_param0 // CHECK:STDOUT: %.loc5: type = splice_block %C [concrete = constants.%C.42e] { @@ -2650,7 +2748,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%HasExtraInterfaces.import_ref.5ab: type) [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2674,6 +2772,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: generic fn @F(imports.%HasExtraInterfaces.import_ref.1db: %I.type) [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.013)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.e10)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -2693,6 +2792,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: specific @F(constants.%Self.013) { // CHECK:STDOUT: %Self => constants.%Self.013 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e10 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%tuple.type) { diff --git a/toolchain/check/testdata/impl/lookup/min_prelude/specialization_with_symbolic_rewrite.carbon b/toolchain/check/testdata/impl/lookup/min_prelude/specialization_with_symbolic_rewrite.carbon index d89550b5cf80..3cf5f9fdbb56 100644 --- a/toolchain/check/testdata/impl/lookup/min_prelude/specialization_with_symbolic_rewrite.carbon +++ b/toolchain/check/testdata/impl/lookup/min_prelude/specialization_with_symbolic_rewrite.carbon @@ -97,7 +97,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Z.type.9fb: type = generic_interface_type @Z [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Z.generic: %Z.type.9fb = struct_value () [concrete] @@ -109,7 +110,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %S: type = bind_symbolic_name S, 1 [symbolic] -// CHECK:STDOUT: %S.patt: type = symbolic_binding_pattern S, 1 [symbolic] +// CHECK:STDOUT: %S.patt: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic] // CHECK:STDOUT: %Z.type.8e9: type = facet_type <@Z, @Z(%S)> [symbolic] // CHECK:STDOUT: %.Self.eb1: %Z.type.8e9 = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %Self.831: %Z.type.8e9 = bind_symbolic_name Self, 1 [symbolic] @@ -136,8 +137,10 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.202: = require_complete_type %Z_where.type.692 [symbolic] // CHECK:STDOUT: %Z.impl_witness.093: = impl_witness file.%Z.impl_witness_table.loc11, @impl.62c(%T.8b3) [symbolic] // CHECK:STDOUT: %T.62d: %Z.type.049 = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.897: %Z.type.049 = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.c1f: type = pattern_type %Z.type.049 [concrete] +// CHECK:STDOUT: %T.patt.2fa: %pattern_type.c1f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.62d [symbolic] +// CHECK:STDOUT: %pattern_type.d8b: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.2b1: = require_complete_type %T.as_type [symbolic] @@ -162,14 +165,14 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Z.decl: %Z.type.9fb = interface_decl @Z [concrete = constants.%Z.generic] { -// CHECK:STDOUT: %T.patt.loc3_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_13.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc3_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_13.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc3_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_13.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @impl.119 [concrete] { -// CHECK:STDOUT: %T.patt.loc9_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_14.2 (constants.%T.patt.e01)] -// CHECK:STDOUT: %S.patt.loc9_24.1: type = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc9_24.2 (constants.%S.patt)] +// CHECK:STDOUT: %T.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_14.2 (constants.%T.patt.250)] +// CHECK:STDOUT: %S.patt.loc9_24.1: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc9_24.2 (constants.%S.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc9_14.1 [symbolic = %T.loc9_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %Z.ref: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -194,7 +197,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Z.impl_witness.loc9: = impl_witness %Z.impl_witness_table.loc9, @impl.119(constants.%T.8b3, constants.%S) [symbolic = @impl.119.%Z.impl_witness (constants.%Z.impl_witness.d59)] // CHECK:STDOUT: %impl_witness_assoc_constant.loc9: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: impl_decl @impl.62c [concrete] { -// CHECK:STDOUT: %T.patt.loc11_20.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_20.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc11_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_20.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc11_30: type = name_ref T, %T.loc11_20.1 [symbolic = %T.loc11_20.2 (constants.%T.8b3)] // CHECK:STDOUT: %Z.ref: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -217,9 +220,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Z.impl_witness.loc11: = impl_witness %Z.impl_witness_table.loc11, @impl.62c(constants.%T.8b3) [symbolic = @impl.62c.%Z.impl_witness (constants.%Z.impl_witness.093)] // CHECK:STDOUT: %impl_witness_assoc_constant.loc11: type = impl_witness_assoc_constant constants.%T.8b3 [symbolic = @impl.62c.%T.loc11_20.2 (constants.%T.8b3)] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc13_6.1: %Z.type.049 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt.897)] -// CHECK:STDOUT: %t.patt: @F.%T.as_type.loc13_19.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.%T.as_type.loc13_19.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc13_6.1: %pattern_type.c1f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt.2fa)] +// CHECK:STDOUT: %t.patt: @F.%pattern_type (%pattern_type.d8b) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.%pattern_type (%pattern_type.d8b) = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_13: type = splice_block %Z.type [concrete = constants.%Z.type.049] { // CHECK:STDOUT: %Z.ref: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -239,7 +242,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Z(%T.loc3_13.1: type) { // CHECK:STDOUT: %T.loc3_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_13.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc3_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_13.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc3_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_13.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(%T.loc3_13.2)> [symbolic = %Z.type (constants.%Z.type.a61)] @@ -266,9 +269,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.119(%T.loc9_14.1: type, %S.loc9_24.1: type) { // CHECK:STDOUT: %T.loc9_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc9_14.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc9_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: %S.loc9_24.2: type = bind_symbolic_name S, 1 [symbolic = %S.loc9_24.2 (constants.%S)] -// CHECK:STDOUT: %S.patt.loc9_24.2: type = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc9_24.2 (constants.%S.patt)] +// CHECK:STDOUT: %S.patt.loc9_24.2: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc9_24.2 (constants.%S.patt)] // CHECK:STDOUT: %Z.type.loc9_42.2: type = facet_type <@Z, @Z(%S.loc9_24.2)> [symbolic = %Z.type.loc9_42.2 (constants.%Z.type.8e9)] // CHECK:STDOUT: %.Self.2: @impl.119.%Z.type.loc9_42.2 (%Z.type.8e9) = bind_symbolic_name .Self [symbolic = %.Self.2 (constants.%.Self.eb1)] // CHECK:STDOUT: %require_complete.loc9_50: = require_complete_type %Z.type.loc9_42.2 [symbolic = %require_complete.loc9_50 (constants.%require_complete.b87)] @@ -291,7 +294,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.62c(%T.loc11_20.1: type) { // CHECK:STDOUT: %T.loc11_20.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_20.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc11_20.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_20.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc11_20.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_20.2 (constants.%T.patt.250)] // CHECK:STDOUT: %Z_where.type: type = facet_type <@Z, @Z(constants.%C) where constants.%impl.elem0.e29 = %T.loc11_20.2> [symbolic = %Z_where.type (constants.%Z_where.type.692)] // CHECK:STDOUT: %require_complete: = require_complete_type %Z_where.type [symbolic = %require_complete (constants.%require_complete.202)] // CHECK:STDOUT: %Z.impl_witness: = impl_witness file.%Z.impl_witness_table.loc11, @impl.62c(%T.loc11_20.2) [symbolic = %Z.impl_witness (constants.%Z.impl_witness.093)] @@ -315,8 +318,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc13_6.1: %Z.type.049) { // CHECK:STDOUT: %T.loc13_6.2: %Z.type.049 = bind_symbolic_name T, 0 [symbolic = %T.loc13_6.2 (constants.%T.62d)] -// CHECK:STDOUT: %T.patt.loc13_6.2: %Z.type.049 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt.897)] +// CHECK:STDOUT: %T.patt.loc13_6.2: %pattern_type.c1f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_6.2 (constants.%T.patt.2fa)] // CHECK:STDOUT: %T.as_type.loc13_19.2: type = facet_access_type %T.loc13_6.2 [symbolic = %T.as_type.loc13_19.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc13_19.2 [symbolic = %pattern_type (constants.%pattern_type.d8b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc13_19.2 [symbolic = %require_complete (constants.%require_complete.2b1)] @@ -325,7 +329,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: fn(%t.param: @F.%T.as_type.loc13_19.2 (%T.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: @F.%T.as_type.loc13_19.2 (%T.as_type) = binding_pattern a +// CHECK:STDOUT: %a.patt: @F.%pattern_type (%pattern_type.d8b) = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %t.ref: @F.%T.as_type.loc13_19.2 (%T.as_type) = name_ref t, %t // CHECK:STDOUT: %.loc15_11.1: type = splice_block %impl.elem0 [symbolic = %T.as_type.loc13_19.2 (constants.%T.as_type)] { @@ -345,7 +349,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%T.8b3) { // CHECK:STDOUT: %T.loc3_13.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%T.8b3, constants.%Self.2bc) {} @@ -354,7 +358,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%S) { // CHECK:STDOUT: %T.loc3_13.2 => constants.%S -// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Z.type => constants.%Z.type.8e9 @@ -367,7 +371,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.119(constants.%T.8b3, constants.%S) { // CHECK:STDOUT: %T.loc9_14.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc9_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc9_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %S.loc9_24.2 => constants.%S // CHECK:STDOUT: %S.patt.loc9_24.2 => constants.%S.patt // CHECK:STDOUT: %Z.type.loc9_42.2 => constants.%Z.type.8e9 @@ -389,7 +393,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%C) { // CHECK:STDOUT: %T.loc3_13.2 => constants.%C -// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Z.type => constants.%Z.type.049 @@ -402,7 +406,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.62c(constants.%T.8b3) { // CHECK:STDOUT: %T.loc11_20.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc11_20.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc11_20.2 => constants.%T.patt.250 // CHECK:STDOUT: %Z_where.type => constants.%Z_where.type.692 // CHECK:STDOUT: %require_complete => constants.%require_complete.202 // CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.093 @@ -412,13 +416,14 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.62d) { // CHECK:STDOUT: %T.loc13_6.2 => constants.%T.62d -// CHECK:STDOUT: %T.patt.loc13_6.2 => constants.%T.patt.897 +// CHECK:STDOUT: %T.patt.loc13_6.2 => constants.%T.patt.2fa // CHECK:STDOUT: %T.as_type.loc13_19.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d8b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.62c(constants.%T.as_type) { // CHECK:STDOUT: %T.loc11_20.2 => constants.%T.as_type -// CHECK:STDOUT: %T.patt.loc11_20.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc11_20.2 => constants.%T.patt.250 // CHECK:STDOUT: %Z_where.type => constants.%Z_where.type.272 // CHECK:STDOUT: %require_complete => constants.%require_complete.915 // CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.7c2 @@ -434,7 +439,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Z.type.9fb: type = generic_interface_type @Z [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Z.generic: %Z.type.9fb = struct_value () [concrete] @@ -448,7 +454,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %S: type = bind_symbolic_name S, 1 [symbolic] -// CHECK:STDOUT: %S.patt: type = symbolic_binding_pattern S, 1 [symbolic] +// CHECK:STDOUT: %S.patt: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic] // CHECK:STDOUT: %Z.type.8e9: type = facet_type <@Z, @Z(%S)> [symbolic] // CHECK:STDOUT: %.Self.eb1: %Z.type.8e9 = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %Self.831: %Z.type.8e9 = bind_symbolic_name Self, 1 [symbolic] @@ -475,8 +481,10 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.202: = require_complete_type %Z_where.type.692 [symbolic] // CHECK:STDOUT: %Z.impl_witness.093: = impl_witness file.%Z.impl_witness_table.loc12, @impl.62c(%T.8b3) [symbolic] // CHECK:STDOUT: %T.62d: %Z.type.049 = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.897: %Z.type.049 = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.c1f: type = pattern_type %Z.type.049 [concrete] +// CHECK:STDOUT: %T.patt.2fa: %pattern_type.c1f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.62d [symbolic] +// CHECK:STDOUT: %pattern_type.d8b: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.2b1: = require_complete_type %T.as_type [symbolic] @@ -484,13 +492,16 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Z.facet.5a7: %Z.type.049 = facet_value %T.as_type, (%Z.lookup_impl_witness.103) [symbolic] // CHECK:STDOUT: %impl.elem0.284: type = impl_witness_access %Z.lookup_impl_witness.103, element0 [symbolic] // CHECK:STDOUT: %require_complete.3ef: = require_complete_type %impl.elem0.284 [symbolic] +// CHECK:STDOUT: %pattern_type.722: type = pattern_type %impl.elem0.284 [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.199: type = facet_type <@ImplicitAs, @ImplicitAs(%impl.elem0.284)> [symbolic] @@ -506,6 +517,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness %BitAnd.impl_witness_table, @impl.f92(%T.8b3) [symbolic] // CHECK:STDOUT: %Op.type: type = fn_type @Op, @impl.f92(%T.8b3) [symbolic] // CHECK:STDOUT: %Op: %Op.type = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T.8b3 [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -515,13 +527,13 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc13_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//prelude, inst67 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//prelude, inst72 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//prelude, loc14_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//prelude, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//prelude, loc13_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//prelude, inst67 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//prelude, inst72 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//prelude, loc14_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.02e = import_ref Core//prelude, loc18_41, unloaded // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded // CHECK:STDOUT: %Core.import_ref.287 = import_ref Core//prelude, loc21_36, unloaded @@ -541,15 +553,15 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Z.decl: %Z.type.9fb = interface_decl @Z [concrete = constants.%Z.generic] { -// CHECK:STDOUT: %T.patt.loc3_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_13.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc3_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_13.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc3_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_13.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %Y.decl: type = interface_decl @Y [concrete = constants.%Y.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: impl_decl @impl.119 [concrete] { -// CHECK:STDOUT: %T.patt.loc10_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt.e01)] -// CHECK:STDOUT: %S.patt.loc10_24.1: type = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc10_24.2 (constants.%S.patt)] +// CHECK:STDOUT: %T.patt.loc10_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt.250)] +// CHECK:STDOUT: %S.patt.loc10_24.1: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc10_24.2 (constants.%S.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc10_14.1 [symbolic = %T.loc10_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %Z.ref: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -574,7 +586,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Z.impl_witness.loc10: = impl_witness %Z.impl_witness_table.loc10, @impl.119(constants.%T.8b3, constants.%S) [symbolic = @impl.119.%Z.impl_witness (constants.%Z.impl_witness.d59)] // CHECK:STDOUT: %impl_witness_assoc_constant.loc10: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: impl_decl @impl.62c [concrete] { -// CHECK:STDOUT: %T.patt.loc12_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc12_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc12_24: type = name_ref T, %T.loc12_14.1 [symbolic = %T.loc12_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %Z.ref: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -597,9 +609,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Z.impl_witness.loc12: = impl_witness %Z.impl_witness_table.loc12, @impl.62c(constants.%T.8b3) [symbolic = @impl.62c.%Z.impl_witness (constants.%Z.impl_witness.093)] // CHECK:STDOUT: %impl_witness_assoc_constant.loc12: type = impl_witness_assoc_constant constants.%T.8b3 [symbolic = @impl.62c.%T.loc12_14.2 (constants.%T.8b3)] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc14_6.1: %Z.type.049 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt.897)] -// CHECK:STDOUT: %t.patt: @F.%T.as_type.loc14_19.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.%T.as_type.loc14_19.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc14_6.1: %pattern_type.c1f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt.2fa)] +// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc14 (%pattern_type.d8b) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc14 (%pattern_type.d8b) = value_param_pattern %t.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_13: type = splice_block %Z.type [concrete = constants.%Z.type.049] { // CHECK:STDOUT: %Z.ref: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic] @@ -619,7 +631,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Z(%T.loc3_13.1: type) { // CHECK:STDOUT: %T.loc3_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_13.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc3_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_13.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc3_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_13.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(%T.loc3_13.2)> [symbolic = %Z.type (constants.%Z.type.a61)] @@ -650,7 +662,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -681,9 +693,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.119(%T.loc10_14.1: type, %S.loc10_24.1: type) { // CHECK:STDOUT: %T.loc10_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc10_14.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc10_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc10_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: %S.loc10_24.2: type = bind_symbolic_name S, 1 [symbolic = %S.loc10_24.2 (constants.%S)] -// CHECK:STDOUT: %S.patt.loc10_24.2: type = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc10_24.2 (constants.%S.patt)] +// CHECK:STDOUT: %S.patt.loc10_24.2: %pattern_type.98f = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc10_24.2 (constants.%S.patt)] // CHECK:STDOUT: %Z.type.loc10_42.2: type = facet_type <@Z, @Z(%S.loc10_24.2)> [symbolic = %Z.type.loc10_42.2 (constants.%Z.type.8e9)] // CHECK:STDOUT: %.Self.2: @impl.119.%Z.type.loc10_42.2 (%Z.type.8e9) = bind_symbolic_name .Self [symbolic = %.Self.2 (constants.%.Self.eb1)] // CHECK:STDOUT: %require_complete.loc10_50: = require_complete_type %Z.type.loc10_42.2 [symbolic = %require_complete.loc10_50 (constants.%require_complete.b87)] @@ -706,7 +718,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.62c(%T.loc12_14.1: type) { // CHECK:STDOUT: %T.loc12_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_14.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc12_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc12_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.250)] // CHECK:STDOUT: %Z_where.type: type = facet_type <@Z, @Z(constants.%C) where constants.%impl.elem0.e29 = %T.loc12_14.2> [symbolic = %Z_where.type (constants.%Z_where.type.692)] // CHECK:STDOUT: %require_complete: = require_complete_type %Z_where.type [symbolic = %require_complete (constants.%require_complete.202)] // CHECK:STDOUT: %Z.impl_witness: = impl_witness file.%Z.impl_witness_table.loc12, @impl.62c(%T.loc12_14.2) [symbolic = %Z.impl_witness (constants.%Z.impl_witness.093)] @@ -721,7 +733,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.f92(imports.%Core.import_ref.5ab3ec.3: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.250)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl.f92(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -746,14 +758,16 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc14_6.1: %Z.type.049) { // CHECK:STDOUT: %T.loc14_6.2: %Z.type.049 = bind_symbolic_name T, 0 [symbolic = %T.loc14_6.2 (constants.%T.62d)] -// CHECK:STDOUT: %T.patt.loc14_6.2: %Z.type.049 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt.897)] +// CHECK:STDOUT: %T.patt.loc14_6.2: %pattern_type.c1f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_6.2 (constants.%T.patt.2fa)] // CHECK:STDOUT: %T.as_type.loc14_19.2: type = facet_access_type %T.loc14_6.2 [symbolic = %T.as_type.loc14_19.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type.loc14: type = pattern_type %T.as_type.loc14_19.2 [symbolic = %pattern_type.loc14 (constants.%pattern_type.d8b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc14: = require_complete_type %T.as_type.loc14_19.2 [symbolic = %require_complete.loc14 (constants.%require_complete.2b1)] // CHECK:STDOUT: %Z.lookup_impl_witness: = lookup_impl_witness %T.loc14_6.2, @Z, @Z(constants.%C) [symbolic = %Z.lookup_impl_witness (constants.%Z.lookup_impl_witness.103)] // CHECK:STDOUT: %impl.elem0.loc22_11.2: type = impl_witness_access %Z.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_11.2 (constants.%impl.elem0.284)] // CHECK:STDOUT: %require_complete.loc22_11: = require_complete_type %impl.elem0.loc22_11.2 [symbolic = %require_complete.loc22_11 (constants.%require_complete.3ef)] +// CHECK:STDOUT: %pattern_type.loc22: type = pattern_type %impl.elem0.loc22_11.2 [symbolic = %pattern_type.loc22 (constants.%pattern_type.722)] // CHECK:STDOUT: %ImplicitAs.type.loc22_16.2: type = facet_type <@ImplicitAs, @ImplicitAs(%impl.elem0.loc22_11.2)> [symbolic = %ImplicitAs.type.loc22_16.2 (constants.%ImplicitAs.type.199)] // CHECK:STDOUT: %require_complete.loc22_16: = require_complete_type %ImplicitAs.type.loc22_16.2 [symbolic = %require_complete.loc22_16 (constants.%require_complete.3ca)] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%impl.elem0.loc22_11.2) [symbolic = %ImplicitAs.assoc_type (constants.%ImplicitAs.assoc_type.bd9)] @@ -762,7 +776,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: fn(%t.param: @F.%T.as_type.loc14_19.2 (%T.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: @F.%impl.elem0.loc22_11.2 (%impl.elem0.284) = binding_pattern a +// CHECK:STDOUT: %a.patt: @F.%pattern_type.loc22 (%pattern_type.722) = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %t.ref: @F.%T.as_type.loc14_19.2 (%T.as_type) = name_ref t, %t // CHECK:STDOUT: %.loc22_11.1: type = splice_block %impl.elem0.loc22_11.1 [symbolic = %impl.elem0.loc22_11.2 (constants.%impl.elem0.284)] { @@ -787,12 +801,15 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op(imports.%Core.import_ref.5ab3ec.4: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -801,7 +818,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%T.8b3) { // CHECK:STDOUT: %T.loc3_13.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%T.8b3, constants.%Self.2bc) {} @@ -810,7 +827,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%S) { // CHECK:STDOUT: %T.loc3_13.2 => constants.%S -// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Z.type => constants.%Z.type.8e9 @@ -823,7 +840,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.119(constants.%T.8b3, constants.%S) { // CHECK:STDOUT: %T.loc10_14.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc10_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc10_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %S.loc10_24.2 => constants.%S // CHECK:STDOUT: %S.patt.loc10_24.2 => constants.%S.patt // CHECK:STDOUT: %Z.type.loc10_42.2 => constants.%Z.type.8e9 @@ -845,7 +862,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Z(constants.%C) { // CHECK:STDOUT: %T.loc3_13.2 => constants.%C -// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc3_13.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Z.type => constants.%Z.type.049 @@ -858,7 +875,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.62c(constants.%T.8b3) { // CHECK:STDOUT: %T.loc12_14.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc12_14.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc12_14.2 => constants.%T.patt.250 // CHECK:STDOUT: %Z_where.type => constants.%Z_where.type.692 // CHECK:STDOUT: %require_complete => constants.%require_complete.202 // CHECK:STDOUT: %Z.impl_witness => constants.%Z.impl_witness.093 @@ -868,8 +885,9 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.62d) { // CHECK:STDOUT: %T.loc14_6.2 => constants.%T.62d -// CHECK:STDOUT: %T.patt.loc14_6.2 => constants.%T.patt.897 +// CHECK:STDOUT: %T.patt.loc14_6.2 => constants.%T.patt.2fa // CHECK:STDOUT: %T.as_type.loc14_19.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type.loc14 => constants.%pattern_type.d8b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%C, constants.%Z.facet.5a7) {} @@ -888,6 +906,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%impl.elem0.284) { @@ -905,7 +925,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %T.patt => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt => constants.%T.patt.250 // CHECK:STDOUT: %BitAnd.impl_witness => constants.%BitAnd.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: @@ -913,6 +933,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@F.%impl.elem0.loc22_11.2) {} @@ -925,7 +946,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Ptr.assoc_type: type = assoc_entity_type @Ptr [concrete] // CHECK:STDOUT: %assoc0: %Ptr.assoc_type = assoc_entity element0, @Ptr.%Type [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %.Self: %Ptr.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %Ptr.lookup_impl_witness: = lookup_impl_witness %.Self, @Ptr [symbolic_self] @@ -936,12 +958,14 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.465bad.1: = require_complete_type %Ptr_where.type.bd48cc.1 [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.e8ce81.1: = impl_witness file.%Ptr.impl_witness_table, @impl(%U) [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %ptr.79f131.2: type = ptr_type %T [symbolic] // CHECK:STDOUT: %Ptr_where.type.bd48cc.2: type = facet_type <@Ptr where %impl.elem0 = %ptr.79f131.2> [symbolic] // CHECK:STDOUT: %require_complete.465bad.2: = require_complete_type %Ptr_where.type.bd48cc.2 [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.e8ce81.2: = impl_witness file.%Ptr.impl_witness_table, @impl(%T) [symbolic] // CHECK:STDOUT: %Ptr.facet.bbf: %Ptr.type = facet_value %T, (%Ptr.impl_witness.e8ce81.2) [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr.79f131.2 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6e5: = require_complete_type %ptr.79f131.2 [symbolic] @@ -963,7 +987,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Ptr.decl: type = interface_decl @Ptr [concrete = constants.%Ptr.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %U.patt.loc7_20.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_20.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc7_30: type = name_ref U, %U.loc7_20.1 [symbolic = %U.loc7_20.2 (constants.%U)] // CHECK:STDOUT: %Ptr.ref: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -984,12 +1008,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Ptr.impl_witness: = impl_witness %Ptr.impl_witness_table, @impl(constants.%U) [symbolic = @impl.%Ptr.impl_witness (constants.%Ptr.impl_witness.e8ce81.1)] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%ptr.79f131.1 [symbolic = @impl.%ptr.loc7_54.2 (constants.%ptr.79f131.1)] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc9_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %t.patt: @F.%T.loc9_6.2 (%T) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.%T.loc9_6.2 (%T) = ref_param_pattern %t.patt, call_param0 -// CHECK:STDOUT: %.loc9_16: @F.%T.loc9_6.2 (%T) = var_pattern %t.param_patt -// CHECK:STDOUT: %return.patt: @F.%ptr (%ptr.79f131.2) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%ptr (%ptr.79f131.2) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc9_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc9_20 (%pattern_type.7dc) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc9_20 (%pattern_type.7dc) = ref_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %.loc9_16: @F.%pattern_type.loc9_20 (%pattern_type.7dc) = var_pattern %t.param_patt +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc9_26 (%pattern_type.afe) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc9_26 (%pattern_type.afe) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_29: type = name_ref T, %T.loc9_6.1 [symbolic = %T.loc9_6.2 (constants.%T)] // CHECK:STDOUT: %Ptr.ref: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -1024,7 +1048,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%U.loc7_20.1: type) { // CHECK:STDOUT: %U.loc7_20.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc7_20.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc7_20.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_20.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] // CHECK:STDOUT: %ptr.loc7_54.2: type = ptr_type %U.loc7_20.2 [symbolic = %ptr.loc7_54.2 (constants.%ptr.79f131.1)] // CHECK:STDOUT: %Ptr_where.type: type = facet_type <@Ptr where constants.%impl.elem0 = %ptr.loc7_54.2> [symbolic = %Ptr_where.type (constants.%Ptr_where.type.bd48cc.1)] // CHECK:STDOUT: %require_complete: = require_complete_type %Ptr_where.type [symbolic = %require_complete (constants.%require_complete.465bad.1)] @@ -1040,10 +1064,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc9_6.1: type) { // CHECK:STDOUT: %T.loc9_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc9_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc9_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type.loc9_20: type = pattern_type %T.loc9_6.2 [symbolic = %pattern_type.loc9_20 (constants.%pattern_type.7dc)] // CHECK:STDOUT: %Ptr.impl_witness: = impl_witness file.%Ptr.impl_witness_table, @impl(%T.loc9_6.2) [symbolic = %Ptr.impl_witness (constants.%Ptr.impl_witness.e8ce81.2)] // CHECK:STDOUT: %Ptr.facet.loc9_30.2: %Ptr.type = facet_value %T.loc9_6.2, (%Ptr.impl_witness) [symbolic = %Ptr.facet.loc9_30.2 (constants.%Ptr.facet.bbf)] // CHECK:STDOUT: %ptr: type = ptr_type %T.loc9_6.2 [symbolic = %ptr (constants.%ptr.79f131.2)] +// CHECK:STDOUT: %pattern_type.loc9_26: type = pattern_type %ptr [symbolic = %pattern_type.loc9_26 (constants.%pattern_type.afe)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_26: = require_complete_type %ptr [symbolic = %require_complete.loc9_26 (constants.%require_complete.6e5)] @@ -1088,9 +1114,11 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: specific @F(constants.%T) { // CHECK:STDOUT: %T.loc9_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type.loc9_20 => constants.%pattern_type.7dc // CHECK:STDOUT: %Ptr.impl_witness => constants.%Ptr.impl_witness.e8ce81.2 // CHECK:STDOUT: %Ptr.facet.loc9_30.2 => constants.%Ptr.facet.bbf // CHECK:STDOUT: %ptr => constants.%ptr.79f131.2 +// CHECK:STDOUT: %pattern_type.loc9_26 => constants.%pattern_type.afe // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(@F.%T.loc9_6.2) {} @@ -1103,7 +1131,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Ptr.assoc_type: type = assoc_entity_type @Ptr [concrete] // CHECK:STDOUT: %assoc0: %Ptr.assoc_type = assoc_entity element0, @Ptr.%Type [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %.Self: %Ptr.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %Ptr.lookup_impl_witness: = lookup_impl_witness %.Self, @Ptr [symbolic_self] @@ -1114,13 +1143,16 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.465: = require_complete_type %Ptr_where.type.bd4 [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.e8c: = impl_witness file.%Ptr.impl_witness_table, @impl(%U) [symbolic] // CHECK:STDOUT: %T: %Ptr.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Ptr.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.9bb: type = pattern_type %Ptr.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.9bb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.87e: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %ptr.900: type = ptr_type %T.as_type [symbolic] // CHECK:STDOUT: %Ptr_where.type.0d6: type = facet_type <@Ptr where %impl.elem0 = %ptr.900> [symbolic] // CHECK:STDOUT: %require_complete.d01: = require_complete_type %Ptr_where.type.0d6 [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.5aa: = impl_witness file.%Ptr.impl_witness_table, @impl(%T.as_type) [symbolic] // CHECK:STDOUT: %Ptr.facet.db8: %Ptr.type = facet_value %T.as_type, (%Ptr.impl_witness.5aa) [symbolic] +// CHECK:STDOUT: %pattern_type.a95: type = pattern_type %ptr.900 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.df6: = require_complete_type %ptr.900 [symbolic] @@ -1142,7 +1174,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Ptr.decl: type = interface_decl @Ptr [concrete = constants.%Ptr.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %U.patt.loc7_20.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_20.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc7_30: type = name_ref U, %U.loc7_20.1 [symbolic = %U.loc7_20.2 (constants.%U)] // CHECK:STDOUT: %Ptr.ref: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -1163,12 +1195,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Ptr.impl_witness: = impl_witness %Ptr.impl_witness_table, @impl(constants.%U) [symbolic = @impl.%Ptr.impl_witness (constants.%Ptr.impl_witness.e8c)] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%ptr.79f [symbolic = @impl.%ptr.loc7_54.2 (constants.%ptr.79f)] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc9_6.1: %Ptr.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %t.patt: @F.%T.as_type.loc9_22.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.%T.as_type.loc9_22.2 (%T.as_type) = ref_param_pattern %t.patt, call_param0 -// CHECK:STDOUT: %.loc9_15: @F.%T.as_type.loc9_22.2 (%T.as_type) = var_pattern %t.param_patt -// CHECK:STDOUT: %return.patt: @F.%ptr (%ptr.900) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%ptr (%ptr.900) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc9_6.1: %pattern_type.9bb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc9_19 (%pattern_type.87e) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc9_19 (%pattern_type.87e) = ref_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %.loc9_15: @F.%pattern_type.loc9_19 (%pattern_type.87e) = var_pattern %t.param_patt +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc9_25 (%pattern_type.a95) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc9_25 (%pattern_type.a95) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_28: %Ptr.type = name_ref T, %T.loc9_6.1 [symbolic = %T.loc9_6.2 (constants.%T)] // CHECK:STDOUT: %Type.ref: %Ptr.assoc_type = name_ref Type, @Type.%assoc0 [concrete = constants.%assoc0] @@ -1209,7 +1241,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%U.loc7_20.1: type) { // CHECK:STDOUT: %U.loc7_20.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc7_20.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc7_20.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_20.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] // CHECK:STDOUT: %ptr.loc7_54.2: type = ptr_type %U.loc7_20.2 [symbolic = %ptr.loc7_54.2 (constants.%ptr.79f)] // CHECK:STDOUT: %Ptr_where.type: type = facet_type <@Ptr where constants.%impl.elem0 = %ptr.loc7_54.2> [symbolic = %Ptr_where.type (constants.%Ptr_where.type.bd4)] // CHECK:STDOUT: %require_complete: = require_complete_type %Ptr_where.type [symbolic = %require_complete (constants.%require_complete.465)] @@ -1225,10 +1257,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc9_6.1: %Ptr.type) { // CHECK:STDOUT: %T.loc9_6.2: %Ptr.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc9_6.2: %Ptr.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc9_6.2: %pattern_type.9bb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc9_22.2: type = facet_access_type %T.loc9_6.2 [symbolic = %T.as_type.loc9_22.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type.loc9_19: type = pattern_type %T.as_type.loc9_22.2 [symbolic = %pattern_type.loc9_19 (constants.%pattern_type.87e)] // CHECK:STDOUT: %Ptr.impl_witness: = impl_witness file.%Ptr.impl_witness_table, @impl(%T.as_type.loc9_22.2) [symbolic = %Ptr.impl_witness (constants.%Ptr.impl_witness.5aa)] // CHECK:STDOUT: %ptr: type = ptr_type %T.as_type.loc9_22.2 [symbolic = %ptr (constants.%ptr.900)] +// CHECK:STDOUT: %pattern_type.loc9_25: type = pattern_type %ptr [symbolic = %pattern_type.loc9_25 (constants.%pattern_type.a95)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_25: = require_complete_type %ptr [symbolic = %require_complete.loc9_25 (constants.%require_complete.df6)] @@ -1274,8 +1308,10 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %T.loc9_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc9_22.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type.loc9_19 => constants.%pattern_type.87e // CHECK:STDOUT: %Ptr.impl_witness => constants.%Ptr.impl_witness.5aa // CHECK:STDOUT: %ptr => constants.%ptr.900 +// CHECK:STDOUT: %pattern_type.loc9_25 => constants.%pattern_type.a95 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(@F.%T.as_type.loc9_22.2) {} @@ -1288,7 +1324,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Ptr.assoc_type: type = assoc_entity_type @Ptr [concrete] // CHECK:STDOUT: %assoc0: %Ptr.assoc_type = assoc_entity element0, @Ptr.%Type [concrete] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %.Self: %Ptr.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] // CHECK:STDOUT: %Ptr.lookup_impl_witness: = lookup_impl_witness %.Self, @Ptr [symbolic_self] @@ -1299,13 +1336,16 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %require_complete.465: = require_complete_type %Ptr_where.type.bd4 [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.e8c: = impl_witness file.%Ptr.impl_witness_table, @impl(%U) [symbolic] // CHECK:STDOUT: %T: %Ptr.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Ptr.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.9bb: type = pattern_type %Ptr.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.9bb = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.87e: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %ptr.900: type = ptr_type %T.as_type [symbolic] // CHECK:STDOUT: %Ptr_where.type.0d6: type = facet_type <@Ptr where %impl.elem0 = %ptr.900> [symbolic] // CHECK:STDOUT: %require_complete.d01: = require_complete_type %Ptr_where.type.0d6 [symbolic] // CHECK:STDOUT: %Ptr.impl_witness.5aa: = impl_witness file.%Ptr.impl_witness_table, @impl(%T.as_type) [symbolic] // CHECK:STDOUT: %Ptr.facet.db8: %Ptr.type = facet_value %T.as_type, (%Ptr.impl_witness.5aa) [symbolic] +// CHECK:STDOUT: %pattern_type.a95: type = pattern_type %ptr.900 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.df6: = require_complete_type %ptr.900 [symbolic] @@ -1327,7 +1367,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Ptr.decl: type = interface_decl @Ptr [concrete = constants.%Ptr.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %U.patt.loc7_20.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_20.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc7_30: type = name_ref U, %U.loc7_20.1 [symbolic = %U.loc7_20.2 (constants.%U)] // CHECK:STDOUT: %Ptr.ref: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -1348,12 +1388,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %Ptr.impl_witness: = impl_witness %Ptr.impl_witness_table, @impl(constants.%U) [symbolic = @impl.%Ptr.impl_witness (constants.%Ptr.impl_witness.e8c)] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%ptr.79f [symbolic = @impl.%ptr.loc7_54.2 (constants.%ptr.79f)] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc9_6.1: %Ptr.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %t.patt: @F.%T.as_type.loc9_22.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @F.%T.as_type.loc9_22.2 (%T.as_type) = ref_param_pattern %t.patt, call_param0 -// CHECK:STDOUT: %.loc9_15: @F.%T.as_type.loc9_22.2 (%T.as_type) = var_pattern %t.param_patt -// CHECK:STDOUT: %return.patt: @F.%ptr (%ptr.900) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%ptr (%ptr.900) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc9_6.1: %pattern_type.9bb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.patt: @F.%pattern_type.loc9_19 (%pattern_type.87e) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @F.%pattern_type.loc9_19 (%pattern_type.87e) = ref_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %.loc9_15: @F.%pattern_type.loc9_19 (%pattern_type.87e) = var_pattern %t.param_patt +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc9_25 (%pattern_type.a95) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc9_25 (%pattern_type.a95) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_28: %Ptr.type = name_ref T, %T.loc9_6.1 [symbolic = %T.loc9_6.2 (constants.%T)] // CHECK:STDOUT: %Ptr.ref.loc9_31: type = name_ref Ptr, file.%Ptr.decl [concrete = constants.%Ptr.type] @@ -1393,7 +1433,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%U.loc7_20.1: type) { // CHECK:STDOUT: %U.loc7_20.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc7_20.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc7_20.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7_20.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7_20.2 (constants.%U.patt)] // CHECK:STDOUT: %ptr.loc7_54.2: type = ptr_type %U.loc7_20.2 [symbolic = %ptr.loc7_54.2 (constants.%ptr.79f)] // CHECK:STDOUT: %Ptr_where.type: type = facet_type <@Ptr where constants.%impl.elem0 = %ptr.loc7_54.2> [symbolic = %Ptr_where.type (constants.%Ptr_where.type.bd4)] // CHECK:STDOUT: %require_complete: = require_complete_type %Ptr_where.type [symbolic = %require_complete (constants.%require_complete.465)] @@ -1409,10 +1449,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc9_6.1: %Ptr.type) { // CHECK:STDOUT: %T.loc9_6.2: %Ptr.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc9_6.2: %Ptr.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc9_6.2: %pattern_type.9bb = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc9_22.2: type = facet_access_type %T.loc9_6.2 [symbolic = %T.as_type.loc9_22.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type.loc9_19: type = pattern_type %T.as_type.loc9_22.2 [symbolic = %pattern_type.loc9_19 (constants.%pattern_type.87e)] // CHECK:STDOUT: %Ptr.impl_witness: = impl_witness file.%Ptr.impl_witness_table, @impl(%T.as_type.loc9_22.2) [symbolic = %Ptr.impl_witness (constants.%Ptr.impl_witness.5aa)] // CHECK:STDOUT: %ptr: type = ptr_type %T.as_type.loc9_22.2 [symbolic = %ptr (constants.%ptr.900)] +// CHECK:STDOUT: %pattern_type.loc9_25: type = pattern_type %ptr [symbolic = %pattern_type.loc9_25 (constants.%pattern_type.a95)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_25: = require_complete_type %ptr [symbolic = %require_complete.loc9_25 (constants.%require_complete.df6)] @@ -1458,8 +1500,10 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %T.loc9_6.2 => constants.%T // CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc9_22.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type.loc9_19 => constants.%pattern_type.87e // CHECK:STDOUT: %Ptr.impl_witness => constants.%Ptr.impl_witness.5aa // CHECK:STDOUT: %ptr => constants.%ptr.900 +// CHECK:STDOUT: %pattern_type.loc9_25 => constants.%pattern_type.a95 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(@F.%T.as_type.loc9_22.2) {} @@ -1468,12 +1512,15 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -1483,6 +1530,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -1490,13 +1538,15 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Self.e44: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.560: type = facet_access_type %Self.e44 [symbolic] +// CHECK:STDOUT: %pattern_type.a80: type = pattern_type %Self.as_type.560 [symbolic] // CHECK:STDOUT: %Op.type.613: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d98: %Op.type.613 = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.assoc_type: type = assoc_entity_type @BitAnd [concrete] // CHECK:STDOUT: %assoc0.220: %BitAnd.assoc_type = assoc_entity element0, @BitAnd.%Op.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Op.type.28d: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.902: %Op.type.28d = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -1510,18 +1560,18 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: .BitAnd = %BitAnd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc9_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc9_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc13_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc13_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %BitAnd.decl: type = interface_decl @BitAnd [concrete = constants.%BitAnd.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc21_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc21_14.1 [symbolic = %T.loc21_14.2 (constants.%T)] // CHECK:STDOUT: %BitAnd.ref: type = name_ref BitAnd, file.%BitAnd.decl [concrete = constants.%BitAnd.type] @@ -1533,7 +1583,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc9_14.1: type) { // CHECK:STDOUT: %Dest.loc9_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc9_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc9_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -1546,10 +1596,10 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc9_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -1575,7 +1625,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc13_22.1: type) { // CHECK:STDOUT: %Dest.loc13_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc13_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc13_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -1588,10 +1638,10 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc13_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -1618,12 +1668,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: interface @BitAnd { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.e44] // CHECK:STDOUT: %Op.decl: %Op.type.613 = fn_decl @Op.1 [concrete = constants.%Op.d98] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.a80) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18_37: %BitAnd.type = name_ref Self, @BitAnd.%Self [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_37: type = facet_access_type %Self.ref.loc18_37 [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] @@ -1655,7 +1705,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc21_14.1: type) { // CHECK:STDOUT: %T.loc21_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T.loc21_14.2) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1665,12 +1715,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %BitAnd.ref { // CHECK:STDOUT: %Op.decl: @impl.%Op.type (%Op.type.28d) = fn_decl @Op.2 [symbolic = @impl.%Op (constants.%Op.902)] { -// CHECK:STDOUT: %self.patt: @Op.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.2.%T (%T) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.2.%T (%T) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.2.%T (%T) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.2.%T (%T) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc22_37: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Op.2.%T (%T) = value_param call_param0 @@ -1694,6 +1744,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc10_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc10_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc10_14: type = pattern_type %Self.as_type.loc10_20.1 [symbolic = %pattern_type.loc10_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc10_28: type = pattern_type %Dest [symbolic = %pattern_type.loc10_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -1703,6 +1755,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -1710,12 +1764,14 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: generic fn @Op.1(@BitAnd.%Self: %BitAnd.type) { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_15.1 [symbolic = %pattern_type (constants.%pattern_type.a80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560), %other.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560)) -> @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(@impl.%T.loc21_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1732,6 +1788,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc10_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc10_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc10_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -1748,6 +1806,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} @@ -1757,6 +1817,7 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: specific @Op.1(constants.%Self.e44) { // CHECK:STDOUT: %Self => constants.%Self.e44 // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%Self.as_type.560 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -1769,10 +1830,12 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%BitAnd.facet) { // CHECK:STDOUT: %Self => constants.%BitAnd.facet // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/no_prelude/specific_args.carbon b/toolchain/check/testdata/impl/lookup/no_prelude/specific_args.carbon index e9b47651e1c9..cbb22826e4ad 100644 --- a/toolchain/check/testdata/impl/lookup/no_prelude/specific_args.carbon +++ b/toolchain/check/testdata/impl/lookup/no_prelude/specific_args.carbon @@ -55,12 +55,14 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.325: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self: %I.type.325 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.4be: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @I(%T) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I, @I(%T) [symbolic] @@ -80,12 +82,12 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: .X = %X.decl // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt.loc4_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc5_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc5_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -94,7 +96,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc4_13.1: type) { // CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc4_13.2)> [symbolic = %I.type (constants.%I.type.325)] @@ -107,8 +109,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %F.decl: @I.%F.type (%F.type) = fn_decl @F [symbolic = @I.%F (constants.%F)] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc4_36.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc4_36.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type.4be) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type.4be) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%Self.as_type.loc4_36.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_36.1: type = splice_block %.loc4_36.3 [symbolic = %Self.as_type.loc4_36.1 (constants.%Self.as_type)] { @@ -130,7 +132,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc5_9.1: type) { // CHECK:STDOUT: %T.loc5_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc5_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -158,6 +160,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] // CHECK:STDOUT: %Self: @F.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_36.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_36.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_36.1 [symbolic = %pattern_type (constants.%pattern_type.4be)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc4_36.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -172,6 +175,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type => constants.%I.type.325 // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_36.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4be // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(@F.%T) {} @@ -195,10 +199,12 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %I.type.325: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.209: %I.type.325 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type.2ae: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.bb2: %F.type.2ae = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.209 [symbolic] +// CHECK:STDOUT: %pattern_type.4be: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.assoc_type.1e5: type = assoc_entity_type @I, @I(%T) [symbolic] // CHECK:STDOUT: %assoc0.688: %I.assoc_type.1e5 = assoc_entity element0, imports.%Main.import_ref.479 [symbolic] // CHECK:STDOUT: %I.type.e45: type = facet_type <@I, @I(%InInterfaceArgs)> [concrete] @@ -208,6 +214,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.assoc_type.521: type = assoc_entity_type @I, @I(%InInterfaceArgs) [concrete] // CHECK:STDOUT: %assoc0.676: %I.assoc_type.521 = assoc_entity element0, imports.%Main.import_ref.479 [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %F.type.b63: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.d5f: %F.type.b63 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type.e45 = facet_value %X, (%I.impl_witness) [concrete] @@ -218,13 +225,13 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Main.C = import_ref Main//types, C, unloaded // CHECK:STDOUT: %Main.X: type = import_ref Main//types, X, loaded [concrete = constants.%X] // CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//types, loc7_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.acf = import_ref Main//types, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.acf = import_ref Main//types, inst70 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//types, loc4_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//types, inst26 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//types, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.2bb = import_ref Main//types, loc4_43, unloaded // CHECK:STDOUT: %Main.F: @I.%F.type (%F.type.2ae) = import_ref Main//types, F, loaded [symbolic = @I.%F (constants.%F.bb2)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//types, loc4_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.38e: @I.%I.type (%I.type.325) = import_ref Main//types, inst26 [no loc], loaded [symbolic = @I.%Self (constants.%Self.209)] +// CHECK:STDOUT: %Main.import_ref.38e: @I.%I.type (%I.type.325) = import_ref Main//types, inst27 [no loc], loaded [symbolic = @I.%Self (constants.%Self.209)] // CHECK:STDOUT: %Main.import_ref.479 = import_ref Main//types, loc4_43, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: @@ -249,7 +256,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.5ab3ec.1: type) [from "types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] @@ -269,8 +276,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %X.ref as %I.type { // CHECK:STDOUT: %F.decl: %F.type.b63 = fn_decl @F.2 [concrete = constants.%F.d5f] { -// CHECK:STDOUT: %self.patt: %X = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %X = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.019 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.019 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %X = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%X.ref [concrete = constants.%X] @@ -303,6 +310,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] // CHECK:STDOUT: %Self: @F.1.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.209)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.4be)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -326,6 +334,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type => constants.%I.type.325 // CHECK:STDOUT: %Self => constants.%Self.209 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4be // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%InInterfaceArgs) { @@ -346,6 +355,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type => constants.%I.type.e45 // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type => constants.%X +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.019 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_impl_in_interface_args.carbon @@ -354,6 +364,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -362,10 +373,12 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %I.type.325: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.209: %I.type.325 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type.2ae: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.bb2: %F.type.2ae = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.209 [symbolic] +// CHECK:STDOUT: %pattern_type.4be: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.assoc_type.1e5: type = assoc_entity_type @I, @I(%T) [symbolic] // CHECK:STDOUT: %assoc0.429: %I.assoc_type.1e5 = assoc_entity element0, imports.%Main.import_ref.e54 [symbolic] // CHECK:STDOUT: %InInterfaceArgs: type = class_type @InInterfaceArgs [concrete] @@ -390,13 +403,13 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Main.X: type = import_ref Main//types, X, loaded [concrete = constants.%X] // CHECK:STDOUT: %Main.InInterfaceArgs: type = import_ref Main//impl_in_interface_args, InInterfaceArgs, loaded [concrete = constants.%InInterfaceArgs] // CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//types, loc7_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.acf = import_ref Main//types, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.acf = import_ref Main//types, inst70 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//types, loc4_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//types, inst26 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//types, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.474: @I.%I.assoc_type (%I.assoc_type.1e5) = import_ref Main//types, loc4_43, loaded [symbolic = @I.%assoc0 (constants.%assoc0.688)] // CHECK:STDOUT: %Main.F = import_ref Main//types, F, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//types, loc4_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.38e: @I.%I.type (%I.type.325) = import_ref Main//types, inst26 [no loc], loaded [symbolic = @I.%Self (constants.%Self.209)] +// CHECK:STDOUT: %Main.import_ref.38e: @I.%I.type (%I.type.325) = import_ref Main//types, inst27 [no loc], loaded [symbolic = @I.%Self (constants.%Self.209)] // CHECK:STDOUT: %Main.import_ref.e54: @I.%F.type (%F.type.2ae) = import_ref Main//types, loc4_43, loaded [symbolic = @I.%F (constants.%F.bb2)] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//impl_in_interface_args, loc5_24, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Main.import_ref.bf8 = import_ref Main//impl_in_interface_args, inst20 [no loc], unloaded @@ -415,8 +428,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %x.patt: %X = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %X = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.019 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.019 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %X = value_param call_param0 // CHECK:STDOUT: %X.ref: type = name_ref X, imports.%Main.X [concrete = constants.%X] @@ -426,7 +439,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.5ab3ec.1: type) [from "types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] @@ -482,6 +495,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] // CHECK:STDOUT: %Self: @F.1.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.209)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.4be)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -502,6 +516,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type => constants.%I.type.325 // CHECK:STDOUT: %Self => constants.%Self.209 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4be // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%InInterfaceArgs) { @@ -526,7 +541,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.23b: type = class_type @C, @C(%InClassArgs) [concrete] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] @@ -535,6 +551,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %F.type.2ae: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.bb2: %F.type.2ae = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.209 [symbolic] +// CHECK:STDOUT: %pattern_type.4be: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.assoc_type.1e5: type = assoc_entity_type @I, @I(%T) [symbolic] // CHECK:STDOUT: %assoc0.688: %I.assoc_type.1e5 = assoc_entity element0, imports.%Main.import_ref.479 [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] @@ -545,6 +562,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.assoc_type.2db: type = assoc_entity_type @I, @I(%X) [concrete] // CHECK:STDOUT: %assoc0.8c1: %I.assoc_type.2db = assoc_entity element0, imports.%Main.import_ref.479 [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.e06: type = pattern_type %C.23b [concrete] // CHECK:STDOUT: %F.type.fab: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.7ab: %F.type.fab = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type.45c = facet_value %C.23b, (%I.impl_witness) [concrete] @@ -556,16 +574,16 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Main.X: type = import_ref Main//types, X, loaded [concrete = constants.%X] // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//types, loc5_9, loaded [symbolic = @C.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//types, loc5_20, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//types, inst61 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//types, inst64 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//types, loc4_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//types, inst26 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//types, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.2bb = import_ref Main//types, loc4_43, unloaded // CHECK:STDOUT: %Main.F: @I.%F.type (%F.type.2ae) = import_ref Main//types, F, loaded [symbolic = @I.%F (constants.%F.bb2)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//types, loc4_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.38e: @I.%I.type (%I.type.325) = import_ref Main//types, inst26 [no loc], loaded [symbolic = @I.%Self (constants.%Self.209)] +// CHECK:STDOUT: %Main.import_ref.38e: @I.%I.type (%I.type.325) = import_ref Main//types, inst27 [no loc], loaded [symbolic = @I.%Self (constants.%Self.209)] // CHECK:STDOUT: %Main.import_ref.479 = import_ref Main//types, loc4_43, unloaded // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//types, loc7_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.acf = import_ref Main//types, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.acf = import_ref Main//types, inst70 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -591,7 +609,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.5ab3ec.2: type) [from "types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] @@ -611,8 +629,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %C as %I.type { // CHECK:STDOUT: %F.decl: %F.type.fab = fn_decl @F.2 [concrete = constants.%F.7ab] { -// CHECK:STDOUT: %self.patt: %C.23b = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.23b = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.e06 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.e06 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C.23b = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%C [concrete = constants.%C.23b] @@ -635,7 +653,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.5ab3ec.1: type) [from "types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -659,6 +677,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] // CHECK:STDOUT: %Self: @F.1.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.209)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.4be)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -694,6 +713,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type => constants.%I.type.325 // CHECK:STDOUT: %Self => constants.%Self.209 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4be // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%X) { @@ -714,6 +734,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type => constants.%I.type.45c // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type => constants.%C.23b +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e06 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_impl_in_class_args.carbon @@ -725,9 +746,11 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %InClassArgs: type = class_type @InClassArgs [concrete] // CHECK:STDOUT: %C.23b: type = class_type @C, @C(%InClassArgs) [concrete] +// CHECK:STDOUT: %pattern_type.e06: type = pattern_type %C.23b [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] @@ -737,6 +760,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %F.type.2ae: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.bb2: %F.type.2ae = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.209 [symbolic] +// CHECK:STDOUT: %pattern_type.4be: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.assoc_type.1e5: type = assoc_entity_type @I, @I(%T) [symbolic] // CHECK:STDOUT: %assoc0.429: %I.assoc_type.1e5 = assoc_entity element0, imports.%Main.import_ref.e54 [symbolic] // CHECK:STDOUT: %X: type = class_type @X [concrete] @@ -762,18 +786,18 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %Main.InClassArgs: type = import_ref Main//impl_in_class_args, InClassArgs, loaded [concrete = constants.%InClassArgs] // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//types, loc5_9, loaded [symbolic = @C.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//types, loc5_20, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//types, inst61 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//types, inst64 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//impl_in_class_args, loc5_20, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Main.import_ref.683 = import_ref Main//impl_in_class_args, inst20 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//types, loc4_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//types, inst26 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//types, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.474: @I.%I.assoc_type (%I.assoc_type.1e5) = import_ref Main//types, loc4_43, loaded [symbolic = @I.%assoc0 (constants.%assoc0.688)] // CHECK:STDOUT: %Main.F = import_ref Main//types, F, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//types, loc4_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.38e: @I.%I.type (%I.type.325) = import_ref Main//types, inst26 [no loc], loaded [symbolic = @I.%Self (constants.%Self.209)] +// CHECK:STDOUT: %Main.import_ref.38e: @I.%I.type (%I.type.325) = import_ref Main//types, inst27 [no loc], loaded [symbolic = @I.%Self (constants.%Self.209)] // CHECK:STDOUT: %Main.import_ref.e54: @I.%F.type (%F.type.2ae) = import_ref Main//types, loc4_43, loaded [symbolic = @I.%F (constants.%F.bb2)] // CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//types, loc7_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.acf = import_ref Main//types, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.acf = import_ref Main//types, inst70 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.a72: = import_ref Main//impl_in_class_args, loc7_29, loaded [concrete = constants.%I.impl_witness] // CHECK:STDOUT: %Main.import_ref.d6e: type = import_ref Main//impl_in_class_args, loc7_19, loaded [concrete = constants.%C.23b] // CHECK:STDOUT: %Main.import_ref.208: type = import_ref Main//impl_in_class_args, loc7_27, loaded [concrete = constants.%I.type.45c] @@ -789,8 +813,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %c.patt: %C.23b = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C.23b = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.e06 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.e06 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C.23b = value_param call_param0 // CHECK:STDOUT: %.loc6_22: type = splice_block %C [concrete = constants.%C.23b] { @@ -804,7 +828,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.5ab3ec.2: type) [from "types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] @@ -829,7 +853,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.5ab3ec.1: type) [from "types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -874,6 +898,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] // CHECK:STDOUT: %Self: @F.1.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.209)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.4be)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -906,6 +931,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type => constants.%I.type.325 // CHECK:STDOUT: %Self => constants.%Self.209 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4be // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%X) { diff --git a/toolchain/check/testdata/impl/lookup/transitive.carbon b/toolchain/check/testdata/impl/lookup/transitive.carbon index 3274044d4660..a1fdafbb4aae 100644 --- a/toolchain/check/testdata/impl/lookup/transitive.carbon +++ b/toolchain/check/testdata/impl/lookup/transitive.carbon @@ -49,6 +49,7 @@ fn Call() { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -74,8 +75,8 @@ fn Call() { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc4_26.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc4_26.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%Self.as_type.loc4_26.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_26.1: type = splice_block %.loc4_26.2 [symbolic = %Self.as_type.loc4_26.1 (constants.%Self.as_type)] { @@ -96,6 +97,7 @@ fn Call() { // CHECK:STDOUT: generic fn @F(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_26.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_26.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_26.1 [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc4_26.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -103,6 +105,7 @@ fn Call() { // CHECK:STDOUT: specific @F(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_26.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- c.carbon @@ -116,7 +119,9 @@ fn Call() { // CHECK:STDOUT: %F.type.cf0: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.bc6: %F.type.cf0 = struct_value () [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type.5d6: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.a2e: %F.type.5d6 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] @@ -160,8 +165,8 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %C.ref as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.5d6 = fn_decl @F.2 [concrete = constants.%F.a2e] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%C.ref [concrete = constants.%C] @@ -185,6 +190,7 @@ fn Call() { // CHECK:STDOUT: generic fn @F.1(imports.%Main.import_ref.5dd: %I.type) [from "i.carbon"] { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -197,11 +203,13 @@ fn Call() { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- get.carbon @@ -210,6 +218,7 @@ fn Call() { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %Get.type: type = fn_type @Get [concrete] // CHECK:STDOUT: %Get: %Get.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -233,8 +242,8 @@ fn Call() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Get.decl: %Get.type = fn_decl @Get [concrete = constants.%Get] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 @@ -268,6 +277,7 @@ fn Call() { // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, imports.%Main.import_ref.e03 [concrete] // CHECK:STDOUT: %F.type.cf0: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (imports.%Main.import_ref.742), @impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] @@ -345,6 +355,7 @@ fn Call() { // CHECK:STDOUT: generic fn @F.1(imports.%Main.import_ref.5dd: %I.type) [from "i.carbon"] { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -354,5 +365,6 @@ fn Call() { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/min_prelude/fail_impl_as_scope.carbon b/toolchain/check/testdata/impl/min_prelude/fail_impl_as_scope.carbon index cd1d2365ccbc..a21b78e535ba 100644 --- a/toolchain/check/testdata/impl/min_prelude/fail_impl_as_scope.carbon +++ b/toolchain/check/testdata/impl/min_prelude/fail_impl_as_scope.carbon @@ -229,6 +229,7 @@ class X { // CHECK:STDOUT: %Z.assoc_type: type = assoc_entity_type @Z [concrete] // CHECK:STDOUT: %assoc0: %Z.assoc_type = assoc_entity element0, @Z.%Zero.decl [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.a40: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Method.type.f12: type = fn_type @Method.1 [concrete] // CHECK:STDOUT: %Method.724: %Method.type.f12 = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %Z.assoc_type = assoc_entity element1, @Z.%Method.decl [concrete] @@ -241,6 +242,7 @@ class X { // CHECK:STDOUT: %Z.impl_witness: = impl_witness @Point.%Z.impl_witness_table [concrete] // CHECK:STDOUT: %Zero.type.e33: type = fn_type @Zero.3 [concrete] // CHECK:STDOUT: %Zero.dec: %Zero.type.e33 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.35b: type = pattern_type %Point [concrete] // CHECK:STDOUT: %Method.type.2ed: type = fn_type @Method.3 [concrete] // CHECK:STDOUT: %Method.2c2: %Method.type.2ed = struct_value () [concrete] // CHECK:STDOUT: %Z.facet: %Z.type = facet_value %Point, (%Z.impl_witness) [concrete] @@ -277,8 +279,8 @@ class X { // CHECK:STDOUT: %Zero.decl: %Zero.type.822 = fn_decl @Zero.1 [concrete = constants.%Zero.d14] {} {} // CHECK:STDOUT: %assoc0: %Z.assoc_type = assoc_entity element0, %Zero.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %Method.decl: %Method.type.f12 = fn_decl @Method.1 [concrete = constants.%Method.724] { -// CHECK:STDOUT: %self.patt: @Method.1.%Self.as_type.loc5_19.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Method.1.%Self.as_type.loc5_19.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @Method.1.%pattern_type (%pattern_type.a40) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Method.1.%pattern_type (%pattern_type.a40) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Method.1.%Self.as_type.loc5_19.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_19.1: type = splice_block %.loc5_19.2 [symbolic = %Self.as_type.loc5_19.1 (constants.%Self.as_type)] { @@ -313,8 +315,8 @@ class X { // CHECK:STDOUT: impl: %Self.ref as %Z.ref { // CHECK:STDOUT: %Zero.decl: @impl.6b5.%Zero.type (%Zero.type.db4) = fn_decl @Zero.2 [symbolic = @impl.6b5.%Zero (constants.%Zero.8fb)] {} {} // CHECK:STDOUT: %Method.decl: @impl.6b5.%Method.type (%Method.type.163) = fn_decl @Method.2 [symbolic = @impl.6b5.%Method (constants.%Method.84d)] { -// CHECK:STDOUT: %self.patt: @Method.2.%Self.as_type.loc13_21.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Method.2.%Self.as_type.loc13_21.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @Method.2.%pattern_type (%pattern_type.a40) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Method.2.%pattern_type (%pattern_type.a40) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Method.2.%Self.as_type.loc13_21.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc13_21.1: type = splice_block %.loc13_21.2 [symbolic = %Self.as_type.loc13_21.1 (constants.%Self.as_type)] { @@ -335,8 +337,8 @@ class X { // CHECK:STDOUT: impl @impl.c94: %Self.ref as %Z.ref { // CHECK:STDOUT: %Zero.decl: %Zero.type.e33 = fn_decl @Zero.3 [concrete = constants.%Zero.dec] {} {} // CHECK:STDOUT: %Method.decl: %Method.type.2ed = fn_decl @Method.3 [concrete = constants.%Method.2c2] { -// CHECK:STDOUT: %self.patt: %Point = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %Point = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.35b = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.35b = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %Point = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Point [concrete = constants.%Point] @@ -372,6 +374,7 @@ class X { // CHECK:STDOUT: generic fn @Method.1(@Z.%Self: %Z.type) { // CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_19.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_19.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_19.1 [symbolic = %pattern_type (constants.%pattern_type.a40)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Method.1.%Self.as_type.loc5_19.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -388,6 +391,7 @@ class X { // CHECK:STDOUT: generic fn @Method.2(@Z.%Self: %Z.type) { // CHECK:STDOUT: %Self: %Z.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc13_21.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc13_21.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc13_21.1 [symbolic = %pattern_type (constants.%pattern_type.a40)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc13_21.1 [symbolic = %require_complete (constants.%require_complete)] @@ -437,6 +441,7 @@ class X { // CHECK:STDOUT: specific @Method.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_19.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a40 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.6b5(constants.%Self) { @@ -453,6 +458,7 @@ class X { // CHECK:STDOUT: specific @Method.2(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc13_21.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a40 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.6b5(%Self) {} @@ -462,6 +468,7 @@ class X { // CHECK:STDOUT: specific @Method.1(constants.%Z.facet) { // CHECK:STDOUT: %Self => constants.%Z.facet // CHECK:STDOUT: %Self.as_type.loc5_19.1 => constants.%Point +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.35b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_impl_as_other_interface.carbon diff --git a/toolchain/check/testdata/impl/min_prelude/forward_decls.carbon b/toolchain/check/testdata/impl/min_prelude/forward_decls.carbon index c553997774cc..09718c8ceb7d 100644 --- a/toolchain/check/testdata/impl/min_prelude/forward_decls.carbon +++ b/toolchain/check/testdata/impl/min_prelude/forward_decls.carbon @@ -415,12 +415,15 @@ interface I { // CHECK:STDOUT: %assoc0: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl.f92 [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl.f92(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] @@ -440,10 +443,10 @@ interface I { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.f92.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.f92.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.f92.%T (constants.%T)] @@ -506,7 +509,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.f92(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl.f92(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -528,12 +531,14 @@ interface I { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -543,6 +548,7 @@ interface I { // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(constants.%T) { @@ -555,6 +561,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(type) { @@ -570,6 +577,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -686,6 +694,7 @@ interface I { // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %I.facet.880: %I.type = facet_value %C, (%I.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -724,7 +733,7 @@ interface I { // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_9.1: type = splice_block %impl.elem0 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] @@ -815,6 +824,7 @@ interface I { // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %I.facet.880: %I.type = facet_value %C, (%I.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -853,7 +863,7 @@ interface I { // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_16.1: type = splice_block %impl.elem0 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] @@ -1114,7 +1124,8 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.325: type = facet_type <@I, @I(%U)> [symbolic] @@ -1153,7 +1164,7 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %U.patt.loc3_13.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_13.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc3_13.1: %pattern_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_13.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc3_13.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc3_13.2 (constants.%U)] // CHECK:STDOUT: } @@ -1201,7 +1212,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%U.loc3_13.1: type) { // CHECK:STDOUT: %U.loc3_13.2: type = bind_symbolic_name U, 0 [symbolic = %U.loc3_13.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc3_13.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_13.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc3_13.2: %pattern_type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc3_13.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%U.loc3_13.2)> [symbolic = %I.type (constants.%I.type.325)] @@ -1280,12 +1291,14 @@ interface I { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] // CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.54e: type = class_type @C, @C(%T) [symbolic] // CHECK:STDOUT: %I.facet: %I.type = facet_value %D, (%I.impl_witness) [concrete] // CHECK:STDOUT: %C.8b1: type = class_type @C, @C(%I.facet) [concrete] +// CHECK:STDOUT: %pattern_type.da9: type = pattern_type %C.8b1 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] @@ -1315,14 +1328,14 @@ interface I { // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness] // CHECK:STDOUT: %C.decl.loc6: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc12: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %I.ref.loc6: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] // CHECK:STDOUT: %T.loc6_9.1: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc8: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.patt: %C.8b1 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %C.8b1 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.da9 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.da9 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc8: %C.8b1 = value_param call_param0 // CHECK:STDOUT: %.loc8_12.1: type = splice_block %C.loc8 [concrete = constants.%C.8b1] { @@ -1340,14 +1353,14 @@ interface I { // CHECK:STDOUT: %I.ref.loc11: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl.loc12: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc12: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %I.ref.loc12: type = name_ref I, file.%I.decl.loc3 [concrete = constants.%I.type] // CHECK:STDOUT: %T.loc12: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl.loc14: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.patt: %C.8b1 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %C.8b1 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.da9 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.da9 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param.loc14: %C.8b1 = value_param call_param0 // CHECK:STDOUT: %.loc14_12.1: type = splice_block %C.loc14 [concrete = constants.%C.8b1] { @@ -1385,7 +1398,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc6_9.1: %I.type) { // CHECK:STDOUT: %T.loc6_9.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1428,12 +1441,15 @@ interface I { // CHECK:STDOUT: %assoc0: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl.f92 [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl.f92(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] @@ -1454,10 +1470,10 @@ interface I { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.f92.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.f92.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.f92.%T (constants.%T)] @@ -1516,7 +1532,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.f92(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl.f92(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1535,12 +1551,14 @@ interface I { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1550,6 +1568,7 @@ interface I { // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(constants.%T) { @@ -1562,6 +1581,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(type) { @@ -1577,6 +1597,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -1701,11 +1722,13 @@ interface I { // CHECK:STDOUT: constants { // CHECK:STDOUT: %X.type: type = facet_type <@X> [concrete] // CHECK:STDOUT: %U: %X.type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %X.type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.08c: type = pattern_type %X.type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.08c = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic] +// CHECK:STDOUT: %pattern_type.331: type = pattern_type %U.as_type [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -1714,6 +1737,7 @@ interface I { // CHECK:STDOUT: %Self.e5e: %X.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %X.facet: %X.type = facet_value %C, (%X.impl_witness) [concrete] @@ -1743,15 +1767,15 @@ interface I { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %X.decl.loc3: type = interface_decl @X [concrete = constants.%X.type] {} {} // CHECK:STDOUT: %F.decl.loc6: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %U.patt.loc34: %X.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc34: %pattern_type.08c = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref.loc6: type = name_ref X, file.%X.decl.loc3 [concrete = constants.%X.type] // CHECK:STDOUT: %U.loc6_6.1: %X.type = bind_symbolic_name U, 0 [symbolic = %U.loc6_6.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl.loc7: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %U.patt.loc35: %X.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] -// CHECK:STDOUT: %u.patt: @G.%U.as_type.loc7_16.2 (%U.as_type) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @G.%U.as_type.loc7_16.2 (%U.as_type) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc35: %pattern_type.08c = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] +// CHECK:STDOUT: %u.patt: @G.%pattern_type (%pattern_type.331) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @G.%pattern_type (%pattern_type.331) = value_param_pattern %u.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref.loc7: type = name_ref X, file.%X.decl.loc3 [concrete = constants.%X.type] // CHECK:STDOUT: %U.loc7_6.1: %X.type = bind_symbolic_name U, 0 [symbolic = %U.loc7_6.2 (constants.%U)] @@ -1774,8 +1798,8 @@ interface I { // CHECK:STDOUT: %X.decl.loc16: type = interface_decl @X [concrete = constants.%X.type] {} {} // CHECK:STDOUT: %C.decl.loc23: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type.c48 = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc25: type = name_ref C, file.%C.decl.loc9 [concrete = constants.%C] @@ -1783,15 +1807,15 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: %Y.decl.loc33: type = interface_decl @Y [concrete = constants.%Y.type] {} {} // CHECK:STDOUT: %F.decl.loc34: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %U.patt.loc34: %X.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc34: %pattern_type.08c = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref.loc34: type = name_ref X, file.%X.decl.loc3 [concrete = constants.%X.type] // CHECK:STDOUT: %U.loc34: %X.type = bind_symbolic_name U, 0 [symbolic = %U.loc6_6.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl.loc35: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %U.patt.loc35: %X.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] -// CHECK:STDOUT: %u.patt: @G.%U.as_type.loc7_16.2 (%U.as_type) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @G.%U.as_type.loc7_16.2 (%U.as_type) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc35: %pattern_type.08c = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] +// CHECK:STDOUT: %u.patt: @G.%pattern_type (%pattern_type.331) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @G.%pattern_type (%pattern_type.331) = value_param_pattern %u.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref.loc35: type = name_ref X, file.%X.decl.loc3 [concrete = constants.%X.type] // CHECK:STDOUT: %U.loc35: %X.type = bind_symbolic_name U, 0 [symbolic = %U.loc7_6.2 (constants.%U)] @@ -1856,7 +1880,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%U.loc6_6.1: %X.type) { // CHECK:STDOUT: %U.loc6_6.2: %X.type = bind_symbolic_name U, 0 [symbolic = %U.loc6_6.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc6: %X.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc6: %pattern_type.08c = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1868,8 +1892,9 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%U.loc7_6.1: %X.type) { // CHECK:STDOUT: %U.loc7_6.2: %X.type = bind_symbolic_name U, 0 [symbolic = %U.loc7_6.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc7: %X.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc7: %pattern_type.08c = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc7 (constants.%U.patt)] // CHECK:STDOUT: %U.as_type.loc7_16.2: type = facet_access_type %U.loc7_6.2 [symbolic = %U.as_type.loc7_16.2 (constants.%U.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U.as_type.loc7_16.2 [symbolic = %pattern_type (constants.%pattern_type.331)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %U.as_type.loc7_16.2 [symbolic = %require_complete (constants.%require_complete)] @@ -1908,6 +1933,7 @@ interface I { // CHECK:STDOUT: %U.loc7_6.2 => constants.%U // CHECK:STDOUT: %U.patt.loc7 => constants.%U.patt // CHECK:STDOUT: %U.as_type.loc7_16.2 => constants.%U.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.331 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%X.facet) { @@ -1921,6 +1947,7 @@ interface I { // CHECK:STDOUT: %U.loc7_6.2 => constants.%X.facet // CHECK:STDOUT: %U.patt.loc7 => constants.%U.patt // CHECK:STDOUT: %U.as_type.loc7_16.2 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type @@ -2189,12 +2216,15 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -2204,6 +2234,7 @@ interface I { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -2211,13 +2242,15 @@ interface I { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Self.e44: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.560: type = facet_access_type %Self.e44 [symbolic] +// CHECK:STDOUT: %pattern_type.a80: type = pattern_type %Self.as_type.560 [symbolic] // CHECK:STDOUT: %Op.type.613: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d98: %Op.type.613 = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.assoc_type: type = assoc_entity_type @BitAnd [concrete] // CHECK:STDOUT: %assoc0.220: %BitAnd.assoc_type = assoc_entity element0, @BitAnd.%Op.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Op.type.28d: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.902: %Op.type.28d = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -2231,18 +2264,18 @@ interface I { // CHECK:STDOUT: .BitAnd = %BitAnd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc9_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc9_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc13_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc13_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %BitAnd.decl: type = interface_decl @BitAnd [concrete = constants.%BitAnd.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc21_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc21_14.1 [symbolic = %T.loc21_14.2 (constants.%T)] // CHECK:STDOUT: %BitAnd.ref: type = name_ref BitAnd, file.%BitAnd.decl [concrete = constants.%BitAnd.type] @@ -2254,7 +2287,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc9_14.1: type) { // CHECK:STDOUT: %Dest.loc9_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc9_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc9_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -2267,10 +2300,10 @@ interface I { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc9_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -2296,7 +2329,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc13_22.1: type) { // CHECK:STDOUT: %Dest.loc13_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc13_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc13_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -2309,10 +2342,10 @@ interface I { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc13_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -2339,12 +2372,12 @@ interface I { // CHECK:STDOUT: interface @BitAnd { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.e44] // CHECK:STDOUT: %Op.decl: %Op.type.613 = fn_decl @Op.1 [concrete = constants.%Op.d98] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.a80) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18_37: %BitAnd.type = name_ref Self, @BitAnd.%Self [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_37: type = facet_access_type %Self.ref.loc18_37 [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] @@ -2376,7 +2409,7 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc21_14.1: type) { // CHECK:STDOUT: %T.loc21_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T.loc21_14.2) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2386,12 +2419,12 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %BitAnd.ref { // CHECK:STDOUT: %Op.decl: @impl.%Op.type (%Op.type.28d) = fn_decl @Op.2 [symbolic = @impl.%Op (constants.%Op.902)] { -// CHECK:STDOUT: %self.patt: @Op.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.2.%T (%T) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.2.%T (%T) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.2.%T (%T) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.2.%T (%T) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc22_37: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Op.2.%T (%T) = value_param call_param0 @@ -2415,6 +2448,8 @@ interface I { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc10_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc10_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc10_14: type = pattern_type %Self.as_type.loc10_20.1 [symbolic = %pattern_type.loc10_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc10_28: type = pattern_type %Dest [symbolic = %pattern_type.loc10_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -2424,6 +2459,8 @@ interface I { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -2431,12 +2468,14 @@ interface I { // CHECK:STDOUT: generic fn @Op.1(@BitAnd.%Self: %BitAnd.type) { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_15.1 [symbolic = %pattern_type (constants.%pattern_type.a80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560), %other.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560)) -> @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(@impl.%T.loc21_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2453,6 +2492,8 @@ interface I { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc10_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc10_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc10_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -2469,6 +2510,8 @@ interface I { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} @@ -2478,6 +2521,7 @@ interface I { // CHECK:STDOUT: specific @Op.1(constants.%Self.e44) { // CHECK:STDOUT: %Self => constants.%Self.e44 // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%Self.as_type.560 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -2490,10 +2534,12 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%BitAnd.facet) { // CHECK:STDOUT: %Self => constants.%BitAnd.facet // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/min_prelude/generic_redeclaration.carbon b/toolchain/check/testdata/impl/min_prelude/generic_redeclaration.carbon index 6e7ca3099179..5aaf2cea98e3 100644 --- a/toolchain/check/testdata/impl/min_prelude/generic_redeclaration.carbon +++ b/toolchain/check/testdata/impl/min_prelude/generic_redeclaration.carbon @@ -106,19 +106,23 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %L.type: type = facet_type <@L> [concrete] // CHECK:STDOUT: %Self.1d2: %L.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T.826: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.3ad: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt.132: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.b70: type = facet_access_type %T.826 [symbolic] // CHECK:STDOUT: %Interface.impl_witness.a14: = impl_witness file.%Interface.impl_witness_table.loc11, @impl.c3d(%T.826) [symbolic] // CHECK:STDOUT: %T.ccd: %J.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.371: %J.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.28e: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %T.patt.5e4: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.3df: type = facet_access_type %T.ccd [symbolic] // CHECK:STDOUT: %Interface.impl_witness.608: = impl_witness file.%Interface.impl_witness_table.loc12, @impl.793(%T.ccd) [symbolic] // CHECK:STDOUT: %T.09f: %K.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.036: %K.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.4a6: type = pattern_type %K.type [concrete] +// CHECK:STDOUT: %T.patt.273: %pattern_type.4a6 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.037: type = facet_access_type %T.09f [symbolic] // CHECK:STDOUT: %Interface.impl_witness.b9e: = impl_witness file.%Interface.impl_witness_table.loc13, @impl.c93(%T.09f) [symbolic] // CHECK:STDOUT: %T.1d2: %L.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.29d: %L.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.86b: type = pattern_type %L.type [concrete] +// CHECK:STDOUT: %T.patt.e84: %pattern_type.86b = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.0ed: type = facet_access_type %T.1d2 [symbolic] // CHECK:STDOUT: %Interface.impl_witness.e9d: = impl_witness file.%Interface.impl_witness_table.loc14, @impl.9e6(%T.1d2) [symbolic] // CHECK:STDOUT: } @@ -145,7 +149,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %K.decl: type = interface_decl @K [concrete = constants.%K.type] {} {} // CHECK:STDOUT: %L.decl: type = interface_decl @L [concrete = constants.%L.type] {} {} // CHECK:STDOUT: impl_decl @impl.c3d [concrete] { -// CHECK:STDOUT: %T.patt.loc11_14.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt.3ad)] +// CHECK:STDOUT: %T.patt.loc11_14.1: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt.132)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc11: %I.type = name_ref T, %T.loc11_14.1 [symbolic = %T.loc11_14.2 (constants.%T.826)] // CHECK:STDOUT: %T.as_type.loc11_21.1: type = facet_access_type %T.ref.loc11 [symbolic = %T.as_type.loc11_21.2 (constants.%T.as_type.b70)] @@ -157,7 +161,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %Interface.impl_witness_table.loc11 = impl_witness_table (), @impl.c3d [concrete] // CHECK:STDOUT: %Interface.impl_witness.loc11: = impl_witness %Interface.impl_witness_table.loc11, @impl.c3d(constants.%T.826) [symbolic = @impl.c3d.%Interface.impl_witness (constants.%Interface.impl_witness.a14)] // CHECK:STDOUT: impl_decl @impl.793 [concrete] { -// CHECK:STDOUT: %T.patt.loc12_14.1: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.371)] +// CHECK:STDOUT: %T.patt.loc12_14.1: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.5e4)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc12: %J.type = name_ref T, %T.loc12_14.1 [symbolic = %T.loc12_14.2 (constants.%T.ccd)] // CHECK:STDOUT: %T.as_type.loc12_21.1: type = facet_access_type %T.ref.loc12 [symbolic = %T.as_type.loc12_21.2 (constants.%T.as_type.3df)] @@ -169,7 +173,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %Interface.impl_witness_table.loc12 = impl_witness_table (), @impl.793 [concrete] // CHECK:STDOUT: %Interface.impl_witness.loc12: = impl_witness %Interface.impl_witness_table.loc12, @impl.793(constants.%T.ccd) [symbolic = @impl.793.%Interface.impl_witness (constants.%Interface.impl_witness.608)] // CHECK:STDOUT: impl_decl @impl.c93 [concrete] { -// CHECK:STDOUT: %T.patt.loc13_14.1: %K.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_14.2 (constants.%T.patt.036)] +// CHECK:STDOUT: %T.patt.loc13_14.1: %pattern_type.4a6 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_14.2 (constants.%T.patt.273)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc13: %K.type = name_ref T, %T.loc13_14.1 [symbolic = %T.loc13_14.2 (constants.%T.09f)] // CHECK:STDOUT: %T.as_type.loc13_21.1: type = facet_access_type %T.ref.loc13 [symbolic = %T.as_type.loc13_21.2 (constants.%T.as_type.037)] @@ -181,7 +185,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %Interface.impl_witness_table.loc13 = impl_witness_table (), @impl.c93 [concrete] // CHECK:STDOUT: %Interface.impl_witness.loc13: = impl_witness %Interface.impl_witness_table.loc13, @impl.c93(constants.%T.09f) [symbolic = @impl.c93.%Interface.impl_witness (constants.%Interface.impl_witness.b9e)] // CHECK:STDOUT: impl_decl @impl.9e6 [concrete] { -// CHECK:STDOUT: %T.patt.loc14_14.1: %L.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt.29d)] +// CHECK:STDOUT: %T.patt.loc14_14.1: %pattern_type.86b = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt.e84)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc14: %L.type = name_ref T, %T.loc14_14.1 [symbolic = %T.loc14_14.2 (constants.%T.1d2)] // CHECK:STDOUT: %T.as_type.loc14_21.1: type = facet_access_type %T.ref.loc14 [symbolic = %T.as_type.loc14_21.2 (constants.%T.as_type.0ed)] @@ -193,7 +197,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %Interface.impl_witness_table.loc14 = impl_witness_table (), @impl.9e6 [concrete] // CHECK:STDOUT: %Interface.impl_witness.loc14: = impl_witness %Interface.impl_witness_table.loc14, @impl.9e6(constants.%T.1d2) [symbolic = @impl.9e6.%Interface.impl_witness (constants.%Interface.impl_witness.e9d)] // CHECK:STDOUT: impl_decl @impl.c3d [concrete] { -// CHECK:STDOUT: %T.patt.loc11_14.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt.3ad)] +// CHECK:STDOUT: %T.patt.loc11_14.1: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt.132)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc18: %I.type = name_ref T, %T.loc18 [symbolic = %T.loc11_14.2 (constants.%T.826)] // CHECK:STDOUT: %T.as_type.loc18: type = facet_access_type %T.ref.loc18 [symbolic = %T.as_type.loc11_21.2 (constants.%T.as_type.b70)] @@ -203,7 +207,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc18: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc11_14.2 (constants.%T.826)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.793 [concrete] { -// CHECK:STDOUT: %T.patt.loc12_14.1: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.371)] +// CHECK:STDOUT: %T.patt.loc12_14.1: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.5e4)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc19: %J.type = name_ref T, %T.loc19 [symbolic = %T.loc12_14.2 (constants.%T.ccd)] // CHECK:STDOUT: %T.as_type.loc19: type = facet_access_type %T.ref.loc19 [symbolic = %T.as_type.loc12_21.2 (constants.%T.as_type.3df)] @@ -213,7 +217,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc19: %J.type = bind_symbolic_name T, 0 [symbolic = %T.loc12_14.2 (constants.%T.ccd)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.c93 [concrete] { -// CHECK:STDOUT: %T.patt.loc13_14.1: %K.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_14.2 (constants.%T.patt.036)] +// CHECK:STDOUT: %T.patt.loc13_14.1: %pattern_type.4a6 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_14.2 (constants.%T.patt.273)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc20: %K.type = name_ref T, %T.loc20 [symbolic = %T.loc13_14.2 (constants.%T.09f)] // CHECK:STDOUT: %T.as_type.loc20: type = facet_access_type %T.ref.loc20 [symbolic = %T.as_type.loc13_21.2 (constants.%T.as_type.037)] @@ -223,7 +227,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %T.loc20: %K.type = bind_symbolic_name T, 0 [symbolic = %T.loc13_14.2 (constants.%T.09f)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.9e6 [concrete] { -// CHECK:STDOUT: %T.patt.loc14_14.1: %L.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt.29d)] +// CHECK:STDOUT: %T.patt.loc14_14.1: %pattern_type.86b = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt.e84)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc21: %L.type = name_ref T, %T.loc21 [symbolic = %T.loc14_14.2 (constants.%T.1d2)] // CHECK:STDOUT: %T.as_type.loc21: type = facet_access_type %T.ref.loc21 [symbolic = %T.as_type.loc14_21.2 (constants.%T.as_type.0ed)] @@ -276,7 +280,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.c3d(%T.loc11_14.1: %I.type) { // CHECK:STDOUT: %T.loc11_14.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc11_14.2 (constants.%T.826)] -// CHECK:STDOUT: %T.patt.loc11_14.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt.3ad)] +// CHECK:STDOUT: %T.patt.loc11_14.2: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt.132)] // CHECK:STDOUT: %T.as_type.loc11_21.2: type = facet_access_type %T.loc11_14.2 [symbolic = %T.as_type.loc11_21.2 (constants.%T.as_type.b70)] // CHECK:STDOUT: %Interface.impl_witness: = impl_witness file.%Interface.impl_witness_table.loc11, @impl.c3d(%T.loc11_14.2) [symbolic = %Interface.impl_witness (constants.%Interface.impl_witness.a14)] // CHECK:STDOUT: @@ -290,7 +294,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.793(%T.loc12_14.1: %J.type) { // CHECK:STDOUT: %T.loc12_14.2: %J.type = bind_symbolic_name T, 0 [symbolic = %T.loc12_14.2 (constants.%T.ccd)] -// CHECK:STDOUT: %T.patt.loc12_14.2: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.371)] +// CHECK:STDOUT: %T.patt.loc12_14.2: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.5e4)] // CHECK:STDOUT: %T.as_type.loc12_21.2: type = facet_access_type %T.loc12_14.2 [symbolic = %T.as_type.loc12_21.2 (constants.%T.as_type.3df)] // CHECK:STDOUT: %Interface.impl_witness: = impl_witness file.%Interface.impl_witness_table.loc12, @impl.793(%T.loc12_14.2) [symbolic = %Interface.impl_witness (constants.%Interface.impl_witness.608)] // CHECK:STDOUT: @@ -304,7 +308,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.c93(%T.loc13_14.1: %K.type) { // CHECK:STDOUT: %T.loc13_14.2: %K.type = bind_symbolic_name T, 0 [symbolic = %T.loc13_14.2 (constants.%T.09f)] -// CHECK:STDOUT: %T.patt.loc13_14.2: %K.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_14.2 (constants.%T.patt.036)] +// CHECK:STDOUT: %T.patt.loc13_14.2: %pattern_type.4a6 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_14.2 (constants.%T.patt.273)] // CHECK:STDOUT: %T.as_type.loc13_21.2: type = facet_access_type %T.loc13_14.2 [symbolic = %T.as_type.loc13_21.2 (constants.%T.as_type.037)] // CHECK:STDOUT: %Interface.impl_witness: = impl_witness file.%Interface.impl_witness_table.loc13, @impl.c93(%T.loc13_14.2) [symbolic = %Interface.impl_witness (constants.%Interface.impl_witness.b9e)] // CHECK:STDOUT: @@ -318,7 +322,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.9e6(%T.loc14_14.1: %L.type) { // CHECK:STDOUT: %T.loc14_14.2: %L.type = bind_symbolic_name T, 0 [symbolic = %T.loc14_14.2 (constants.%T.1d2)] -// CHECK:STDOUT: %T.patt.loc14_14.2: %L.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt.29d)] +// CHECK:STDOUT: %T.patt.loc14_14.2: %pattern_type.86b = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt.e84)] // CHECK:STDOUT: %T.as_type.loc14_21.2: type = facet_access_type %T.loc14_14.2 [symbolic = %T.as_type.loc14_21.2 (constants.%T.as_type.0ed)] // CHECK:STDOUT: %Interface.impl_witness: = impl_witness file.%Interface.impl_witness_table.loc14, @impl.9e6(%T.loc14_14.2) [symbolic = %Interface.impl_witness (constants.%Interface.impl_witness.e9d)] // CHECK:STDOUT: @@ -332,7 +336,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.c3d(constants.%T.826) { // CHECK:STDOUT: %T.loc11_14.2 => constants.%T.826 -// CHECK:STDOUT: %T.patt.loc11_14.2 => constants.%T.patt.3ad +// CHECK:STDOUT: %T.patt.loc11_14.2 => constants.%T.patt.132 // CHECK:STDOUT: %T.as_type.loc11_21.2 => constants.%T.as_type.b70 // CHECK:STDOUT: %Interface.impl_witness => constants.%Interface.impl_witness.a14 // CHECK:STDOUT: } @@ -341,7 +345,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.793(constants.%T.ccd) { // CHECK:STDOUT: %T.loc12_14.2 => constants.%T.ccd -// CHECK:STDOUT: %T.patt.loc12_14.2 => constants.%T.patt.371 +// CHECK:STDOUT: %T.patt.loc12_14.2 => constants.%T.patt.5e4 // CHECK:STDOUT: %T.as_type.loc12_21.2 => constants.%T.as_type.3df // CHECK:STDOUT: %Interface.impl_witness => constants.%Interface.impl_witness.608 // CHECK:STDOUT: } @@ -350,7 +354,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.c93(constants.%T.09f) { // CHECK:STDOUT: %T.loc13_14.2 => constants.%T.09f -// CHECK:STDOUT: %T.patt.loc13_14.2 => constants.%T.patt.036 +// CHECK:STDOUT: %T.patt.loc13_14.2 => constants.%T.patt.273 // CHECK:STDOUT: %T.as_type.loc13_21.2 => constants.%T.as_type.037 // CHECK:STDOUT: %Interface.impl_witness => constants.%Interface.impl_witness.b9e // CHECK:STDOUT: } @@ -359,7 +363,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.9e6(constants.%T.1d2) { // CHECK:STDOUT: %T.loc14_14.2 => constants.%T.1d2 -// CHECK:STDOUT: %T.patt.loc14_14.2 => constants.%T.patt.29d +// CHECK:STDOUT: %T.patt.loc14_14.2 => constants.%T.patt.e84 // CHECK:STDOUT: %T.as_type.loc14_21.2 => constants.%T.as_type.0ed // CHECK:STDOUT: %Interface.impl_witness => constants.%Interface.impl_witness.e9d // CHECK:STDOUT: } @@ -374,7 +378,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %J.type: type = facet_type <@J> [concrete] // CHECK:STDOUT: %Self.ccd: %J.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %J.impl_witness.a529f4.1: = impl_witness file.%J.impl_witness_table.loc7, @impl.bfd509.1(%T) [symbolic] // CHECK:STDOUT: %J.impl_witness.a529f4.2: = impl_witness file.%J.impl_witness_table.loc15, @impl.bfd509.2(%T) [symbolic] @@ -396,7 +401,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: impl_decl @impl.bfd509.1 [concrete] { -// CHECK:STDOUT: %T.patt.loc7_14.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %I.type = name_ref T, %T.loc7_14.1 [symbolic = %T.loc7_14.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc7_21.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc7_21.2 (constants.%T.as_type)] @@ -408,7 +413,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %J.impl_witness_table.loc7 = impl_witness_table (), @impl.bfd509.1 [concrete] // CHECK:STDOUT: %J.impl_witness.loc7: = impl_witness %J.impl_witness_table.loc7, @impl.bfd509.1(constants.%T) [symbolic = @impl.bfd509.1.%J.impl_witness (constants.%J.impl_witness.a529f4.1)] // CHECK:STDOUT: impl_decl @impl.bfd509.2 [concrete] { -// CHECK:STDOUT: %T.patt.loc15_14.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: %I.type = name_ref T, %T.loc15_14.1 [symbolic = %T.loc15_14.2 (constants.%T)] // CHECK:STDOUT: %T.as_type.loc15_21.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc15_21.2 (constants.%T.as_type)] @@ -439,7 +444,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.bfd509.1(%T.loc7_14.1: %I.type) { // CHECK:STDOUT: %T.loc7_14.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc7_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc7_14.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc7_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc7_21.2: type = facet_access_type %T.loc7_14.2 [symbolic = %T.as_type.loc7_21.2 (constants.%T.as_type)] // CHECK:STDOUT: %J.impl_witness: = impl_witness file.%J.impl_witness_table.loc7, @impl.bfd509.1(%T.loc7_14.2) [symbolic = %J.impl_witness (constants.%J.impl_witness.a529f4.1)] // CHECK:STDOUT: @@ -453,7 +458,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.bfd509.2(%T.loc15_14.1: %I.type) { // CHECK:STDOUT: %T.loc15_14.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc15_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc15_14.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc15_21.2: type = facet_access_type %T.loc15_14.2 [symbolic = %T.as_type.loc15_21.2 (constants.%T.as_type)] // CHECK:STDOUT: %J.impl_witness: = impl_witness file.%J.impl_witness_table.loc15, @impl.bfd509.2(%T.loc15_14.2) [symbolic = %J.impl_witness (constants.%J.impl_witness.a529f4.2)] // CHECK:STDOUT: @@ -557,7 +562,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.impl_witness.dad390.1: = impl_witness file.%I.impl_witness_table.loc4, @impl.2caff2.1(%T) [symbolic] // CHECK:STDOUT: %A.type: type = fn_type @A, @impl.2caff2.1(%T) [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] @@ -565,6 +571,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %I.impl_witness.dad390.2: = impl_witness file.%I.impl_witness_table.loc15, @impl.2caff2.2(%T) [symbolic] // CHECK:STDOUT: %B.type: type = fn_type @B, @impl.2caff2.2(%T) [symbolic] // CHECK:STDOUT: %B: %B.type = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %C.type: type = fn_type @C, @impl.2caff2.2(%T) [symbolic] // CHECK:STDOUT: %C: %C.type = struct_value () [symbolic] // CHECK:STDOUT: %D.type: type = fn_type @D, @impl.2caff2.2(%T) [symbolic] @@ -587,7 +594,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: impl_decl @impl.2caff2.1 [concrete] { -// CHECK:STDOUT: %T.patt.loc4_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_14.1 [symbolic = %T.loc4_14.2 (constants.%T)] // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -596,7 +603,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %I.impl_witness_table.loc4 = impl_witness_table (), @impl.2caff2.1 [concrete] // CHECK:STDOUT: %I.impl_witness.loc4: = impl_witness %I.impl_witness_table.loc4, @impl.2caff2.1(constants.%T) [symbolic = @impl.2caff2.1.%I.impl_witness (constants.%I.impl_witness.dad390.1)] // CHECK:STDOUT: impl_decl @impl.2caff2.2 [concrete] { -// CHECK:STDOUT: %T.patt.loc15_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc15_14.1 [symbolic = %T.loc15_14.2 (constants.%T)] // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -616,7 +623,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.2caff2.1(%T.loc4_14.1: type) { // CHECK:STDOUT: %T.loc4_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table.loc4, @impl.2caff2.1(%T.loc4_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.dad390.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -634,7 +641,7 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.2caff2.2(%T.loc15_14.1: type) { // CHECK:STDOUT: %T.loc15_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc15_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_14.2 (constants.%T.patt)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table.loc15, @impl.2caff2.2(%T.loc15_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.dad390.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -648,8 +655,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: impl: %T.ref as %I.ref { // CHECK:STDOUT: %B.decl: @impl.2caff2.2.%B.type (%B.type) = fn_decl @B [symbolic = @impl.2caff2.2.%B (constants.%B)] {} {} // CHECK:STDOUT: %C.decl: @impl.2caff2.2.%C.type (%C.type) = fn_decl @C [symbolic = @impl.2caff2.2.%C (constants.%C)] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc19_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc19_14.2: type = converted %.loc19_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -657,8 +664,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: @impl.2caff2.2.%D.type (%D.type) = fn_decl @D [symbolic = @impl.2caff2.2.%D (constants.%D)] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc20_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc20_14.2: type = converted %.loc20_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/impl/min_prelude/import_self.carbon b/toolchain/check/testdata/impl/min_prelude/import_self.carbon index 00d3e234a348..5057a6d2d779 100644 --- a/toolchain/check/testdata/impl/min_prelude/import_self.carbon +++ b/toolchain/check/testdata/impl/min_prelude/import_self.carbon @@ -39,6 +39,7 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: %Add.type: type = facet_type <@Add> [concrete] // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Op.type: type = fn_type @Op [concrete] // CHECK:STDOUT: %Op: %Op.type = struct_value () [concrete] // CHECK:STDOUT: %Add.assoc_type: type = assoc_entity_type @Add [concrete] @@ -63,12 +64,12 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: interface @Add { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Op.decl: %Op.type = fn_decl @Op [concrete = constants.%Op] { -// CHECK:STDOUT: %self.patt: @Op.%Self.as_type.loc5_15.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.%Self.as_type.loc5_15.1 (%Self.as_type) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.%Self.as_type.loc5_15.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.%Self.as_type.loc5_15.1 (%Self.as_type) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.%pattern_type (%pattern_type) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.%pattern_type (%pattern_type) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.%pattern_type (%pattern_type) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.%pattern_type (%pattern_type) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.%pattern_type (%pattern_type) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc5_37: %Add.type = name_ref Self, @Add.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_37: type = facet_access_type %Self.ref.loc5_37 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] @@ -101,6 +102,7 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: generic fn @Op(@Add.%Self: %Add.type) { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_15.1 [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.%Self.as_type.loc5_15.1 (%Self.as_type), %other.param: @Op.%Self.as_type.loc5_15.1 (%Self.as_type)) -> @Op.%Self.as_type.loc5_15.1 (%Self.as_type); // CHECK:STDOUT: } @@ -108,6 +110,7 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: specific @Op(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon @@ -119,7 +122,9 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: %Op.type.31b: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d59: %Op.type.31b = struct_value () [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Add.impl_witness: = impl_witness file.%Add.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Op.type.adf: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.489: %Op.type.adf = struct_value () [concrete] // CHECK:STDOUT: %Add.facet: %Add.type = facet_value %empty_tuple.type, (%Add.impl_witness) [concrete] @@ -158,12 +163,12 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: %Add.impl_witness_table = impl_witness_table (@impl.%Op.decl), @impl [concrete] // CHECK:STDOUT: %Add.impl_witness: = impl_witness %Add.impl_witness_table [concrete = constants.%Add.impl_witness] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %y.patt: %empty_tuple.type = binding_pattern y -// CHECK:STDOUT: %y.param_patt: %empty_tuple.type = value_param_pattern %y.patt, call_param1 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = binding_pattern y +// CHECK:STDOUT: %y.param_patt: %pattern_type.cb1 = value_param_pattern %y.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_24.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -193,12 +198,12 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %.loc6_7.2 as %Add.ref { // CHECK:STDOUT: %Op.decl: %Op.type.adf = fn_decl @Op.2 [concrete = constants.%Op.489] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %empty_tuple.type = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %empty_tuple.type = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.cb1 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.cb1 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc7_37: type = name_ref Self, @impl.%.loc6_7.2 [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %self.param: %empty_tuple.type = value_param call_param0 @@ -219,6 +224,7 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: generic fn @Op.1(imports.%Main.import_ref.e5e: %Add.type) [from "a.carbon"] { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.8f9)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -250,11 +256,13 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: specific @Op.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8f9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%Add.facet) { // CHECK:STDOUT: %Self => constants.%Add.facet // CHECK:STDOUT: %Self.as_type => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- include_files/destroy.carbon diff --git a/toolchain/check/testdata/impl/min_prelude/interface_args.carbon b/toolchain/check/testdata/impl/min_prelude/interface_args.carbon index 671a39851a71..03cf67ae3ecc 100644 --- a/toolchain/check/testdata/impl/min_prelude/interface_args.carbon +++ b/toolchain/check/testdata/impl/min_prelude/interface_args.carbon @@ -110,12 +110,15 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.96f: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.96f = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert: %Convert.type = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -127,7 +130,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc3_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc3_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -135,7 +138,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc3_22.1: type) { // CHECK:STDOUT: %Dest.loc3_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc3_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc3_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -148,10 +151,10 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type) = fn_decl @Convert [symbolic = @ImplicitAs.%Convert (constants.%Convert)] { -// CHECK:STDOUT: %self.patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc3_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param call_param0 @@ -180,6 +183,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.as_type.loc4_20.1 [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc4_28: type = pattern_type %Dest [symbolic = %pattern_type.loc4_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type)) -> @Convert.%Dest (%Dest); // CHECK:STDOUT: } @@ -194,6 +199,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_20.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.%Dest) {} @@ -204,13 +211,15 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Action.type.29c: type = generic_interface_type @Action [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Action.generic: %Action.type.29c = struct_value () [concrete] // CHECK:STDOUT: %Action.type.cca: type = facet_type <@Action, @Action(%T)> [symbolic] // CHECK:STDOUT: %Self.e98: %Action.type.cca = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.e98 [symbolic] +// CHECK:STDOUT: %pattern_type.8db: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Op.type.036: type = fn_type @Op.1, @Action(%T) [symbolic] // CHECK:STDOUT: %Op.6ed: %Op.type.036 = struct_value () [symbolic] // CHECK:STDOUT: %Action.assoc_type.32e: type = assoc_entity_type @Action, @Action(%T) [symbolic] @@ -227,6 +236,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.assoc_type.4ee: type = assoc_entity_type @Action, @Action(%B) [concrete] // CHECK:STDOUT: %assoc0.f3b: %Action.assoc_type.4ee = assoc_entity element0, @Action.%Op.decl [concrete] // CHECK:STDOUT: %Action.impl_witness: = impl_witness file.%Action.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %Op.type.4b4: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.40d: %Op.type.4b4 = struct_value () [concrete] // CHECK:STDOUT: %Action.facet: %Action.type.cb0 = facet_value %A, (%Action.impl_witness) [concrete] @@ -252,7 +262,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Action.decl: %Action.type.29c = interface_decl @Action [concrete = constants.%Action.generic] { -// CHECK:STDOUT: %T.patt.loc4_18.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_18.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_18.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_18.2 (constants.%T)] // CHECK:STDOUT: } @@ -268,8 +278,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.impl_witness_table = impl_witness_table (@impl.%Op.decl), @impl [concrete] // CHECK:STDOUT: %Action.impl_witness: = impl_witness %Action.impl_witness_table [concrete = constants.%Action.impl_witness] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c10 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] @@ -279,7 +289,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Action(%T.loc4_18.1: type) { // CHECK:STDOUT: %T.loc4_18.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_18.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_18.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_18.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T.loc4_18.2)> [symbolic = %Action.type (constants.%Action.type.cca)] @@ -292,8 +302,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @Action.%Action.type (%Action.type.cca) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.e98)] // CHECK:STDOUT: %Op.decl: @Action.%Op.type (%Op.type.036) = fn_decl @Op.1 [symbolic = @Action.%Op (constants.%Op.6ed)] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.8db) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.8db) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_15.1: type = splice_block %.loc5_15.3 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] { @@ -315,8 +325,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %A.ref as %Action.type { // CHECK:STDOUT: %Op.decl: %Op.type.4b4 = fn_decl @Op.2 [concrete = constants.%Op.40d] { -// CHECK:STDOUT: %self.patt: %A = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %A = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.c10 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c10 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %A = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%A.ref [concrete = constants.%A] @@ -360,6 +370,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.cca)] // CHECK:STDOUT: %Self: @Op.1.%Action.type (%Action.type.cca) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.e98)] // CHECK:STDOUT: %Self.as_type.loc5_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_15.1 [symbolic = %pattern_type (constants.%pattern_type.8db)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -393,6 +404,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type => constants.%Action.type.cca // CHECK:STDOUT: %Self => constants.%Self.e98 // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8db // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(@Op.1.%T) {} @@ -417,6 +429,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type => constants.%Action.type.cb0 // CHECK:STDOUT: %Self => constants.%Action.facet // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%A +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c10 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- action.impl.carbon @@ -431,12 +444,14 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Action.type.cca: type = facet_type <@Action, @Action(%T)> [symbolic] // CHECK:STDOUT: %Self.e98: %Action.type.cca = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Action.type.cb0: type = facet_type <@Action, @Action(%B)> [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %Op.type.036: type = fn_type @Op.1, @Action(%T) [symbolic] // CHECK:STDOUT: %Op.6ed: %Op.type.036 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.e98 [symbolic] +// CHECK:STDOUT: %pattern_type.8db: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Action.assoc_type.32e: type = assoc_entity_type @Action, @Action(%T) [symbolic] // CHECK:STDOUT: %assoc0.f18741.1: %Action.assoc_type.32e = assoc_entity element0, imports.%Main.import_ref.0e3753.1 [symbolic] // CHECK:STDOUT: %Self.0d1: %Action.type.cb0 = bind_symbolic_name Self, 1 [symbolic] @@ -444,6 +459,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Op.dba: %Op.type.54d = struct_value () [concrete] // CHECK:STDOUT: %Action.assoc_type.4ee: type = assoc_entity_type @Action, @Action(%B) [concrete] // CHECK:STDOUT: %assoc0.8a8: %Action.assoc_type.4ee = assoc_entity element0, imports.%Main.import_ref.1f6 [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %assoc0.f18741.2: %Action.assoc_type.32e = assoc_entity element0, imports.%Main.import_ref.0e3753.2 [symbolic] @@ -465,19 +481,19 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//action, loc9_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//action, inst63 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//action, inst66 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//action, loc4_18, loaded [symbolic = @Action.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.ddc = import_ref Main//action, inst28 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.ddc = import_ref Main//action, inst29 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.c55: @Action.%Action.assoc_type (%Action.assoc_type.32e) = import_ref Main//action, loc5_22, loaded [symbolic = @Action.%assoc0 (constants.%assoc0.f18741.2)] // CHECK:STDOUT: %Main.Op = import_ref Main//action, Op, unloaded // CHECK:STDOUT: %Main.import_ref.995: = import_ref Main//action, loc12_21, loaded [concrete = constants.%Action.impl_witness] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//action, loc8_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//action, inst57 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//action, inst60 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.984: type = import_ref Main//action, loc12_6, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.import_ref.bb2: type = import_ref Main//action, loc12_19, loaded [concrete = constants.%Action.type.cb0] // CHECK:STDOUT: %Main.import_ref.7b5 = import_ref Main//action, loc13_23, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//action, loc4_18, loaded [symbolic = @Action.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.835: @Action.%Action.type (%Action.type.cca) = import_ref Main//action, inst28 [no loc], loaded [symbolic = @Action.%Self (constants.%Self.e98)] +// CHECK:STDOUT: %Main.import_ref.835: @Action.%Action.type (%Action.type.cca) = import_ref Main//action, inst29 [no loc], loaded [symbolic = @Action.%Self (constants.%Self.e98)] // CHECK:STDOUT: %Main.import_ref.0e3753.1 = import_ref Main//action, loc5_22, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: @@ -495,8 +511,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c10 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Main.A [concrete = constants.%A] @@ -506,7 +522,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Action(imports.%Main.import_ref.5ab3ec.1: type) [from "action.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.cca)] @@ -549,6 +565,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.cca)] // CHECK:STDOUT: %Self: @Op.1.%Action.type (%Action.type.cca) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.e98)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.8db)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -596,6 +613,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type => constants.%Action.type.cca // CHECK:STDOUT: %Self => constants.%Self.e98 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8db // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_action.impl.carbon @@ -609,12 +627,14 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Action.type.cca: type = facet_type <@Action, @Action(%T)> [symbolic] // CHECK:STDOUT: %Self.e98: %Action.type.cca = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Action.type.cb0: type = facet_type <@Action, @Action(%B)> [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %Op.type.036: type = fn_type @Op, @Action(%T) [symbolic] // CHECK:STDOUT: %Op.6ed: %Op.type.036 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.e98 [symbolic] +// CHECK:STDOUT: %pattern_type.8db: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Action.assoc_type.32e: type = assoc_entity_type @Action, @Action(%T) [symbolic] // CHECK:STDOUT: %assoc0.326: %Action.assoc_type.32e = assoc_entity element0, imports.%Main.import_ref.1f6 [symbolic] // CHECK:STDOUT: %Self.0d1: %Action.type.cb0 = bind_symbolic_name Self, 1 [symbolic] @@ -622,6 +642,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Op.dba: %Op.type.54d = struct_value () [concrete] // CHECK:STDOUT: %Action.assoc_type.4ee: type = assoc_entity_type @Action, @Action(%B) [concrete] // CHECK:STDOUT: %assoc0.338: %Action.assoc_type.4ee = assoc_entity element0, imports.%Main.import_ref.0e3753.1 [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] @@ -644,22 +665,22 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//action, loc9_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//action, inst63 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//action, inst66 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//action, loc4_18, loaded [symbolic = @Action.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.ddc = import_ref Main//action, inst28 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.ddc = import_ref Main//action, inst29 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.c55: @Action.%Action.assoc_type (%Action.assoc_type.32e) = import_ref Main//action, loc5_22, loaded [symbolic = @Action.%assoc0 (constants.%assoc0.f18)] // CHECK:STDOUT: %Main.Op = import_ref Main//action, Op, unloaded // CHECK:STDOUT: %Main.import_ref.19c = import_ref Main//action, loc12_21, unloaded // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//action, loc8_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//action, inst57 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//action, inst60 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.984: type = import_ref Main//action, loc12_6, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.import_ref.bb2: type = import_ref Main//action, loc12_19, loaded [concrete = constants.%Action.type.cb0] // CHECK:STDOUT: %Main.import_ref.7b5 = import_ref Main//action, loc13_23, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//action, loc4_18, loaded [symbolic = @Action.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.835: @Action.%Action.type (%Action.type.cca) = import_ref Main//action, inst28 [no loc], loaded [symbolic = @Action.%Self (constants.%Self.e98)] +// CHECK:STDOUT: %Main.import_ref.835: @Action.%Action.type (%Action.type.cca) = import_ref Main//action, inst29 [no loc], loaded [symbolic = @Action.%Self (constants.%Self.e98)] // CHECK:STDOUT: %Main.import_ref.1f6: @Action.%Op.type (%Op.type.036) = import_ref Main//action, loc5_22, loaded [symbolic = @Action.%Op (constants.%Op.6ed)] // CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//action, loc10_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.2c4 = import_ref Main//action, inst67 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.2c4 = import_ref Main//action, inst70 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -676,8 +697,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c10 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %A = value_param call_param0 // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Main.A [concrete = constants.%A] @@ -687,7 +708,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Action(imports.%Main.import_ref.5ab3ec.1: type) [from "action.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.cca)] @@ -737,6 +758,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.cca)] // CHECK:STDOUT: %Self: @Op.%Action.type (%Action.type.cca) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.e98)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.8db)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -779,6 +801,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Action.type => constants.%Action.type.cca // CHECK:STDOUT: %Self => constants.%Self.e98 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8db // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%C) { @@ -798,16 +821,19 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.1a8: type = generic_interface_type @Factory [concrete] // CHECK:STDOUT: %Factory.generic: %Factory.type.1a8 = struct_value () [concrete] // CHECK:STDOUT: %Factory.type.c96: type = facet_type <@Factory, @Factory(%T)> [symbolic] // CHECK:STDOUT: %Self.9ba: %Factory.type.c96 = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Make.type.598: type = fn_type @Make.1, @Factory(%T) [symbolic] // CHECK:STDOUT: %Make.737: %Make.type.598 = struct_value () [symbolic] // CHECK:STDOUT: %Factory.assoc_type.207: type = assoc_entity_type @Factory, @Factory(%T) [symbolic] // CHECK:STDOUT: %assoc0.b3c: %Factory.assoc_type.207 = assoc_entity element0, @Factory.%Make.decl [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.9ba [symbolic] +// CHECK:STDOUT: %pattern_type.5ea: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Method.type.7ee: type = fn_type @Method.1, @Factory(%T) [symbolic] // CHECK:STDOUT: %Method.a71: %Method.type.7ee = struct_value () [symbolic] // CHECK:STDOUT: %assoc1.e30: %Factory.assoc_type.207 = assoc_entity element1, @Factory.%Method.decl [symbolic] @@ -825,8 +851,10 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Method.ea9: %Method.type.117 = struct_value () [concrete] // CHECK:STDOUT: %assoc1.02a: %Factory.assoc_type.579 = assoc_entity element1, @Factory.%Method.decl [concrete] // CHECK:STDOUT: %Factory.impl_witness: = impl_witness file.%Factory.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %Make.type.ec4: type = fn_type @Make.2 [concrete] // CHECK:STDOUT: %Make.377: %Make.type.ec4 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %Method.type.af5: type = fn_type @Method.2 [concrete] // CHECK:STDOUT: %Method.3d4: %Method.type.af5 = struct_value () [concrete] // CHECK:STDOUT: %Factory.facet: %Factory.type.a5d = facet_value %A, (%Factory.impl_witness) [concrete] @@ -847,7 +875,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Factory.decl: %Factory.type.1a8 = interface_decl @Factory [concrete = constants.%Factory.generic] { -// CHECK:STDOUT: %T.patt.loc4_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_19.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_19.2 (constants.%T)] // CHECK:STDOUT: } @@ -865,7 +893,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Factory(%T.loc4_19.1: type) { // CHECK:STDOUT: %T.loc4_19.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_19.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_19.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T.loc4_19.2)> [symbolic = %Factory.type (constants.%Factory.type.c96)] @@ -881,8 +909,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @Factory.%Factory.type (%Factory.type.c96) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.9ba)] // CHECK:STDOUT: %Make.decl: @Factory.%Make.type (%Make.type.598) = fn_decl @Make.1 [symbolic = @Factory.%Make (constants.%Make.737)] { -// CHECK:STDOUT: %return.patt: @Make.1.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Make.1.%T (%T) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Make.1.%pattern_type (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Make.1.%pattern_type (%pattern_type.7dc) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Factory.%T.loc4_19.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %return.param: ref @Make.1.%T (%T) = out_param call_param0 @@ -890,10 +918,10 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0.loc6_17.1: @Factory.%Factory.assoc_type (%Factory.assoc_type.207) = assoc_entity element0, %Make.decl [symbolic = %assoc0.loc6_17.2 (constants.%assoc0.b3c)] // CHECK:STDOUT: %Method.decl: @Factory.%Method.type (%Method.type.7ee) = fn_decl @Method.1 [symbolic = @Factory.%Method (constants.%Method.a71)] { -// CHECK:STDOUT: %self.patt: @Method.1.%Self.as_type.loc8_19.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Method.1.%Self.as_type.loc8_19.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Method.1.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Method.1.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Method.1.%pattern_type.loc8_13 (%pattern_type.5ea) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Method.1.%pattern_type.loc8_13 (%pattern_type.5ea) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Method.1.%pattern_type.loc8_27 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Method.1.%pattern_type.loc8_27 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @Factory.%T.loc4_19.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Method.1.%Self.as_type.loc8_19.1 (%Self.as_type) = value_param call_param0 @@ -920,18 +948,18 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %A.ref as %Factory.type { // CHECK:STDOUT: %Make.decl: %Make.type.ec4 = fn_decl @Make.2 [concrete = constants.%Make.377] { -// CHECK:STDOUT: %return.patt: %B = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %B = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.049 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.049 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %return.param: ref %B = out_param call_param0 // CHECK:STDOUT: %return: ref %B = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Method.decl: %Method.type.af5 = fn_decl @Method.2 [concrete = constants.%Method.3d4] { -// CHECK:STDOUT: %self.patt: %A = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %A = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %B = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %B = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.c10 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c10 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.049 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.049 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %self.param: %A = value_param call_param0 @@ -968,6 +996,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Make.1(@Factory.%T.loc4_19.1: type, @Factory.%Self.1: @Factory.%Factory.type (%Factory.type.c96)) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @Make.1.%T (%T); // CHECK:STDOUT: } @@ -977,6 +1006,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.c96)] // CHECK:STDOUT: %Self: @Method.1.%Factory.type (%Factory.type.c96) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.9ba)] // CHECK:STDOUT: %Self.as_type.loc8_19.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_19.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc8_13: type = pattern_type %Self.as_type.loc8_19.1 [symbolic = %pattern_type.loc8_13 (constants.%pattern_type.5ea)] +// CHECK:STDOUT: %pattern_type.loc8_27: type = pattern_type %T [symbolic = %pattern_type.loc8_27 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Method.1.%Self.as_type.loc8_19.1 (%Self.as_type)) -> @Method.1.%T (%T); // CHECK:STDOUT: } @@ -992,6 +1023,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: specific @Make.1(constants.%T, constants.%Self.9ba) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Method.1(constants.%T, constants.%Self.9ba) { @@ -999,6 +1031,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.type => constants.%Factory.type.c96 // CHECK:STDOUT: %Self => constants.%Self.9ba // CHECK:STDOUT: %Self.as_type.loc8_19.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc8_13 => constants.%pattern_type.5ea +// CHECK:STDOUT: %pattern_type.loc8_27 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(@Method.1.%T) {} @@ -1023,6 +1057,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: specific @Make.1(constants.%B, constants.%Factory.facet) { // CHECK:STDOUT: %T => constants.%B +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.049 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Method.1(constants.%B, constants.%Factory.facet) { @@ -1030,6 +1065,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.type => constants.%Factory.type.a5d // CHECK:STDOUT: %Self => constants.%Factory.facet // CHECK:STDOUT: %Self.as_type.loc8_19.1 => constants.%A +// CHECK:STDOUT: %pattern_type.loc8_13 => constants.%pattern_type.c10 +// CHECK:STDOUT: %pattern_type.loc8_27 => constants.%pattern_type.049 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- factory.impl.carbon @@ -1043,16 +1080,19 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.c96: type = facet_type <@Factory, @Factory(%T)> [symbolic] // CHECK:STDOUT: %Self.9ba: %Factory.type.c96 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.a5d: type = facet_type <@Factory, @Factory(%B)> [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %Make.type.598: type = fn_type @Make.1, @Factory(%T) [symbolic] // CHECK:STDOUT: %Make.737: %Make.type.598 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Factory.assoc_type.207: type = assoc_entity_type @Factory, @Factory(%T) [symbolic] // CHECK:STDOUT: %assoc0.46d25f.1: %Factory.assoc_type.207 = assoc_entity element0, imports.%Main.import_ref.21018a.1 [symbolic] // CHECK:STDOUT: %Method.type.7ee: type = fn_type @Method.1, @Factory(%T) [symbolic] // CHECK:STDOUT: %Method.a71: %Method.type.7ee = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.9ba [symbolic] +// CHECK:STDOUT: %pattern_type.5ea: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %assoc1.16541d.1: %Factory.assoc_type.207 = assoc_entity element1, imports.%Main.import_ref.46fc3c.1 [symbolic] // CHECK:STDOUT: %Self.187: %Factory.type.a5d = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Make.type.c59: type = fn_type @Make.1, @Factory(%B) [concrete] @@ -1062,6 +1102,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Method.type.117: type = fn_type @Method.1, @Factory(%B) [concrete] // CHECK:STDOUT: %Method.ea9: %Method.type.117 = struct_value () [concrete] // CHECK:STDOUT: %assoc1.a48: %Factory.assoc_type.579 = assoc_entity element1, imports.%Main.import_ref.5be [concrete] +// CHECK:STDOUT: %pattern_type.049: type = pattern_type %B [concrete] // CHECK:STDOUT: %MakeB.type: type = fn_type @MakeB [concrete] // CHECK:STDOUT: %MakeB: %MakeB.type = struct_value () [concrete] // CHECK:STDOUT: %assoc0.46d25f.2: %Factory.assoc_type.207 = assoc_entity element0, imports.%Main.import_ref.21018a.2 [symbolic] @@ -1071,6 +1112,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %.711: type = fn_type_with_self_type %Make.type.c59, %Factory.facet [concrete] // CHECK:STDOUT: %Make.type.ec4: type = fn_type @Make.2 [concrete] // CHECK:STDOUT: %Make.377: %Make.type.ec4 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %InstanceB.type: type = fn_type @InstanceB [concrete] // CHECK:STDOUT: %InstanceB: %InstanceB.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1.16541d.2: %Factory.assoc_type.207 = assoc_entity element1, imports.%Main.import_ref.46fc3c.2 [symbolic] @@ -1087,25 +1129,25 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//factory, loc12_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//factory, inst82 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//factory, inst88 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//factory, loc4_19, loaded [symbolic = @Factory.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.fbb = import_ref Main//factory, inst28 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.fbb = import_ref Main//factory, inst29 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.46c: @Factory.%Factory.assoc_type (%Factory.assoc_type.207) = import_ref Main//factory, loc6_17, loaded [symbolic = @Factory.%assoc0 (constants.%assoc0.46d25f.2)] // CHECK:STDOUT: %Main.import_ref.2e4: @Factory.%Factory.assoc_type (%Factory.assoc_type.207) = import_ref Main//factory, loc8_31, loaded [symbolic = @Factory.%assoc1 (constants.%assoc1.16541d.2)] // CHECK:STDOUT: %Main.Make = import_ref Main//factory, Make, unloaded // CHECK:STDOUT: %Main.Method = import_ref Main//factory, Method, unloaded // CHECK:STDOUT: %Main.import_ref.6fd: = import_ref Main//factory, loc14_22, loaded [concrete = constants.%Factory.impl_witness] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//factory, loc11_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//factory, inst76 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//factory, inst82 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.984: type = import_ref Main//factory, loc14_6, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.import_ref.bd2: type = import_ref Main//factory, loc14_20, loaded [concrete = constants.%Factory.type.a5d] // CHECK:STDOUT: %Main.import_ref.a27 = import_ref Main//factory, loc15_17, unloaded // CHECK:STDOUT: %Main.import_ref.163 = import_ref Main//factory, loc16_31, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//factory, loc4_19, loaded [symbolic = @Factory.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.91b53a.1: @Factory.%Factory.type (%Factory.type.c96) = import_ref Main//factory, inst28 [no loc], loaded [symbolic = @Factory.%Self (constants.%Self.9ba)] +// CHECK:STDOUT: %Main.import_ref.91b53a.1: @Factory.%Factory.type (%Factory.type.c96) = import_ref Main//factory, inst29 [no loc], loaded [symbolic = @Factory.%Self (constants.%Self.9ba)] // CHECK:STDOUT: %Main.import_ref.21018a.1 = import_ref Main//factory, loc6_17, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//factory, loc4_19, loaded [symbolic = @Factory.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.91b53a.2: @Factory.%Factory.type (%Factory.type.c96) = import_ref Main//factory, inst28 [no loc], loaded [symbolic = @Factory.%Self (constants.%Self.9ba)] +// CHECK:STDOUT: %Main.import_ref.91b53a.2: @Factory.%Factory.type (%Factory.type.c96) = import_ref Main//factory, inst29 [no loc], loaded [symbolic = @Factory.%Self (constants.%Self.9ba)] // CHECK:STDOUT: %Main.import_ref.46fc3c.1 = import_ref Main//factory, loc8_31, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1122,18 +1164,18 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %default.import.loc2_23.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %MakeB.decl: %MakeB.type = fn_decl @MakeB [concrete = constants.%MakeB] { -// CHECK:STDOUT: %return.patt: %B = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %B = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.049 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.049 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref.loc4: type = name_ref B, imports.%Main.B [concrete = constants.%B] // CHECK:STDOUT: %return.param: ref %B = out_param call_param0 // CHECK:STDOUT: %return: ref %B = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceB.decl: %InstanceB.type = fn_decl @InstanceB [concrete = constants.%InstanceB] { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %B = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %B = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c10 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.049 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.049 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %B.ref.loc7: type = name_ref B, imports.%Main.B [concrete = constants.%B] // CHECK:STDOUT: %a.param: %A = value_param call_param0 @@ -1146,7 +1188,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Factory(imports.%Main.import_ref.5ab3ec.1: type) [from "factory.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.c96)] @@ -1191,6 +1233,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Make.1(imports.%Main.import_ref.5ab3ec.2: type, imports.%Main.import_ref.91b53a.1: @Factory.%Factory.type (%Factory.type.c96)) [from "factory.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1200,6 +1243,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.c96)] // CHECK:STDOUT: %Self: @Method.1.%Factory.type (%Factory.type.c96) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.9ba)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.5ea)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1264,6 +1309,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: specific @Make.1(constants.%T, constants.%Self.9ba) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(@Method.1.%T) {} @@ -1273,6 +1319,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.type => constants.%Factory.type.c96 // CHECK:STDOUT: %Self => constants.%Self.9ba // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.5ea +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_factory.impl.carbon @@ -1286,16 +1334,19 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.c96: type = facet_type <@Factory, @Factory(%T)> [symbolic] // CHECK:STDOUT: %Self.9ba: %Factory.type.c96 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.a5d: type = facet_type <@Factory, @Factory(%B)> [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %Make.type.598: type = fn_type @Make, @Factory(%T) [symbolic] // CHECK:STDOUT: %Make.737: %Make.type.598 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Factory.assoc_type.207: type = assoc_entity_type @Factory, @Factory(%T) [symbolic] // CHECK:STDOUT: %assoc0.fe4: %Factory.assoc_type.207 = assoc_entity element0, imports.%Main.import_ref.1aa [symbolic] // CHECK:STDOUT: %Method.type.7ee: type = fn_type @Method, @Factory(%T) [symbolic] // CHECK:STDOUT: %Method.a71: %Method.type.7ee = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.9ba [symbolic] +// CHECK:STDOUT: %pattern_type.5ea: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %assoc1.ea6: %Factory.assoc_type.207 = assoc_entity element1, imports.%Main.import_ref.5be [symbolic] // CHECK:STDOUT: %Self.187: %Factory.type.a5d = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Make.type.c59: type = fn_type @Make, @Factory(%B) [concrete] @@ -1306,6 +1357,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Method.ea9: %Method.type.117 = struct_value () [concrete] // CHECK:STDOUT: %assoc1.535: %Factory.assoc_type.579 = assoc_entity element1, imports.%Main.import_ref.46fc3c.1 [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %MakeC.type: type = fn_type @MakeC [concrete] // CHECK:STDOUT: %MakeC: %MakeC.type = struct_value () [concrete] // CHECK:STDOUT: %Factory.type.5c5: type = facet_type <@Factory, @Factory(%C)> [concrete] @@ -1318,6 +1370,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Method.f9e: %Method.type.d46 = struct_value () [concrete] // CHECK:STDOUT: %assoc1.263: %Factory.assoc_type.d01 = assoc_entity element1, imports.%Main.import_ref.5be [concrete] // CHECK:STDOUT: %assoc0.46d: %Factory.assoc_type.207 = assoc_entity element0, imports.%Main.import_ref.21018a.2 [symbolic] +// CHECK:STDOUT: %pattern_type.c10: type = pattern_type %A [concrete] // CHECK:STDOUT: %InstanceC.type: type = fn_type @InstanceC [concrete] // CHECK:STDOUT: %InstanceC: %InstanceC.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1.165: %Factory.assoc_type.207 = assoc_entity element1, imports.%Main.import_ref.46fc3c.2 [symbolic] @@ -1332,25 +1385,25 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: import Core//default // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.8f24d3.1: = import_ref Main//factory, loc12_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//factory, inst82 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.54a = import_ref Main//factory, inst88 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//factory, loc4_19, loaded [symbolic = @Factory.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.fbb = import_ref Main//factory, inst28 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.fbb = import_ref Main//factory, inst29 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.46c: @Factory.%Factory.assoc_type (%Factory.assoc_type.207) = import_ref Main//factory, loc6_17, loaded [symbolic = @Factory.%assoc0 (constants.%assoc0.46d)] // CHECK:STDOUT: %Main.import_ref.2e4: @Factory.%Factory.assoc_type (%Factory.assoc_type.207) = import_ref Main//factory, loc8_31, loaded [symbolic = @Factory.%assoc1 (constants.%assoc1.165)] // CHECK:STDOUT: %Main.Make = import_ref Main//factory, Make, unloaded // CHECK:STDOUT: %Main.Method = import_ref Main//factory, Method, unloaded // CHECK:STDOUT: %Main.import_ref.4c3 = import_ref Main//factory, loc14_22, unloaded // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//factory, loc11_10, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//factory, inst76 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.da3 = import_ref Main//factory, inst82 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.984: type = import_ref Main//factory, loc14_6, loaded [concrete = constants.%A] // CHECK:STDOUT: %Main.import_ref.bd2: type = import_ref Main//factory, loc14_20, loaded [concrete = constants.%Factory.type.a5d] // CHECK:STDOUT: %Main.import_ref.a27 = import_ref Main//factory, loc15_17, unloaded // CHECK:STDOUT: %Main.import_ref.163 = import_ref Main//factory, loc16_31, unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//factory, loc4_19, loaded [symbolic = @Factory.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.91b53a.1: @Factory.%Factory.type (%Factory.type.c96) = import_ref Main//factory, inst28 [no loc], loaded [symbolic = @Factory.%Self (constants.%Self.9ba)] +// CHECK:STDOUT: %Main.import_ref.91b53a.1: @Factory.%Factory.type (%Factory.type.c96) = import_ref Main//factory, inst29 [no loc], loaded [symbolic = @Factory.%Self (constants.%Self.9ba)] // CHECK:STDOUT: %Main.import_ref.1aa: @Factory.%Make.type (%Make.type.598) = import_ref Main//factory, loc6_17, loaded [symbolic = @Factory.%Make (constants.%Make.737)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.3: type = import_ref Main//factory, loc4_19, loaded [symbolic = @Factory.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.91b53a.2: @Factory.%Factory.type (%Factory.type.c96) = import_ref Main//factory, inst28 [no loc], loaded [symbolic = @Factory.%Self (constants.%Self.9ba)] +// CHECK:STDOUT: %Main.import_ref.91b53a.2: @Factory.%Factory.type (%Factory.type.c96) = import_ref Main//factory, inst29 [no loc], loaded [symbolic = @Factory.%Self (constants.%Self.9ba)] // CHECK:STDOUT: %Main.import_ref.5be: @Factory.%Method.type (%Method.type.7ee) = import_ref Main//factory, loc8_31, loaded [symbolic = @Factory.%Method (constants.%Method.a71)] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1369,18 +1422,18 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %MakeC.decl: %MakeC.type = fn_decl @MakeC [concrete = constants.%MakeC] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceC.decl: %InstanceC.type = fn_decl @InstanceC [concrete = constants.%InstanceC] { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %A = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.c10 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c10 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc16: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %A = value_param call_param0 @@ -1393,7 +1446,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Factory(imports.%Main.import_ref.5ab3ec.1: type) [from "factory.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.c96)] @@ -1447,6 +1500,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Make(imports.%Main.import_ref.5ab3ec.2: type, imports.%Main.import_ref.91b53a.1: @Factory.%Factory.type (%Factory.type.c96)) [from "factory.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1456,6 +1510,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.c96)] // CHECK:STDOUT: %Self: @Method.%Factory.type (%Factory.type.c96) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.9ba)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.5ea)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1507,6 +1563,7 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%T, constants.%Self.9ba) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(@Method.%T) {} @@ -1516,6 +1573,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: %Factory.type => constants.%Factory.type.c96 // CHECK:STDOUT: %Self => constants.%Self.9ba // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.5ea +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Factory(constants.%C) { diff --git a/toolchain/check/testdata/impl/multiple_extend.carbon b/toolchain/check/testdata/impl/multiple_extend.carbon index 7ef001886655..655bc221af9d 100644 --- a/toolchain/check/testdata/impl/multiple_extend.carbon +++ b/toolchain/check/testdata/impl/multiple_extend.carbon @@ -187,6 +187,7 @@ fn P(o: O) { // CHECK:STDOUT: %HasG.facet: %HasG.type = facet_value %C, (%HasG.impl_witness) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %.a44: type = fn_type_with_self_type %F.type.b7b, %HasF.facet [concrete] @@ -213,8 +214,8 @@ fn P(o: O) { // CHECK:STDOUT: %HasG.decl: type = interface_decl @HasG [concrete = constants.%HasG.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc21: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -363,6 +364,7 @@ fn P(o: O) { // CHECK:STDOUT: %HasA2.facet: %HasA2.type = facet_value %D, (%HasA2.impl_witness) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %D [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -387,8 +389,8 @@ fn P(o: O) { // CHECK:STDOUT: %HasA2.decl: type = interface_decl @HasA2 [concrete = constants.%HasA2.type] {} {} // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d -// CHECK:STDOUT: %d.param_patt: %D = value_param_pattern %d.patt, call_param0 +// CHECK:STDOUT: %d.patt: %pattern_type = binding_pattern d +// CHECK:STDOUT: %d.param_patt: %pattern_type = value_param_pattern %d.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %d.param: %D = value_param call_param0 // CHECK:STDOUT: %D.ref.loc21: type = name_ref D, file.%D.decl [concrete = constants.%D] @@ -519,6 +521,7 @@ fn P(o: O) { // CHECK:STDOUT: %HasI.facet: %HasI.type = facet_value %E, (%HasI.impl_witness) [concrete] // CHECK:STDOUT: %struct_type.base.0ff: type = struct_type {.base: %B} [concrete] // CHECK:STDOUT: %complete_type.98e: = complete_type_witness %struct_type.base.0ff [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %E [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %.06f: type = fn_type_with_self_type %I.type.9bd, %HasI.facet [concrete] @@ -544,8 +547,8 @@ fn P(o: O) { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %E.decl: type = class_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %e.patt: %E = binding_pattern e -// CHECK:STDOUT: %e.param_patt: %E = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %e.patt: %pattern_type = binding_pattern e +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %E = value_param call_param0 // CHECK:STDOUT: %E.ref.loc19: type = name_ref E, file.%E.decl [concrete = constants.%E] @@ -669,6 +672,7 @@ fn P(o: O) { // CHECK:STDOUT: %HasK.facet: %HasK.type = facet_value %L, (%HasK.impl_witness) [concrete] // CHECK:STDOUT: %struct_type.base.b1e: type = struct_type {.base: %Base} [concrete] // CHECK:STDOUT: %complete_type.15c: = complete_type_witness %struct_type.base.b1e [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %L [concrete] // CHECK:STDOUT: %M.type: type = fn_type @M [concrete] // CHECK:STDOUT: %M: %M.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -693,8 +697,8 @@ fn P(o: O) { // CHECK:STDOUT: %HasK.decl: type = interface_decl @HasK [concrete = constants.%HasK.type] {} {} // CHECK:STDOUT: %L.decl: type = class_decl @L [concrete = constants.%L] {} {} // CHECK:STDOUT: %M.decl: %M.type = fn_decl @M [concrete = constants.%M] { -// CHECK:STDOUT: %l.patt: %L = binding_pattern l -// CHECK:STDOUT: %l.param_patt: %L = value_param_pattern %l.patt, call_param0 +// CHECK:STDOUT: %l.patt: %pattern_type = binding_pattern l +// CHECK:STDOUT: %l.param_patt: %pattern_type = value_param_pattern %l.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %l.param: %L = value_param call_param0 // CHECK:STDOUT: %L.ref.loc19: type = name_ref L, file.%L.decl [concrete = constants.%L] @@ -818,6 +822,7 @@ fn P(o: O) { // CHECK:STDOUT: %N.cc3: %N.type.8b4 = struct_value () [concrete] // CHECK:STDOUT: %struct_type.base.9c6: type = struct_type {.base: %NBase} [concrete] // CHECK:STDOUT: %complete_type.121: = complete_type_witness %struct_type.base.9c6 [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %O [concrete] // CHECK:STDOUT: %P.type: type = fn_type @P [concrete] // CHECK:STDOUT: %P: %P.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -844,8 +849,8 @@ fn P(o: O) { // CHECK:STDOUT: %HasN2.decl: type = interface_decl @HasN2 [concrete = constants.%HasN2.type] {} {} // CHECK:STDOUT: %O.decl: type = class_decl @O [concrete = constants.%O] {} {} // CHECK:STDOUT: %P.decl: %P.type = fn_decl @P [concrete = constants.%P] { -// CHECK:STDOUT: %o.patt: %O = binding_pattern o -// CHECK:STDOUT: %o.param_patt: %O = value_param_pattern %o.patt, call_param0 +// CHECK:STDOUT: %o.patt: %pattern_type = binding_pattern o +// CHECK:STDOUT: %o.param_patt: %pattern_type = value_param_pattern %o.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %o.param: %O = value_param call_param0 // CHECK:STDOUT: %O.ref.loc27: type = name_ref O, file.%O.decl [concrete = constants.%O] diff --git a/toolchain/check/testdata/impl/no_prelude/compound.carbon b/toolchain/check/testdata/impl/no_prelude/compound.carbon index a026c21b27b0..2dee4ca82f7f 100644 --- a/toolchain/check/testdata/impl/no_prelude/compound.carbon +++ b/toolchain/check/testdata/impl/no_prelude/compound.carbon @@ -120,12 +120,15 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.96f: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.96f = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert: %Convert.type = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -137,7 +140,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc3_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc3_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -145,7 +148,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc3_22.1: type) { // CHECK:STDOUT: %Dest.loc3_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc3_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc3_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -158,10 +161,10 @@ fn InstanceCallFail() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type) = fn_decl @Convert [symbolic = @ImplicitAs.%Convert (constants.%Convert)] { -// CHECK:STDOUT: %self.patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc3_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param call_param0 @@ -190,6 +193,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.as_type.loc4_20.1 [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc4_28: type = pattern_type %Dest [symbolic = %pattern_type.loc4_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type)) -> @Convert.%Dest (%Dest); // CHECK:STDOUT: } @@ -204,6 +209,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_20.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.%Dest) {} @@ -308,15 +315,19 @@ fn InstanceCallFail() { // CHECK:STDOUT: %F2.type.1ec: type = fn_type @F2.2 [concrete] // CHECK:STDOUT: %F2.941: %F2.type.1ec = struct_value () [concrete] // CHECK:STDOUT: %NonInstance2.facet: %NonInstance2.type = facet_value %struct_type.b, (%NonInstance2.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.d5c: type = pattern_type %struct_type.b [concrete] // CHECK:STDOUT: %NonInstanceCall2.type: type = fn_type @NonInstanceCall2 [concrete] // CHECK:STDOUT: %NonInstanceCall2: %NonInstanceCall2.type = struct_value () [concrete] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.c38: type = facet_type <@ImplicitAs, @ImplicitAs(%NonInstance2.type)> [concrete] @@ -334,11 +345,11 @@ fn InstanceCallFail() { // CHECK:STDOUT: import Core//default // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst26 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst27 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//default, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst26 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst27 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -359,8 +370,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %NonInstance2.impl_witness_table = impl_witness_table (@impl.%F2.decl), @impl [concrete] // CHECK:STDOUT: %NonInstance2.impl_witness: = impl_witness %NonInstance2.impl_witness_table [concrete = constants.%NonInstance2.impl_witness] // CHECK:STDOUT: %NonInstanceCall2.decl: %NonInstanceCall2.type = fn_decl @NonInstanceCall2 [concrete = constants.%NonInstanceCall2] { -// CHECK:STDOUT: %n.patt: %struct_type.b = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %struct_type.b = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.d5c = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.d5c = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %struct_type.b = value_param call_param0 // CHECK:STDOUT: %.loc13_31: type = splice_block %struct_type.b [concrete = constants.%struct_type.b] { @@ -385,7 +396,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "core.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -434,6 +445,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -456,6 +469,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%NonInstance2.type) { @@ -487,15 +502,19 @@ fn InstanceCallFail() { // CHECK:STDOUT: %F3.1d3: %F3.type.1c2 = struct_value () [concrete] // CHECK:STDOUT: %NonInstance3.facet: %NonInstance3.type = facet_value %struct_type.c, (%NonInstance3.impl_witness) [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %struct_type.c [concrete] +// CHECK:STDOUT: %pattern_type.5f5: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %NonInstanceCallIndirect.type: type = fn_type @NonInstanceCallIndirect [concrete] // CHECK:STDOUT: %NonInstanceCallIndirect: %NonInstanceCallIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.c69: type = facet_type <@ImplicitAs, @ImplicitAs(%NonInstance3.type)> [concrete] @@ -513,11 +532,11 @@ fn InstanceCallFail() { // CHECK:STDOUT: import Core//default // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst26 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst27 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//default, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst26 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst27 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -538,8 +557,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %NonInstance3.impl_witness_table = impl_witness_table (@impl.%F3.decl), @impl [concrete] // CHECK:STDOUT: %NonInstance3.impl_witness: = impl_witness %NonInstance3.impl_witness_table [concrete = constants.%NonInstance3.impl_witness] // CHECK:STDOUT: %NonInstanceCallIndirect.decl: %NonInstanceCallIndirect.type = fn_decl @NonInstanceCallIndirect [concrete = constants.%NonInstanceCallIndirect] { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.5f5 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.5f5 = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc13_39: type = splice_block %ptr [concrete = constants.%ptr] { @@ -565,7 +584,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "core.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -615,6 +634,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -637,6 +658,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%NonInstance3.type) { @@ -658,6 +681,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Instance1.type: type = facet_type <@Instance1> [concrete] // CHECK:STDOUT: %Self: %Instance1.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.0f0: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %G1.type.cde: type = fn_type @G1.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G1.79a: %G1.type.cde = struct_value () [concrete] @@ -665,6 +689,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: %assoc0: %Instance1.assoc_type = assoc_entity element0, @Instance1.%G1.decl [concrete] // CHECK:STDOUT: %struct_type.d: type = struct_type {.d: %empty_tuple.type} [concrete] // CHECK:STDOUT: %Instance1.impl_witness: = impl_witness file.%Instance1.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.515: type = pattern_type %struct_type.d [concrete] // CHECK:STDOUT: %G1.type.c50: type = fn_type @G1.2 [concrete] // CHECK:STDOUT: %G1.fee: %G1.type.c50 = struct_value () [concrete] // CHECK:STDOUT: %Instance1.facet: %Instance1.type = facet_value %struct_type.d, (%Instance1.impl_witness) [concrete] @@ -672,6 +697,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: %InstanceCall: %InstanceCall.type = struct_value () [concrete] // CHECK:STDOUT: %.d09: type = fn_type_with_self_type %G1.type.cde, %Instance1.facet [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %struct_type.d [concrete] +// CHECK:STDOUT: %pattern_type.8d6: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %InstanceCallIndirect.type: type = fn_type @InstanceCallIndirect [concrete] // CHECK:STDOUT: %InstanceCallIndirect: %InstanceCallIndirect.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -694,8 +720,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Instance1.impl_witness_table = impl_witness_table (@impl.%G1.decl), @impl [concrete] // CHECK:STDOUT: %Instance1.impl_witness: = impl_witness %Instance1.impl_witness_table [concrete = constants.%Instance1.impl_witness] // CHECK:STDOUT: %InstanceCall.decl: %InstanceCall.type = fn_decl @InstanceCall [concrete = constants.%InstanceCall] { -// CHECK:STDOUT: %n.patt: %struct_type.d = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %struct_type.d = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.515 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.515 = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %struct_type.d = value_param call_param0 // CHECK:STDOUT: %.loc11_27: type = splice_block %struct_type.d [concrete = constants.%struct_type.d] { @@ -706,8 +732,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: %n: %struct_type.d = bind_name n, %n.param // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceCallIndirect.decl: %InstanceCallIndirect.type = fn_decl @InstanceCallIndirect [concrete = constants.%InstanceCallIndirect] { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.8d6 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.8d6 = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc15_36: type = splice_block %ptr [concrete = constants.%ptr] { @@ -723,8 +749,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: interface @Instance1 { // CHECK:STDOUT: %Self: %Instance1.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %G1.decl: %G1.type.cde = fn_decl @G1.1 [concrete = constants.%G1.79a] { -// CHECK:STDOUT: %self.patt: @G1.1.%Self.as_type.loc4_15.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G1.1.%Self.as_type.loc4_15.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @G1.1.%pattern_type (%pattern_type.0f0) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G1.1.%pattern_type (%pattern_type.0f0) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @G1.1.%Self.as_type.loc4_15.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_15.1: type = splice_block %.loc4_15.2 [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)] { @@ -744,8 +770,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %struct_type.d as %Instance1.ref { // CHECK:STDOUT: %G1.decl: %G1.type.c50 = fn_decl @G1.2 [concrete = constants.%G1.fee] { -// CHECK:STDOUT: %self.patt: %struct_type.d = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %struct_type.d = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.515 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.515 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %struct_type.d = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%struct_type.d [concrete = constants.%struct_type.d] @@ -760,6 +786,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: generic fn @G1.1(@Instance1.%Self: %Instance1.type) { // CHECK:STDOUT: %Self: %Instance1.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_15.1 [symbolic = %pattern_type (constants.%pattern_type.0f0)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @G1.1.%Self.as_type.loc4_15.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -800,11 +827,13 @@ fn InstanceCallFail() { // CHECK:STDOUT: specific @G1.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.0f0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G1.1(constants.%Instance1.facet) { // CHECK:STDOUT: %Self => constants.%Instance1.facet // CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%struct_type.d +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.515 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_instance.carbon @@ -813,6 +842,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: %Instance2.type: type = facet_type <@Instance2> [concrete] // CHECK:STDOUT: %Self: %Instance2.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.8d7: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %G2.type.aa7: type = fn_type @G2.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G2.588: %G2.type.aa7 = struct_value () [concrete] @@ -820,6 +850,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: %assoc0: %Instance2.assoc_type = assoc_entity element0, @Instance2.%G2.decl [concrete] // CHECK:STDOUT: %struct_type.e: type = struct_type {.e: %empty_tuple.type} [concrete] // CHECK:STDOUT: %Instance2.impl_witness: = impl_witness file.%Instance2.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.efd: type = pattern_type %struct_type.e [concrete] // CHECK:STDOUT: %G2.type.50c: type = fn_type @G2.2 [concrete] // CHECK:STDOUT: %G2.707: %G2.type.50c = struct_value () [concrete] // CHECK:STDOUT: %Instance2.facet: %Instance2.type = facet_value %struct_type.e, (%Instance2.impl_witness) [concrete] @@ -847,8 +878,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: interface @Instance2 { // CHECK:STDOUT: %Self: %Instance2.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %G2.decl: %G2.type.aa7 = fn_decl @G2.1 [concrete = constants.%G2.588] { -// CHECK:STDOUT: %self.patt: @G2.1.%Self.as_type.loc4_15.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G2.1.%Self.as_type.loc4_15.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @G2.1.%pattern_type (%pattern_type.8d7) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G2.1.%pattern_type (%pattern_type.8d7) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @G2.1.%Self.as_type.loc4_15.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_15.1: type = splice_block %.loc4_15.2 [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)] { @@ -868,8 +899,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %struct_type.e as %Instance2.ref { // CHECK:STDOUT: %G2.decl: %G2.type.50c = fn_decl @G2.2 [concrete = constants.%G2.707] { -// CHECK:STDOUT: %self.patt: %struct_type.e = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %struct_type.e = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.efd = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.efd = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %struct_type.e = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%struct_type.e [concrete = constants.%struct_type.e] @@ -884,6 +915,7 @@ fn InstanceCallFail() { // CHECK:STDOUT: generic fn @G2.1(@Instance2.%Self: %Instance2.type) { // CHECK:STDOUT: %Self: %Instance2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_15.1 [symbolic = %pattern_type (constants.%pattern_type.8d7)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @G2.1.%Self.as_type.loc4_15.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -906,10 +938,12 @@ fn InstanceCallFail() { // CHECK:STDOUT: specific @G2.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8d7 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G2.1(constants.%Instance2.facet) { // CHECK:STDOUT: %Self => constants.%Instance2.facet // CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%struct_type.e +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.efd // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/no_prelude/import_builtin_call.carbon b/toolchain/check/testdata/impl/no_prelude/import_builtin_call.carbon index d75a810d434e..8331a5d05c9e 100644 --- a/toolchain/check/testdata/impl/no_prelude/import_builtin_call.carbon +++ b/toolchain/check/testdata/impl/no_prelude/import_builtin_call.carbon @@ -82,16 +82,19 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %Add.type: type = facet_type <@Add> [concrete] // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Op.type.31b: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d59: %Op.type.31b = struct_value () [concrete] // CHECK:STDOUT: %Add.assoc_type: type = assoc_entity_type @Add [concrete] // CHECK:STDOUT: %assoc0: %Add.assoc_type = assoc_entity element0, @Add.%Op.decl [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %MyInt.type: type = generic_class_type @MyInt [concrete] // CHECK:STDOUT: %MyInt.generic: %MyInt.type = struct_value () [concrete] // CHECK:STDOUT: %MyInt: type = class_type @MyInt, @MyInt(%N) [symbolic] @@ -99,6 +102,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %require_complete.f1b: = require_complete_type %iN.builtin [symbolic] // CHECK:STDOUT: %complete_type: = complete_type_witness %iN.builtin [symbolic] // CHECK:STDOUT: %Add.impl_witness: = impl_witness file.%Add.impl_witness_table, @impl(%N) [symbolic] +// CHECK:STDOUT: %pattern_type.a71: type = pattern_type %MyInt [symbolic] // CHECK:STDOUT: %Op.type.883: type = fn_type @Op.2, @impl(%N) [symbolic] // CHECK:STDOUT: %Op.8bc: %Op.type.883 = struct_value () [symbolic] // CHECK:STDOUT: %require_complete.fc7: = require_complete_type %MyInt [symbolic] @@ -122,17 +126,17 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: } // CHECK:STDOUT: %Add.decl: type = interface_decl @Add [concrete = constants.%Add.type] {} {} // CHECK:STDOUT: %IntLiteral.decl: %IntLiteral.type = fn_decl @IntLiteral [concrete = constants.%IntLiteral] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %n.patt: Core.IntLiteral = binding_pattern n -// CHECK:STDOUT: %n.param_patt: Core.IntLiteral = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.dc0 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.dc0 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: Core.IntLiteral = value_param call_param0 // CHECK:STDOUT: %.loc9_22.1: type = splice_block %.loc9_22.3 [concrete = Core.IntLiteral] { @@ -146,7 +150,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MyInt.decl: %MyInt.type = class_decl @MyInt [concrete = constants.%MyInt.generic] { -// CHECK:STDOUT: %N.patt.loc11_13.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc11_13.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_28.1: type = splice_block %.loc11_28.3 [concrete = Core.IntLiteral] { // CHECK:STDOUT: %IntLiteral.ref: %IntLiteral.type = name_ref IntLiteral, file.%IntLiteral.decl [concrete = constants.%IntLiteral] @@ -157,7 +161,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %N.loc11_13.1: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc11_13.2 (constants.%N)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %N.patt.loc15_14.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_14.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc15_14.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_14.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt.ref: %MyInt.type = name_ref MyInt, file.%MyInt.decl [concrete = constants.%MyInt.generic] // CHECK:STDOUT: %N.ref: Core.IntLiteral = name_ref N, %N.loc15_14.1 [symbolic = %N.loc15_14.2 (constants.%N)] @@ -174,11 +178,11 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %Add.impl_witness_table = impl_witness_table (@impl.%Op.decl), @impl [concrete] // CHECK:STDOUT: %Add.impl_witness: = impl_witness %Add.impl_witness_table, @impl(constants.%N) [symbolic = @impl.%Add.impl_witness (constants.%Add.impl_witness)] // CHECK:STDOUT: %Double.decl: %Double.type = fn_decl @Double [concrete = constants.%Double] { -// CHECK:STDOUT: %N.patt.loc19_11.1: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc19_11.2 (constants.%N.patt)] -// CHECK:STDOUT: %x.patt: @Double.%MyInt.loc19_39.2 (%MyInt) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Double.%MyInt.loc19_39.2 (%MyInt) = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Double.%MyInt.loc19_39.2 (%MyInt) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Double.%MyInt.loc19_39.2 (%MyInt) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt.loc19_11.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc19_11.2 (constants.%N.patt)] +// CHECK:STDOUT: %x.patt: @Double.%pattern_type (%pattern_type.a71) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Double.%pattern_type (%pattern_type.a71) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Double.%pattern_type (%pattern_type.a71) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Double.%pattern_type (%pattern_type.a71) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt.ref.loc19_45: %MyInt.type = name_ref MyInt, file.%MyInt.decl [concrete = constants.%MyInt.generic] // CHECK:STDOUT: %N.ref.loc19_51: Core.IntLiteral = name_ref N, %N.loc19_11.1 [symbolic = %N.loc19_11.2 (constants.%N)] @@ -205,12 +209,12 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: interface @Add { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Op.decl: %Op.type.31b = fn_decl @Op.1 [concrete = constants.%Op.d59] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.8f9) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.8f9) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.8f9) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.8f9) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.8f9) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.8f9) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc5_37: %Add.type = name_ref Self, @Add.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_37: type = facet_access_type %Self.ref.loc5_37 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] @@ -242,7 +246,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%N.loc15_14.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc15_14.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc15_14.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc15_14.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_14.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc15_14.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_14.2 (constants.%N.patt)] // CHECK:STDOUT: %MyInt.loc15_39.2: type = class_type @MyInt, @MyInt(%N.loc15_14.2) [symbolic = %MyInt.loc15_39.2 (constants.%MyInt)] // CHECK:STDOUT: %Add.impl_witness: = impl_witness file.%Add.impl_witness_table, @impl(%N.loc15_14.2) [symbolic = %Add.impl_witness (constants.%Add.impl_witness)] // CHECK:STDOUT: @@ -253,12 +257,12 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: impl: %MyInt.loc15_39.1 as %Add.ref { // CHECK:STDOUT: %Op.decl: @impl.%Op.type (%Op.type.883) = fn_decl @Op.2 [symbolic = @impl.%Op (constants.%Op.8bc)] { -// CHECK:STDOUT: %self.patt: @Op.2.%MyInt (%MyInt) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.2.%MyInt (%MyInt) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.2.%MyInt (%MyInt) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.2.%MyInt (%MyInt) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.2.%MyInt (%MyInt) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.2.%MyInt (%MyInt) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.2.%pattern_type (%pattern_type.a71) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.2.%pattern_type (%pattern_type.a71) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.2.%pattern_type (%pattern_type.a71) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.2.%pattern_type (%pattern_type.a71) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.2.%pattern_type (%pattern_type.a71) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.2.%pattern_type (%pattern_type.a71) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc16_37: type = name_ref Self, @impl.%MyInt.loc15_39.1 [symbolic = %MyInt (constants.%MyInt)] // CHECK:STDOUT: %self.param: @Op.2.%MyInt (%MyInt) = value_param call_param0 @@ -279,7 +283,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic class @MyInt(%N.loc11_13.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc11_13.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc11_13.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc11_13.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc11_13.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %iN.builtin: type = int_type signed, %N.loc11_13.2 [symbolic = %iN.builtin (constants.%iN.builtin)] @@ -306,6 +310,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: generic fn @Op.1(@Add.%Self: %Add.type) { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_15.1 [symbolic = %pattern_type (constants.%pattern_type.8f9)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type), %other.param: @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type)) -> @Op.1.%Self.as_type.loc5_15.1 (%Self.as_type); // CHECK:STDOUT: } @@ -317,6 +322,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: generic fn @Op.2(@impl.%N.loc15_14.1: Core.IntLiteral) { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] // CHECK:STDOUT: %MyInt: type = class_type @MyInt, @MyInt(%N) [symbolic = %MyInt (constants.%MyInt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %MyInt [symbolic = %pattern_type (constants.%pattern_type.a71)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -325,8 +331,9 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Double(%N.loc19_11.1: Core.IntLiteral) { // CHECK:STDOUT: %N.loc19_11.2: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N.loc19_11.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc19_11.2: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc19_11.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc19_11.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc19_11.2 (constants.%N.patt)] // CHECK:STDOUT: %MyInt.loc19_39.2: type = class_type @MyInt, @MyInt(%N.loc19_11.2) [symbolic = %MyInt.loc19_39.2 (constants.%MyInt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %MyInt.loc19_39.2 [symbolic = %pattern_type (constants.%pattern_type.a71)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %MyInt.loc19_39.2 [symbolic = %require_complete (constants.%require_complete.fc7)] @@ -360,6 +367,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: specific @Op.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8f9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MyInt(constants.%N) { @@ -391,6 +399,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: specific @Op.2(constants.%N) { // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: %MyInt => constants.%MyInt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MyInt(@Op.2.%N) {} @@ -398,12 +407,14 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: specific @Op.1(constants.%Add.facet.0e5) { // CHECK:STDOUT: %Self => constants.%Add.facet.0e5 // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%MyInt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Double(constants.%N) { // CHECK:STDOUT: %N.loc19_11.2 => constants.%N // CHECK:STDOUT: %N.patt.loc19_11.2 => constants.%N.patt // CHECK:STDOUT: %MyInt.loc19_39.2 => constants.%MyInt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @MyInt(@Double.%N.loc19_11.2) {} @@ -411,6 +422,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: specific @Op.1(constants.%Add.facet.5a7) { // CHECK:STDOUT: %Self => constants.%Add.facet.5a7 // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%MyInt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(@Double.%Add.facet.loc20_11) {} @@ -424,10 +436,12 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %iN.builtin: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %complete_type.a87: = complete_type_witness %iN.builtin [symbolic] // CHECK:STDOUT: %MyInt.09f: type = class_type @MyInt, @MyInt(%N) [symbolic] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %require_complete.f1b: = require_complete_type %iN.builtin [symbolic] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %MyInt.f30: type = class_type @MyInt, @MyInt(%int_64) [concrete] +// CHECK:STDOUT: %pattern_type.e50: type = pattern_type %MyInt.f30 [concrete] // CHECK:STDOUT: %LocalDouble.type: type = fn_type @LocalDouble [concrete] // CHECK:STDOUT: %LocalDouble: %LocalDouble.type = struct_value () [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64 [concrete] @@ -438,10 +452,12 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %assoc0: %Add.assoc_type = assoc_entity element0, imports.%Main.import_ref.5a3 [concrete] // CHECK:STDOUT: %Op.type.31b: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Add.impl_witness_table = impl_witness_table (imports.%Main.import_ref.19b), @impl [concrete] // CHECK:STDOUT: %Add.impl_witness.e7c: = impl_witness %Add.impl_witness_table, @impl(%N) [symbolic] // CHECK:STDOUT: %Op.type.883: type = fn_type @Op.2, @impl(%N) [symbolic] // CHECK:STDOUT: %Op.8bc: %Op.type.883 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.a71: type = pattern_type %MyInt.09f [symbolic] // CHECK:STDOUT: %require_complete.fc7: = require_complete_type %MyInt.09f [symbolic] // CHECK:STDOUT: %Add.impl_witness.976: = impl_witness %Add.impl_witness_table, @impl(%int_64) [concrete] // CHECK:STDOUT: %Op.type.5a6: type = fn_type @Op.2, @impl(%int_64) [concrete] @@ -469,7 +485,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %Main.Double: %Double.type = import_ref Main//generic_impl, Double, loaded [concrete = constants.%Double] // CHECK:STDOUT: %Main.import_ref.f1e294.1: Core.IntLiteral = import_ref Main//generic_impl, loc11_13, loaded [symbolic = @MyInt.%N (constants.%N)] // CHECK:STDOUT: %Main.import_ref.9e9: = import_ref Main//generic_impl, loc13_1, loaded [symbolic = @MyInt.%complete_type (constants.%complete_type.a87)] -// CHECK:STDOUT: %Main.import_ref.697 = import_ref Main//generic_impl, inst89 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.697 = import_ref Main//generic_impl, inst93 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.07c = import_ref Main//generic_impl, inst17 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.f99: %Add.assoc_type = import_ref Main//generic_impl, loc5_41, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Main.Op = import_ref Main//generic_impl, Op, unloaded @@ -494,10 +510,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %LocalDouble.decl: %LocalDouble.type = fn_decl @LocalDouble [concrete = constants.%LocalDouble] { -// CHECK:STDOUT: %x.patt: %MyInt.f30 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %MyInt.f30 = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %MyInt.f30 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %MyInt.f30 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.e50 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.e50 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.e50 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.e50 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt.ref.loc8_33: %MyInt.type = name_ref MyInt, imports.%Main.MyInt [concrete = constants.%MyInt.generic] // CHECK:STDOUT: %int_64.loc8_39: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] @@ -513,10 +529,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %return: ref %MyInt.f30 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallImportedDouble.decl: %CallImportedDouble.type = fn_decl @CallImportedDouble [concrete = constants.%CallImportedDouble] { -// CHECK:STDOUT: %n.patt: %MyInt.f30 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %MyInt.f30 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %MyInt.f30 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %MyInt.f30 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.e50 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.e50 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.e50 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.e50 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %MyInt.ref.loc12_40: %MyInt.type = name_ref MyInt, imports.%Main.MyInt [concrete = constants.%MyInt.generic] // CHECK:STDOUT: %int_64.loc12_46: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] @@ -542,7 +558,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(imports.%Main.import_ref.f1e294.2: Core.IntLiteral) [from "generic_impl.carbon"] { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] // CHECK:STDOUT: %MyInt: type = class_type @MyInt, @MyInt(%N) [symbolic = %MyInt (constants.%MyInt.09f)] // CHECK:STDOUT: %Add.impl_witness: = impl_witness constants.%Add.impl_witness_table, @impl(%N) [symbolic = %Add.impl_witness (constants.%Add.impl_witness.e7c)] // CHECK:STDOUT: @@ -559,7 +575,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic class @MyInt(imports.%Main.import_ref.f1e294.1: Core.IntLiteral) [from "generic_impl.carbon"] { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %iN.builtin: type = int_type signed, %N [symbolic = %iN.builtin (constants.%iN.builtin)] @@ -593,6 +609,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: generic fn @Op.1(imports.%Main.import_ref.e5e: %Add.type) [from "generic_impl.carbon"] { // CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.8f9)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -600,6 +617,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: generic fn @Op.2(imports.%Main.import_ref.f1e294.3: Core.IntLiteral) [from "generic_impl.carbon"] { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] // CHECK:STDOUT: %MyInt: type = class_type @MyInt, @MyInt(%N) [symbolic = %MyInt (constants.%MyInt.09f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %MyInt [symbolic = %pattern_type (constants.%pattern_type.a71)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -619,8 +637,9 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Double(imports.%Main.import_ref.f1e294.4: Core.IntLiteral) [from "generic_impl.carbon"] { // CHECK:STDOUT: %N: Core.IntLiteral = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] // CHECK:STDOUT: %MyInt: type = class_type @MyInt, @MyInt(%N) [symbolic = %MyInt (constants.%MyInt.09f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %MyInt [symbolic = %pattern_type (constants.%pattern_type.a71)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %MyInt [symbolic = %require_complete (constants.%require_complete.fc7)] @@ -656,6 +675,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: specific @Op.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.8f9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%N) { @@ -679,6 +699,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: specific @Op.2(constants.%N) { // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: %MyInt => constants.%MyInt.09f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%int_64) { @@ -696,6 +717,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: specific @Op.2(constants.%int_64) { // CHECK:STDOUT: %N => constants.%int_64 // CHECK:STDOUT: %MyInt => constants.%MyInt.f30 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e50 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -706,11 +728,13 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %N => constants.%N // CHECK:STDOUT: %N.patt => constants.%N.patt // CHECK:STDOUT: %MyInt => constants.%MyInt.09f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%Add.facet.5a7) { // CHECK:STDOUT: %Self => constants.%Add.facet.5a7 // CHECK:STDOUT: %Self.as_type => constants.%MyInt.09f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a71 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(@Double.%Add.facet) {} @@ -719,6 +743,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %N => constants.%int_64 // CHECK:STDOUT: %N.patt => constants.%N.patt // CHECK:STDOUT: %MyInt => constants.%MyInt.f30 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e50 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.4a1 @@ -732,38 +757,45 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: specific @Op.1(constants.%Add.facet.434) { // CHECK:STDOUT: %Self => constants.%Add.facet.434 // CHECK:STDOUT: %Self.as_type => constants.%MyInt.f30 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e50 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- convert_symbolic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] // CHECK:STDOUT: %ToLiteral.type.e7c: type = fn_type @ToLiteral.1 [concrete] // CHECK:STDOUT: %ToLiteral.cf3: %ToLiteral.type.e7c = struct_value () [concrete] // CHECK:STDOUT: %FromLiteral.type: type = fn_type @FromLiteral [concrete] // CHECK:STDOUT: %FromLiteral: %FromLiteral.type = struct_value () [concrete] // CHECK:STDOUT: %N.987: %i32.builtin = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.36b: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %N.patt.24f: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %int.convert_checked.346: init Core.IntLiteral = call %ToLiteral.cf3(%N.987) [symbolic] // CHECK:STDOUT: %iN.builtin.016: type = int_type signed, %int.convert_checked.346 [symbolic] +// CHECK:STDOUT: %pattern_type.bd6: type = pattern_type %iN.builtin.016 [symbolic] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.88f: = require_complete_type %iN.builtin.016 [symbolic] // CHECK:STDOUT: %Make.specific_fn: = specific_function %Make, @Make(%N.987) [symbolic] // CHECK:STDOUT: %OtherInt: type = class_type @OtherInt [concrete] +// CHECK:STDOUT: %pattern_type.710: type = pattern_type %OtherInt [concrete] // CHECK:STDOUT: %ToLiteral.type.67d: type = fn_type @ToLiteral.2 [concrete] // CHECK:STDOUT: %ToLiteral.ec2: %ToLiteral.type.67d = struct_value () [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %N.335: %OtherInt = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt.59d: %OtherInt = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %N.patt.eba: %pattern_type.710 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %ToLiteral.bound: = bound_method %N.335, %ToLiteral.ec2 [symbolic] // CHECK:STDOUT: %int.convert_checked.b6b: init Core.IntLiteral = call %ToLiteral.bound(%N.335) [symbolic] // CHECK:STDOUT: %iN.builtin.9ef: type = int_type signed, %int.convert_checked.b6b [symbolic] +// CHECK:STDOUT: %pattern_type.9eb: type = pattern_type %iN.builtin.9ef [symbolic] // CHECK:STDOUT: %MakeFromClass.type: type = fn_type @MakeFromClass [concrete] // CHECK:STDOUT: %MakeFromClass: %MakeFromClass.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.c7d: = require_complete_type %iN.builtin.9ef [symbolic] @@ -781,17 +813,17 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: .MakeFromClass = %MakeFromClass.decl // CHECK:STDOUT: } // CHECK:STDOUT: %IntLiteral.decl: %IntLiteral.type = fn_decl @IntLiteral [concrete = constants.%IntLiteral] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %n.patt: Core.IntLiteral = binding_pattern n -// CHECK:STDOUT: %n.param_patt: Core.IntLiteral = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.dc0 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.dc0 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: Core.IntLiteral = value_param call_param0 // CHECK:STDOUT: %.loc5_22.1: type = splice_block %.loc5_22.3 [concrete = Core.IntLiteral] { @@ -805,10 +837,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ToLiteral.decl.loc6: %ToLiteral.type.e7c = fn_decl @ToLiteral.1 [concrete = constants.%ToLiteral.cf3] { -// CHECK:STDOUT: %n.patt: %i32.builtin = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32.builtin = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.956 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.956 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %IntLiteral.ref: %IntLiteral.type = name_ref IntLiteral, file.%IntLiteral.decl [concrete = constants.%IntLiteral] // CHECK:STDOUT: %int_literal.make_type: init type = call %IntLiteral.ref() [concrete = Core.IntLiteral] @@ -827,10 +859,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %return: ref Core.IntLiteral = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %FromLiteral.decl: %FromLiteral.type = fn_decl @FromLiteral [concrete = constants.%FromLiteral] { -// CHECK:STDOUT: %n.patt: Core.IntLiteral = binding_pattern n -// CHECK:STDOUT: %n.param_patt: Core.IntLiteral = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32.builtin = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32.builtin = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.dc0 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.dc0 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Int.ref: %Int.type = name_ref Int, file.%Int.decl [concrete = constants.%Int] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -849,9 +881,9 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %return: ref %i32.builtin = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %N.patt.loc9_9.1: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc9_9.2 (constants.%N.patt.36b)] -// CHECK:STDOUT: %return.patt: @Make.%iN.builtin (%iN.builtin.016) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Make.%iN.builtin (%iN.builtin.016) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %N.patt.loc9_9.1: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc9_9.2 (constants.%N.patt.24f)] +// CHECK:STDOUT: %return.patt: @Make.%pattern_type (%pattern_type.bd6) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Make.%pattern_type (%pattern_type.bd6) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Int.ref.loc9_25: %Int.type = name_ref Int, file.%Int.decl [concrete = constants.%Int] // CHECK:STDOUT: %ToLiteral.ref: %ToLiteral.type.e7c = name_ref ToLiteral, file.%ToLiteral.decl.loc6 [concrete = constants.%ToLiteral.cf3] @@ -875,10 +907,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: } // CHECK:STDOUT: %OtherInt.decl: type = class_decl @OtherInt [concrete = constants.%OtherInt] {} {} // CHECK:STDOUT: %ToLiteral.decl.loc16: %ToLiteral.type.67d = fn_decl @ToLiteral.2 [concrete = constants.%ToLiteral.ec2] { -// CHECK:STDOUT: %self.patt: %OtherInt = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %OtherInt = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.710 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.710 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %IntLiteral.ref.loc16: %IntLiteral.type = name_ref IntLiteral, file.%IntLiteral.decl [concrete = constants.%IntLiteral] // CHECK:STDOUT: %int_literal.make_type.loc16: init type = call %IntLiteral.ref.loc16() [concrete = Core.IntLiteral] @@ -891,9 +923,9 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %return.loc16: ref Core.IntLiteral = return_slot %return.param.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: %MakeFromClass.decl: %MakeFromClass.type = fn_decl @MakeFromClass [concrete = constants.%MakeFromClass] { -// CHECK:STDOUT: %N.patt.loc18_18.1: %OtherInt = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc18_18.2 (constants.%N.patt.59d)] -// CHECK:STDOUT: %return.patt: @MakeFromClass.%iN.builtin (%iN.builtin.9ef) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @MakeFromClass.%iN.builtin (%iN.builtin.9ef) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %N.patt.loc18_18.1: %pattern_type.710 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc18_18.2 (constants.%N.patt.eba)] +// CHECK:STDOUT: %return.patt: @MakeFromClass.%pattern_type (%pattern_type.9eb) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @MakeFromClass.%pattern_type (%pattern_type.9eb) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Int.ref: %Int.type = name_ref Int, file.%Int.decl [concrete = constants.%Int] // CHECK:STDOUT: %N.ref.loc18_39: %OtherInt = name_ref N, %N.loc18_18.1 [symbolic = %N.loc18_18.2 (constants.%N.335)] @@ -920,10 +952,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %.loc12_16.2: type = converted %int.make_type_signed, %.loc12_16.1 [concrete = constants.%i32.builtin] // CHECK:STDOUT: adapt_decl %.loc12_16.2 [concrete] // CHECK:STDOUT: %ToLiteral.decl: %ToLiteral.type.67d = fn_decl @ToLiteral.2 [concrete = constants.%ToLiteral.ec2] { -// CHECK:STDOUT: %self.patt: %OtherInt = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %OtherInt = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: Core.IntLiteral = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: Core.IntLiteral = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.710 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.710 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.dc0 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.dc0 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %IntLiteral.ref.loc13: %IntLiteral.type = name_ref IntLiteral, file.%IntLiteral.decl [concrete = constants.%IntLiteral] // CHECK:STDOUT: %int_literal.make_type.loc13: init type = call %IntLiteral.ref.loc13() [concrete = Core.IntLiteral] @@ -955,9 +987,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Make(%N.loc9_9.1: %i32.builtin) { // CHECK:STDOUT: %N.loc9_9.2: %i32.builtin = bind_symbolic_name N, 0 [symbolic = %N.loc9_9.2 (constants.%N.987)] -// CHECK:STDOUT: %N.patt.loc9_9.2: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc9_9.2 (constants.%N.patt.36b)] +// CHECK:STDOUT: %N.patt.loc9_9.2: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc9_9.2 (constants.%N.patt.24f)] // CHECK:STDOUT: %int.convert_checked.loc9_40.2: init Core.IntLiteral = call constants.%ToLiteral.cf3(%N.loc9_9.2) [symbolic = %int.convert_checked.loc9_40.2 (constants.%int.convert_checked.346)] // CHECK:STDOUT: %iN.builtin: type = int_type signed, %int.convert_checked.loc9_40.2 [symbolic = %iN.builtin (constants.%iN.builtin.016)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %iN.builtin [symbolic = %pattern_type (constants.%pattern_type.bd6)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %iN.builtin [symbolic = %require_complete (constants.%require_complete.88f)] @@ -979,10 +1012,11 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @MakeFromClass(%N.loc18_18.1: %OtherInt) { // CHECK:STDOUT: %N.loc18_18.2: %OtherInt = bind_symbolic_name N, 0 [symbolic = %N.loc18_18.2 (constants.%N.335)] -// CHECK:STDOUT: %N.patt.loc18_18.2: %OtherInt = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc18_18.2 (constants.%N.patt.59d)] +// CHECK:STDOUT: %N.patt.loc18_18.2: %pattern_type.710 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc18_18.2 (constants.%N.patt.eba)] // CHECK:STDOUT: %ToLiteral.bound.loc18_40.2: = bound_method %N.loc18_18.2, constants.%ToLiteral.ec2 [symbolic = %ToLiteral.bound.loc18_40.2 (constants.%ToLiteral.bound)] // CHECK:STDOUT: %int.convert_checked.loc18_51.2: init Core.IntLiteral = call %ToLiteral.bound.loc18_40.2(%N.loc18_18.2) [symbolic = %int.convert_checked.loc18_51.2 (constants.%int.convert_checked.b6b)] // CHECK:STDOUT: %iN.builtin: type = int_type signed, %int.convert_checked.loc18_51.2 [symbolic = %iN.builtin (constants.%iN.builtin.9ef)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %iN.builtin [symbolic = %pattern_type (constants.%pattern_type.9eb)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %iN.builtin [symbolic = %require_complete (constants.%require_complete.c7d)] @@ -1002,9 +1036,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%N.987) { // CHECK:STDOUT: %N.loc9_9.2 => constants.%N.987 -// CHECK:STDOUT: %N.patt.loc9_9.2 => constants.%N.patt.36b +// CHECK:STDOUT: %N.patt.loc9_9.2 => constants.%N.patt.24f // CHECK:STDOUT: %int.convert_checked.loc9_40.2 => constants.%int.convert_checked.346 // CHECK:STDOUT: %iN.builtin => constants.%iN.builtin.016 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.bd6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.88f @@ -1015,10 +1050,11 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: specific @MakeFromClass(constants.%N.335) { // CHECK:STDOUT: %N.loc18_18.2 => constants.%N.335 -// CHECK:STDOUT: %N.patt.loc18_18.2 => constants.%N.patt.59d +// CHECK:STDOUT: %N.patt.loc18_18.2 => constants.%N.patt.eba // CHECK:STDOUT: %ToLiteral.bound.loc18_40.2 => constants.%ToLiteral.bound // CHECK:STDOUT: %int.convert_checked.loc18_51.2 => constants.%int.convert_checked.b6b // CHECK:STDOUT: %iN.builtin => constants.%iN.builtin.9ef +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9eb // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.c7d @@ -1034,16 +1070,19 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %int_64.fab: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %i64.builtin: type = int_type signed, %int_64.fab [concrete] +// CHECK:STDOUT: %pattern_type.e13: type = pattern_type %i64.builtin [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] -// CHECK:STDOUT: %N.patt.36b: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] +// CHECK:STDOUT: %N.patt.24f: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.987: %i32.builtin = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %ToLiteral.type.e7c: type = fn_type @ToLiteral.1 [concrete] // CHECK:STDOUT: %ToLiteral.cf3: %ToLiteral.type.e7c = struct_value () [concrete] // CHECK:STDOUT: %int.convert_checked.346: init Core.IntLiteral = call %ToLiteral.cf3(%N.987) [symbolic] // CHECK:STDOUT: %iN.builtin.016: type = int_type signed, %int.convert_checked.346 [symbolic] +// CHECK:STDOUT: %pattern_type.bd6: type = pattern_type %iN.builtin.016 [symbolic] // CHECK:STDOUT: %require_complete.88f: = require_complete_type %iN.builtin.016 [symbolic] // CHECK:STDOUT: %Make.specific_fn.8ec: = specific_function %Make, @Make(%N.987) [symbolic] // CHECK:STDOUT: %FromLiteral.type: type = fn_type @FromLiteral [concrete] @@ -1054,13 +1093,15 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %MakeFromClass: %MakeFromClass.type = struct_value () [concrete] // CHECK:STDOUT: %OtherInt: type = class_type @OtherInt [concrete] // CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] -// CHECK:STDOUT: %N.patt.59d: %OtherInt = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.710: type = pattern_type %OtherInt [concrete] +// CHECK:STDOUT: %N.patt.eba: %pattern_type.710 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %N.335: %OtherInt = bind_symbolic_name N, 0 [symbolic] // CHECK:STDOUT: %ToLiteral.type.67d: type = fn_type @ToLiteral.2 [concrete] // CHECK:STDOUT: %ToLiteral.ec2: %ToLiteral.type.67d = struct_value () [concrete] // CHECK:STDOUT: %ToLiteral.bound.8e3: = bound_method %N.335, %ToLiteral.ec2 [symbolic] // CHECK:STDOUT: %int.convert_checked.b6b: init Core.IntLiteral = call %ToLiteral.bound.8e3(%N.335) [symbolic] // CHECK:STDOUT: %iN.builtin.9ef: type = int_type signed, %int.convert_checked.b6b [symbolic] +// CHECK:STDOUT: %pattern_type.9eb: type = pattern_type %iN.builtin.9ef [symbolic] // CHECK:STDOUT: %require_complete.c7d: = require_complete_type %iN.builtin.9ef [symbolic] // CHECK:STDOUT: %MakeFromClass.specific_fn.004: = specific_function %MakeFromClass, @MakeFromClass(%N.335) [symbolic] // CHECK:STDOUT: %int_64.06b: %OtherInt = int_value 64 [concrete] @@ -1079,7 +1120,7 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: %Main.MakeFromClass: %MakeFromClass.type = import_ref Main//convert_symbolic, MakeFromClass, loaded [concrete = constants.%MakeFromClass] // CHECK:STDOUT: %Main.import_ref.85e: %i32.builtin = import_ref Main//convert_symbolic, loc9_9, loaded [symbolic = @Make.%N (constants.%N.987)] // CHECK:STDOUT: %Main.import_ref.b03: = import_ref Main//convert_symbolic, loc14_1, loaded [concrete = constants.%complete_type.f8a] -// CHECK:STDOUT: %Main.import_ref.d11 = import_ref Main//convert_symbolic, inst129 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.d11 = import_ref Main//convert_symbolic, inst134 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.8f7 = import_ref Main//convert_symbolic, loc13_45, unloaded // CHECK:STDOUT: %Main.import_ref.77d: %OtherInt = import_ref Main//convert_symbolic, loc18_18, loaded [symbolic = @MakeFromClass.%N (constants.%N.335)] // CHECK:STDOUT: } @@ -1098,8 +1139,8 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %m.patt: %i64.builtin = binding_pattern m -// CHECK:STDOUT: %.loc6_1: %i64.builtin = var_pattern %m.patt +// CHECK:STDOUT: %m.patt: %pattern_type.e13 = binding_pattern m +// CHECK:STDOUT: %.loc6_1: %pattern_type.e13 = var_pattern %m.patt // CHECK:STDOUT: } // CHECK:STDOUT: %m.var: ref %i64.builtin = var m // CHECK:STDOUT: %.loc6_14.1: type = splice_block %.loc6_14.3 [concrete = constants.%i64.builtin] { @@ -1111,8 +1152,8 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: } // CHECK:STDOUT: %m: ref %i64.builtin = bind_name m, %m.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i64.builtin = binding_pattern n -// CHECK:STDOUT: %.loc7_1: %i64.builtin = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.e13 = binding_pattern n +// CHECK:STDOUT: %.loc7_1: %pattern_type.e13 = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i64.builtin = var n // CHECK:STDOUT: %.loc7_14.1: type = splice_block %.loc7_14.3 [concrete = constants.%i64.builtin] { @@ -1137,9 +1178,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Make(imports.%Main.import_ref.85e: %i32.builtin) [from "convert_symbolic.carbon"] { // CHECK:STDOUT: %N: %i32.builtin = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.987)] -// CHECK:STDOUT: %N.patt: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt.36b)] +// CHECK:STDOUT: %N.patt: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt.24f)] // CHECK:STDOUT: %int.convert_checked: init Core.IntLiteral = call constants.%ToLiteral.cf3(%N) [symbolic = %int.convert_checked (constants.%int.convert_checked.346)] // CHECK:STDOUT: %iN.builtin: type = int_type signed, %int.convert_checked [symbolic = %iN.builtin (constants.%iN.builtin.016)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %iN.builtin [symbolic = %pattern_type (constants.%pattern_type.bd6)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %iN.builtin [symbolic = %require_complete (constants.%require_complete.88f)] @@ -1154,10 +1196,11 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: generic fn @MakeFromClass(imports.%Main.import_ref.77d: %OtherInt) [from "convert_symbolic.carbon"] { // CHECK:STDOUT: %N: %OtherInt = bind_symbolic_name N, 0 [symbolic = %N (constants.%N.335)] -// CHECK:STDOUT: %N.patt: %OtherInt = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt.59d)] +// CHECK:STDOUT: %N.patt: %pattern_type.710 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt.eba)] // CHECK:STDOUT: %ToLiteral.bound: = bound_method %N, constants.%ToLiteral.ec2 [symbolic = %ToLiteral.bound (constants.%ToLiteral.bound.8e3)] // CHECK:STDOUT: %int.convert_checked: init Core.IntLiteral = call %ToLiteral.bound(%N) [symbolic = %int.convert_checked (constants.%int.convert_checked.b6b)] // CHECK:STDOUT: %iN.builtin: type = int_type signed, %int.convert_checked [symbolic = %iN.builtin (constants.%iN.builtin.9ef)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %iN.builtin [symbolic = %pattern_type (constants.%pattern_type.9eb)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %iN.builtin [symbolic = %require_complete (constants.%require_complete.c7d)] @@ -1196,9 +1239,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%N.987) { // CHECK:STDOUT: %N => constants.%N.987 -// CHECK:STDOUT: %N.patt => constants.%N.patt.36b +// CHECK:STDOUT: %N.patt => constants.%N.patt.24f // CHECK:STDOUT: %int.convert_checked => constants.%int.convert_checked.346 // CHECK:STDOUT: %iN.builtin => constants.%iN.builtin.016 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.bd6 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.88f @@ -1209,9 +1253,10 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: specific @Make(constants.%int_64.f82) { // CHECK:STDOUT: %N => constants.%int_64.f82 -// CHECK:STDOUT: %N.patt => constants.%N.patt.36b +// CHECK:STDOUT: %N.patt => constants.%N.patt.24f // CHECK:STDOUT: %int.convert_checked => constants.%int_64.fab // CHECK:STDOUT: %iN.builtin => constants.%i64.builtin +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e13 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.4a1 @@ -1220,10 +1265,11 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: specific @MakeFromClass(constants.%N.335) { // CHECK:STDOUT: %N => constants.%N.335 -// CHECK:STDOUT: %N.patt => constants.%N.patt.59d +// CHECK:STDOUT: %N.patt => constants.%N.patt.eba // CHECK:STDOUT: %ToLiteral.bound => constants.%ToLiteral.bound.8e3 // CHECK:STDOUT: %int.convert_checked => constants.%int.convert_checked.b6b // CHECK:STDOUT: %iN.builtin => constants.%iN.builtin.9ef +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9eb // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.c7d @@ -1234,10 +1280,11 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: // CHECK:STDOUT: specific @MakeFromClass(constants.%int_64.06b) { // CHECK:STDOUT: %N => constants.%int_64.06b -// CHECK:STDOUT: %N.patt => constants.%N.patt.59d +// CHECK:STDOUT: %N.patt => constants.%N.patt.eba // CHECK:STDOUT: %ToLiteral.bound => constants.%ToLiteral.bound.735 // CHECK:STDOUT: %int.convert_checked => constants.%int_64.fab // CHECK:STDOUT: %iN.builtin => constants.%i64.builtin +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e13 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.4a1 diff --git a/toolchain/check/testdata/impl/no_prelude/import_compound.carbon b/toolchain/check/testdata/impl/no_prelude/import_compound.carbon index 0e2684046bce..7eee4d79447d 100644 --- a/toolchain/check/testdata/impl/no_prelude/import_compound.carbon +++ b/toolchain/check/testdata/impl/no_prelude/import_compound.carbon @@ -108,12 +108,15 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.96f: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.96f = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert: %Convert.type = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -125,7 +128,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc3_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc3_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -133,7 +136,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc3_22.1: type) { // CHECK:STDOUT: %Dest.loc3_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc3_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc3_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -146,10 +149,10 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type) = fn_decl @Convert [symbolic = @ImplicitAs.%Convert (constants.%Convert)] { -// CHECK:STDOUT: %self.patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc3_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param call_param0 @@ -178,6 +181,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.as_type.loc4_20.1 [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc4_28: type = pattern_type %Dest [symbolic = %pattern_type.loc4_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type)) -> @Convert.%Dest (%Dest); // CHECK:STDOUT: } @@ -192,6 +197,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_20.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.%Dest) {} @@ -216,11 +223,13 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Instance.type: type = facet_type <@Instance> [concrete] // CHECK:STDOUT: %Self.cf8: %Instance.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.cf8 [symbolic] +// CHECK:STDOUT: %pattern_type.4e4: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %G.type.1e1: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %G.449: %G.type.1e1 = struct_value () [concrete] // CHECK:STDOUT: %Instance.assoc_type: type = assoc_entity_type @Instance [concrete] // CHECK:STDOUT: %assoc0.ab8: %Instance.assoc_type = assoc_entity element0, @Instance.%G.decl [concrete] // CHECK:STDOUT: %Instance.impl_witness: = impl_witness file.%Instance.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.9b2: type = pattern_type %struct_type.i [concrete] // CHECK:STDOUT: %G.type.0c0: type = fn_type @G.2 [concrete] // CHECK:STDOUT: %G.484: %G.type.0c0 = struct_value () [concrete] // CHECK:STDOUT: %Instance.facet: %Instance.type = facet_value %struct_type.i, (%Instance.impl_witness) [concrete] @@ -265,8 +274,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: interface @Instance { // CHECK:STDOUT: %Self: %Instance.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.cf8] // CHECK:STDOUT: %G.decl: %G.type.1e1 = fn_decl @G.1 [concrete = constants.%G.449] { -// CHECK:STDOUT: %self.patt: @G.1.%Self.as_type.loc12_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.1.%Self.as_type.loc12_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @G.1.%pattern_type (%pattern_type.4e4) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.1.%pattern_type (%pattern_type.4e4) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @G.1.%Self.as_type.loc12_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc12_14.1: type = splice_block %.loc12_14.2 [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type)] { @@ -294,8 +303,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.477: %struct_type.i as %Instance.ref { // CHECK:STDOUT: %G.decl: %G.type.0c0 = fn_decl @G.2 [concrete = constants.%G.484] { -// CHECK:STDOUT: %self.patt: %struct_type.i = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %struct_type.i = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.9b2 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.9b2 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %struct_type.i = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.477.%struct_type.i [concrete = constants.%struct_type.i] @@ -319,6 +328,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: generic fn @G.1(@Instance.%Self: %Instance.type) { // CHECK:STDOUT: %Self: %Instance.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.cf8)] // CHECK:STDOUT: %Self.as_type.loc12_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc12_14.1 [symbolic = %pattern_type (constants.%pattern_type.4e4)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @G.1.%Self.as_type.loc12_14.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -335,11 +345,13 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: specific @G.1(constants.%Self.cf8) { // CHECK:STDOUT: %Self => constants.%Self.cf8 // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G.1(constants.%Instance.facet) { // CHECK:STDOUT: %Self => constants.%Instance.facet // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%struct_type.i +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.9b2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_non-instance_success.carbon @@ -442,6 +454,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete] +// CHECK:STDOUT: %pattern_type.9b2: type = pattern_type %struct_type.i [concrete] // CHECK:STDOUT: %NonInstanceCallImportFail.type: type = fn_type @NonInstanceCallImportFail [concrete] // CHECK:STDOUT: %NonInstanceCallImportFail: %NonInstanceCallImportFail.type = struct_value () [concrete] // CHECK:STDOUT: %NonInstance.type: type = facet_type <@NonInstance> [concrete] @@ -451,10 +464,13 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.a4a: type = facet_type <@ImplicitAs, @ImplicitAs(%NonInstance.type)> [concrete] @@ -479,11 +495,11 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Main.F = import_ref Main//lib, F, unloaded // CHECK:STDOUT: %Main.import_ref.f85: %NonInstance.type = import_ref Main//lib, inst17 [no loc], loaded [symbolic = constants.%Self.73c] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst26 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst27 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//default, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst26 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst27 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: %Main.import_ref.eb8 = import_ref Main//lib, loc7_30, unloaded // CHECK:STDOUT: %Main.import_ref.c9a3b6.1: type = import_ref Main//lib, loc7_13, loaded [concrete = constants.%struct_type.i] @@ -506,8 +522,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %NonInstanceCallImportFail.decl: %NonInstanceCallImportFail.type = fn_decl @NonInstanceCallImportFail [concrete = constants.%NonInstanceCallImportFail] { -// CHECK:STDOUT: %n.patt: %struct_type.i = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %struct_type.i = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.9b2 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.9b2 = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %struct_type.i = value_param call_param0 // CHECK:STDOUT: %.loc6_40: type = splice_block %struct_type.i [concrete = constants.%struct_type.i] { @@ -528,7 +544,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "core.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -581,6 +597,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -601,6 +619,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%NonInstance.type) { @@ -622,6 +642,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %struct_type.i [concrete] +// CHECK:STDOUT: %pattern_type.72c: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %NonInstanceCallIndirectImport.type: type = fn_type @NonInstanceCallIndirectImport [concrete] // CHECK:STDOUT: %NonInstanceCallIndirectImport: %NonInstanceCallIndirectImport.type = struct_value () [concrete] // CHECK:STDOUT: %NonInstance.type: type = facet_type <@NonInstance> [concrete] @@ -631,10 +652,13 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.a4a: type = facet_type <@ImplicitAs, @ImplicitAs(%NonInstance.type)> [concrete] @@ -659,11 +683,11 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Main.F = import_ref Main//lib, F, unloaded // CHECK:STDOUT: %Main.import_ref.f85: %NonInstance.type = import_ref Main//lib, inst17 [no loc], loaded [symbolic = constants.%Self.73c] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst26 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst27 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//default, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst26 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst27 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: %Main.import_ref.eb8 = import_ref Main//lib, loc7_30, unloaded // CHECK:STDOUT: %Main.import_ref.c9a3b6.1: type = import_ref Main//lib, loc7_13, loaded [concrete = constants.%struct_type.i] @@ -686,8 +710,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %NonInstanceCallIndirectImport.decl: %NonInstanceCallIndirectImport.type = fn_decl @NonInstanceCallIndirectImport [concrete = constants.%NonInstanceCallIndirectImport] { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.72c = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.72c = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc6_45: type = splice_block %ptr [concrete = constants.%ptr] { @@ -709,7 +733,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "core.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -763,6 +787,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -783,6 +809,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%NonInstance.type) { @@ -803,6 +831,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %empty_tuple.type} [concrete] +// CHECK:STDOUT: %pattern_type.9b2: type = pattern_type %struct_type.i [concrete] // CHECK:STDOUT: %InstanceCallImport.type: type = fn_type @InstanceCallImport [concrete] // CHECK:STDOUT: %InstanceCallImport: %InstanceCallImport.type = struct_value () [concrete] // CHECK:STDOUT: %Instance.type: type = facet_type <@Instance> [concrete] @@ -811,6 +840,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %assoc0: %Instance.assoc_type = assoc_entity element0, imports.%Main.import_ref.b4d [concrete] // CHECK:STDOUT: %G.type.1e1: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.cf8 [symbolic] +// CHECK:STDOUT: %pattern_type.4e4: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %NonInstance.type: type = facet_type <@NonInstance> [concrete] // CHECK:STDOUT: %Instance.impl_witness_table = impl_witness_table (imports.%Main.import_ref.373), @impl.477 [concrete] // CHECK:STDOUT: %Instance.impl_witness: = impl_witness %Instance.impl_witness_table [concrete] @@ -819,6 +849,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %G.type.0c0: type = fn_type @G.2 [concrete] // CHECK:STDOUT: %G.484: %G.type.0c0 = struct_value () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %struct_type.i [concrete] +// CHECK:STDOUT: %pattern_type.72c: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %InstanceCallIndirectImport.type: type = fn_type @InstanceCallIndirectImport [concrete] // CHECK:STDOUT: %InstanceCallIndirectImport: %InstanceCallIndirectImport.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -852,8 +883,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %InstanceCallImport.decl: %InstanceCallImport.type = fn_decl @InstanceCallImport [concrete = constants.%InstanceCallImport] { -// CHECK:STDOUT: %n.patt: %struct_type.i = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %struct_type.i = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.9b2 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.9b2 = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %struct_type.i = value_param call_param0 // CHECK:STDOUT: %.loc5_33: type = splice_block %struct_type.i [concrete = constants.%struct_type.i] { @@ -864,8 +895,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %n: %struct_type.i = bind_name n, %n.param // CHECK:STDOUT: } // CHECK:STDOUT: %InstanceCallIndirectImport.decl: %InstanceCallIndirectImport.type = fn_decl @InstanceCallIndirectImport [concrete = constants.%InstanceCallIndirectImport] { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %p.patt: %pattern_type.72c = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.72c = value_param_pattern %p.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %p.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc9_42: type = splice_block %ptr [concrete = constants.%ptr] { @@ -916,6 +947,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: generic fn @G.1(imports.%Main.import_ref.0d8: %Instance.type) [from "lib.carbon"] { // CHECK:STDOUT: %Self: %Instance.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.cf8)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.4e4)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -942,6 +974,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: specific @G.1(constants.%Self.cf8) { // CHECK:STDOUT: %Self => constants.%Self.cf8 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_import_instance.carbon @@ -956,6 +989,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: %Instance.assoc_type: type = assoc_entity_type @Instance [concrete] // CHECK:STDOUT: %assoc0: %Instance.assoc_type = assoc_entity element0, imports.%Main.import_ref.b4d [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.cf8 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %NonInstance.type: type = facet_type <@NonInstance> [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1029,6 +1063,7 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: generic fn @G(imports.%Main.import_ref.0d8: %Instance.type) [from "lib.carbon"] { // CHECK:STDOUT: %Self: %Instance.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.cf8)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1036,5 +1071,6 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: specific @G(constants.%Self.cf8) { // CHECK:STDOUT: %Self => constants.%Self.cf8 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/no_prelude/import_extend_impl.carbon b/toolchain/check/testdata/impl/no_prelude/import_extend_impl.carbon index 5dc7e6f7f8d2..86f9b1be2d71 100644 --- a/toolchain/check/testdata/impl/no_prelude/import_extend_impl.carbon +++ b/toolchain/check/testdata/impl/no_prelude/import_extend_impl.carbon @@ -115,6 +115,7 @@ fn G(c: C) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] @@ -154,8 +155,8 @@ fn G(c: C) { // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %c.param_patt: %C = value_param_pattern %c.patt, call_param0 +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %pattern_type = value_param_pattern %c.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %c.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, imports.%Main.C [concrete = constants.%C] diff --git a/toolchain/check/testdata/impl/no_prelude/import_generic.carbon b/toolchain/check/testdata/impl/no_prelude/import_generic.carbon index 2975802b5d8c..8fc11a68b982 100644 --- a/toolchain/check/testdata/impl/no_prelude/import_generic.carbon +++ b/toolchain/check/testdata/impl/no_prelude/import_generic.carbon @@ -104,7 +104,8 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.325: type = facet_type <@I, @I(%T)> [symbolic] @@ -125,12 +126,12 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt.loc5_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_13.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc5_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.084 [concrete] { -// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref.loc8: %I.type.dac = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -141,7 +142,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %I.impl_witness_table.loc8 = impl_witness_table (), @impl.084 [concrete] // CHECK:STDOUT: %I.impl_witness.loc8: = impl_witness %I.impl_witness_table.loc8, @impl.084(constants.%T) [symbolic = @impl.084.%I.impl_witness (constants.%I.impl_witness.1a9)] // CHECK:STDOUT: impl_decl @impl.084 [concrete] { -// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc9: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref.loc9: %I.type.dac = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -150,7 +151,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %T.loc9: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_14.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.cd2 [concrete] { -// CHECK:STDOUT: %T.patt.loc12_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, file.%I.decl [concrete = constants.%I.generic] @@ -165,7 +166,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc5_13.1: type) { // CHECK:STDOUT: %T.loc5_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc5_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_13.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc5_13.2)> [symbolic = %I.type (constants.%I.type.325)] @@ -182,7 +183,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.084(%T.loc8_14.1: type) { // CHECK:STDOUT: %T.loc8_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: %I.type.loc8_32.2: type = facet_type <@I, @I(%T.loc8_14.2)> [symbolic = %I.type.loc8_32.2 (constants.%I.type.325)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table.loc8, @impl.084(%T.loc8_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.1a9)] // CHECK:STDOUT: @@ -197,7 +198,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.cd2(%T.loc12_14.1: type) { // CHECK:STDOUT: %T.loc12_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc12_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc12_32.2: type = ptr_type %T.loc12_14.2 [symbolic = %ptr.loc12_32.2 (constants.%ptr)] // CHECK:STDOUT: %I.type.loc12_33.2: type = facet_type <@I, @I(%ptr.loc12_32.2)> [symbolic = %I.type.loc12_33.2 (constants.%I.type.0e2)] // CHECK:STDOUT: %require_complete: = require_complete_type %I.type.loc12_33.2 [symbolic = %require_complete (constants.%require_complete.0e6)] @@ -272,7 +273,8 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.325: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.209: %I.type.325 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -295,7 +297,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %Main.C: type = import_ref Main//import_generic, C, loaded [concrete = constants.%C] // CHECK:STDOUT: %Main.I: %I.type.dac = import_ref Main//import_generic, I, loaded [concrete = constants.%I.generic] // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//import_generic, loc5_13, loaded [symbolic = @I.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//import_generic, inst32 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.884 = import_ref Main//import_generic, inst33 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.cc6 = import_ref Main//import_generic, loc8_33, unloaded // CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//import_generic, loc4_10, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Main.import_ref.2c4 = import_ref Main//import_generic, inst16 [no loc], unloaded @@ -316,7 +318,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %default.import.loc2_30.1 = import // CHECK:STDOUT: %default.import.loc2_30.2 = import // CHECK:STDOUT: impl_decl @impl.08450a.2 [concrete] { -// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -327,7 +329,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %I.impl_witness_table.loc8 = impl_witness_table (), @impl.08450a.2 [concrete] // CHECK:STDOUT: %I.impl_witness.loc8: = impl_witness %I.impl_witness_table.loc8, @impl.08450a.2(constants.%T) [symbolic = @impl.08450a.2.%I.impl_witness (constants.%I.impl_witness.1a9ed3.2)] // CHECK:STDOUT: impl_decl @impl.08450a.3 [concrete] { -// CHECK:STDOUT: %T.patt.loc14_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -338,7 +340,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %I.impl_witness_table.loc14 = impl_witness_table (), @impl.08450a.3 [concrete] // CHECK:STDOUT: %I.impl_witness.loc14: = impl_witness %I.impl_witness_table.loc14, @impl.08450a.3(constants.%T) [symbolic = @impl.08450a.3.%I.impl_witness (constants.%I.impl_witness.1a9ed3.3)] // CHECK:STDOUT: impl_decl @impl.cd2fdc.2 [concrete] { -// CHECK:STDOUT: %T.patt.loc20_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc20_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -350,7 +352,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %I.impl_witness_table.loc20 = impl_witness_table (), @impl.cd2fdc.2 [concrete] // CHECK:STDOUT: %I.impl_witness.loc20: = impl_witness %I.impl_witness_table.loc20, @impl.cd2fdc.2(constants.%T) [symbolic = @impl.cd2fdc.2.%I.impl_witness (constants.%I.impl_witness.6ad3bf.2)] // CHECK:STDOUT: impl_decl @impl.cd2fdc.3 [concrete] { -// CHECK:STDOUT: %T.patt.loc26_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc26_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %I.ref: %I.type.dac = name_ref I, imports.%Main.I [concrete = constants.%I.generic] @@ -365,7 +367,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(imports.%Main.import_ref.5ab3ec.1: type) [from "import_generic.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] @@ -380,7 +382,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.08450a.1(imports.%Main.import_ref.5ab3ec.2: type) [from "import_generic.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] // CHECK:STDOUT: %I.impl_witness: = impl_witness constants.%I.impl_witness_table.028, @impl.08450a.1(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.1a9ed3.1)] // CHECK:STDOUT: @@ -395,7 +397,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.cd2fdc.1(imports.%Main.import_ref.5ab3ec.3: type) [from "import_generic.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic = %ptr (constants.%ptr)] // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%ptr)> [symbolic = %I.type (constants.%I.type.0e2)] // CHECK:STDOUT: %require_complete: = require_complete_type %I.type [symbolic = %require_complete (constants.%require_complete.0e6)] @@ -411,7 +413,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.08450a.2(%T.loc8_14.1: type) { // CHECK:STDOUT: %T.loc8_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: %I.type.loc8_32.2: type = facet_type <@I, @I(%T.loc8_14.2)> [symbolic = %I.type.loc8_32.2 (constants.%I.type.325)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table.loc8, @impl.08450a.2(%T.loc8_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.1a9ed3.2)] // CHECK:STDOUT: @@ -420,7 +422,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.08450a.3(%T.loc14_14.1: type) { // CHECK:STDOUT: %T.loc14_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc14_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt)] // CHECK:STDOUT: %I.type.loc14_32.2: type = facet_type <@I, @I(%T.loc14_14.2)> [symbolic = %I.type.loc14_32.2 (constants.%I.type.325)] // CHECK:STDOUT: %require_complete: = require_complete_type %I.type.loc14_32.2 [symbolic = %require_complete (constants.%require_complete.cfe)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table.loc14, @impl.08450a.3(%T.loc14_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.1a9ed3.3)] @@ -435,7 +437,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.cd2fdc.2(%T.loc20_14.1: type) { // CHECK:STDOUT: %T.loc20_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc20_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc20_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc20_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc20_32.2: type = ptr_type %T.loc20_14.2 [symbolic = %ptr.loc20_32.2 (constants.%ptr)] // CHECK:STDOUT: %I.type.loc20_33.2: type = facet_type <@I, @I(%ptr.loc20_32.2)> [symbolic = %I.type.loc20_33.2 (constants.%I.type.0e2)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table.loc20, @impl.cd2fdc.2(%T.loc20_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness.6ad3bf.2)] @@ -445,7 +447,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.cd2fdc.3(%T.loc26_14.1: type) { // CHECK:STDOUT: %T.loc26_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc26_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc26_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc26_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_14.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc26_32.2: type = ptr_type %T.loc26_14.2 [symbolic = %ptr.loc26_32.2 (constants.%ptr)] // CHECK:STDOUT: %I.type.loc26_33.2: type = facet_type <@I, @I(%ptr.loc26_32.2)> [symbolic = %I.type.loc26_33.2 (constants.%I.type.0e2)] // CHECK:STDOUT: %require_complete: = require_complete_type %I.type.loc26_33.2 [symbolic = %require_complete (constants.%require_complete.0e6)] @@ -565,7 +567,8 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %J.type.2b8: type = generic_interface_type @J [concrete] // CHECK:STDOUT: %J.generic: %J.type.2b8 = struct_value () [concrete] // CHECK:STDOUT: %J.type.b72: type = facet_type <@J, @J(%T)> [symbolic] @@ -583,12 +586,12 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %J.decl: %J.type.2b8 = interface_decl @J [concrete = constants.%J.generic] { -// CHECK:STDOUT: %T.patt.loc5_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_13.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc5_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: impl_decl @impl.199 [concrete] { -// CHECK:STDOUT: %T.patt.loc11_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.2b8 = name_ref J, file.%J.decl [concrete = constants.%J.generic] @@ -599,7 +602,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %J.impl_witness_table.loc11 = impl_witness_table (), @impl.199 [concrete] // CHECK:STDOUT: %J.impl_witness.loc11: = impl_witness %J.impl_witness_table.loc11, @impl.199(constants.%T) [symbolic = @impl.199.%J.impl_witness (constants.%J.impl_witness.809)] // CHECK:STDOUT: impl_decl @impl.dfd [concrete] { -// CHECK:STDOUT: %T.patt.loc17_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc17_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.2b8 = name_ref J, file.%J.decl [concrete = constants.%J.generic] @@ -614,7 +617,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @J(%T.loc5_13.1: type) { // CHECK:STDOUT: %T.loc5_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc5_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_13.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%T.loc5_13.2)> [symbolic = %J.type (constants.%J.type.b72)] @@ -631,7 +634,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.199(%T.loc11_14.1: type) { // CHECK:STDOUT: %T.loc11_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_14.2 (constants.%T.patt)] // CHECK:STDOUT: %J.type.loc11_32.2: type = facet_type <@J, @J(%T.loc11_14.2)> [symbolic = %J.type.loc11_32.2 (constants.%J.type.b72)] // CHECK:STDOUT: %J.impl_witness: = impl_witness file.%J.impl_witness_table.loc11, @impl.199(%T.loc11_14.2) [symbolic = %J.impl_witness (constants.%J.impl_witness.809)] // CHECK:STDOUT: @@ -640,7 +643,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.dfd(%T.loc17_14.1: type) { // CHECK:STDOUT: %T.loc17_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc17_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc17_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc17_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc17_14.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc17_32.2: type = ptr_type %T.loc17_14.2 [symbolic = %ptr.loc17_32.2 (constants.%ptr)] // CHECK:STDOUT: %J.type.loc17_33.2: type = facet_type <@J, @J(%ptr.loc17_32.2)> [symbolic = %J.type.loc17_33.2 (constants.%J.type.628)] // CHECK:STDOUT: %J.impl_witness: = impl_witness file.%J.impl_witness_table.loc17, @impl.dfd(%T.loc17_14.2) [symbolic = %J.impl_witness (constants.%J.impl_witness.5a8)] @@ -700,7 +703,8 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %J.generic: %J.type.2b8 = struct_value () [concrete] // CHECK:STDOUT: %J.type.b72: type = facet_type <@J, @J(%T)> [symbolic] // CHECK:STDOUT: %Self.252: %J.type.b72 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] @@ -723,7 +727,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %Main.D: type = import_ref Main//import_generic_decl, D, loaded [concrete = constants.%D] // CHECK:STDOUT: %Main.J: %J.type.2b8 = import_ref Main//import_generic_decl, J, loaded [concrete = constants.%J.generic] // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//import_generic_decl, loc5_13, loaded [symbolic = @J.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.ff5 = import_ref Main//import_generic_decl, inst32 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.ff5 = import_ref Main//import_generic_decl, inst33 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//import_generic_decl, loc4_10, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Main.import_ref.cab = import_ref Main//import_generic_decl, inst16 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//import_generic_decl, loc11_14, loaded [symbolic = @impl.199bba.1.%T (constants.%T)] @@ -742,7 +746,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %default.import.loc2_35.1 = import // CHECK:STDOUT: %default.import.loc2_35.2 = import // CHECK:STDOUT: impl_decl @impl.199bba.2 [concrete] { -// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.2b8 = name_ref J, imports.%Main.J [concrete = constants.%J.generic] @@ -753,7 +757,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %J.impl_witness_table.loc8 = impl_witness_table (), @impl.199bba.2 [concrete] // CHECK:STDOUT: %J.impl_witness.loc8: = impl_witness %J.impl_witness_table.loc8, @impl.199bba.2(constants.%T) [symbolic = @impl.199bba.2.%J.impl_witness (constants.%J.impl_witness.80964e.2)] // CHECK:STDOUT: impl_decl @impl.199bba.3 [concrete] { -// CHECK:STDOUT: %T.patt.loc14_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.2b8 = name_ref J, imports.%Main.J [concrete = constants.%J.generic] @@ -764,7 +768,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %J.impl_witness_table.loc14 = impl_witness_table (), @impl.199bba.3 [concrete] // CHECK:STDOUT: %J.impl_witness.loc14: = impl_witness %J.impl_witness_table.loc14, @impl.199bba.3(constants.%T) [symbolic = @impl.199bba.3.%J.impl_witness (constants.%J.impl_witness.80964e.3)] // CHECK:STDOUT: impl_decl @impl.dfd2f7.2 [concrete] { -// CHECK:STDOUT: %T.patt.loc20_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc20_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.2b8 = name_ref J, imports.%Main.J [concrete = constants.%J.generic] @@ -776,7 +780,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: %J.impl_witness_table.loc20 = impl_witness_table (), @impl.dfd2f7.2 [concrete] // CHECK:STDOUT: %J.impl_witness.loc20: = impl_witness %J.impl_witness_table.loc20, @impl.dfd2f7.2(constants.%T) [symbolic = @impl.dfd2f7.2.%J.impl_witness (constants.%J.impl_witness.5a859e.2)] // CHECK:STDOUT: impl_decl @impl.dfd2f7.3 [concrete] { -// CHECK:STDOUT: %T.patt.loc26_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc26_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] // CHECK:STDOUT: %J.ref: %J.type.2b8 = name_ref J, imports.%Main.J [concrete = constants.%J.generic] @@ -791,7 +795,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @J(imports.%Main.import_ref.5ab3ec.1: type) [from "fail_import_generic_decl.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%T)> [symbolic = %J.type (constants.%J.type.b72)] @@ -806,7 +810,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.199bba.1(imports.%Main.import_ref.5ab3ec.2: type) [from "fail_import_generic_decl.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%T)> [symbolic = %J.type (constants.%J.type.b72)] // CHECK:STDOUT: %J.impl_witness: = impl_witness constants.%J.impl_witness_table.891, @impl.199bba.1(%T) [symbolic = %J.impl_witness (constants.%J.impl_witness.80964e.1)] // CHECK:STDOUT: @@ -815,7 +819,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.dfd2f7.1(imports.%Main.import_ref.5ab3ec.3: type) [from "fail_import_generic_decl.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic = %ptr (constants.%ptr)] // CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%ptr)> [symbolic = %J.type (constants.%J.type.628)] // CHECK:STDOUT: %J.impl_witness: = impl_witness constants.%J.impl_witness_table.487, @impl.dfd2f7.1(%T) [symbolic = %J.impl_witness (constants.%J.impl_witness.5a859e.1)] @@ -825,7 +829,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.199bba.2(%T.loc8_14.1: type) { // CHECK:STDOUT: %T.loc8_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt)] // CHECK:STDOUT: %J.type.loc8_32.2: type = facet_type <@J, @J(%T.loc8_14.2)> [symbolic = %J.type.loc8_32.2 (constants.%J.type.b72)] // CHECK:STDOUT: %J.impl_witness: = impl_witness file.%J.impl_witness_table.loc8, @impl.199bba.2(%T.loc8_14.2) [symbolic = %J.impl_witness (constants.%J.impl_witness.80964e.2)] // CHECK:STDOUT: @@ -834,7 +838,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.199bba.3(%T.loc14_14.1: type) { // CHECK:STDOUT: %T.loc14_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc14_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc14_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt)] // CHECK:STDOUT: %J.type.loc14_32.2: type = facet_type <@J, @J(%T.loc14_14.2)> [symbolic = %J.type.loc14_32.2 (constants.%J.type.b72)] // CHECK:STDOUT: %require_complete: = require_complete_type %J.type.loc14_32.2 [symbolic = %require_complete (constants.%require_complete.287)] // CHECK:STDOUT: %J.impl_witness: = impl_witness file.%J.impl_witness_table.loc14, @impl.199bba.3(%T.loc14_14.2) [symbolic = %J.impl_witness (constants.%J.impl_witness.80964e.3)] @@ -849,7 +853,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.dfd2f7.2(%T.loc20_14.1: type) { // CHECK:STDOUT: %T.loc20_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc20_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc20_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc20_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc20_32.2: type = ptr_type %T.loc20_14.2 [symbolic = %ptr.loc20_32.2 (constants.%ptr)] // CHECK:STDOUT: %J.type.loc20_33.2: type = facet_type <@J, @J(%ptr.loc20_32.2)> [symbolic = %J.type.loc20_33.2 (constants.%J.type.628)] // CHECK:STDOUT: %J.impl_witness: = impl_witness file.%J.impl_witness_table.loc20, @impl.dfd2f7.2(%T.loc20_14.2) [symbolic = %J.impl_witness (constants.%J.impl_witness.5a859e.2)] @@ -859,7 +863,7 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.dfd2f7.3(%T.loc26_14.1: type) { // CHECK:STDOUT: %T.loc26_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc26_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc26_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc26_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc26_14.2 (constants.%T.patt)] // CHECK:STDOUT: %ptr.loc26_32.2: type = ptr_type %T.loc26_14.2 [symbolic = %ptr.loc26_32.2 (constants.%ptr)] // CHECK:STDOUT: %J.type.loc26_33.2: type = facet_type <@J, @J(%ptr.loc26_32.2)> [symbolic = %J.type.loc26_33.2 (constants.%J.type.628)] // CHECK:STDOUT: %require_complete: = require_complete_type %J.type.loc26_33.2 [symbolic = %require_complete (constants.%require_complete.c60)] diff --git a/toolchain/check/testdata/impl/no_prelude/import_use_generic.carbon b/toolchain/check/testdata/impl/no_prelude/import_use_generic.carbon index 6fd4a9a90070..cf705f4e433f 100644 --- a/toolchain/check/testdata/impl/no_prelude/import_use_generic.carbon +++ b/toolchain/check/testdata/impl/no_prelude/import_use_generic.carbon @@ -53,7 +53,8 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic] @@ -77,13 +78,13 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: .I = %I.decl // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc4_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc10_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc10_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc10_14.1 [symbolic = %T.loc10_14.2 (constants.%T)] @@ -108,7 +109,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc10_14.1: type) { // CHECK:STDOUT: %T.loc10_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc10_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc10_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc10_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt)] // CHECK:STDOUT: %C.loc10_27.2: type = class_type @C, @C(%T.loc10_14.2) [symbolic = %C.loc10_27.2 (constants.%C)] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table, @impl(%T.loc10_14.2) [symbolic = %I.impl_witness (constants.%I.impl_witness)] // CHECK:STDOUT: @@ -127,7 +128,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc4_9.1: type) { // CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_9.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -190,8 +191,10 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.7a7: type = class_type @C, @C(%empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.99a: type = pattern_type %C.7a7 [concrete] // CHECK:STDOUT: %C.val: %C.7a7 = struct_value () [concrete] // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] @@ -219,11 +222,11 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: %Main.I: type = import_ref Main//import_generic, I, loaded [concrete = constants.%I.type] // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//import_generic, loc4_9, loaded [symbolic = @C.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//import_generic, loc4_20, loaded [concrete = constants.%complete_type] -// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//import_generic, inst25 [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.e5d = import_ref Main//import_generic, inst32 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//import_generic, inst26 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.e5d = import_ref Main//import_generic, inst33 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.c44: %I.assoc_type = import_ref Main//import_generic, loc7_9, loaded [concrete = constants.%assoc0] // CHECK:STDOUT: %Main.F = import_ref Main//import_generic, F, unloaded -// CHECK:STDOUT: %Main.import_ref.5dd: %I.type = import_ref Main//import_generic, inst32 [no loc], loaded [symbolic = constants.%Self] +// CHECK:STDOUT: %Main.import_ref.5dd: %I.type = import_ref Main//import_generic, inst33 [no loc], loaded [symbolic = constants.%Self] // CHECK:STDOUT: %Main.import_ref.6ac: = import_ref Main//import_generic, loc10_34, loaded [symbolic = @impl.%I.impl_witness (constants.%I.impl_witness.443)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//import_generic, loc10_14, loaded [symbolic = @impl.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.499: type = import_ref Main//import_generic, loc10_27, loaded [symbolic = @impl.%C (constants.%C.f2e)] @@ -241,8 +244,8 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C.7a7 = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %C.7a7 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.99a = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type.99a = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.7a7 = var c // CHECK:STDOUT: %.loc6_12.1: type = splice_block %C [concrete = constants.%C.7a7] { @@ -295,7 +298,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(imports.%Main.import_ref.5ab3ec.2: type) [from "import_generic.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %C: type = class_type @C, @C(%T) [symbolic = %C (constants.%C.f2e)] // CHECK:STDOUT: %I.impl_witness: = impl_witness constants.%I.impl_witness_table, @impl(%T) [symbolic = %I.impl_witness (constants.%I.impl_witness.443)] // CHECK:STDOUT: @@ -311,7 +314,7 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Main.import_ref.5ab3ec.1: type) [from "import_generic.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/no_prelude/self_in_class.carbon b/toolchain/check/testdata/impl/no_prelude/self_in_class.carbon index 1cacf985a614..2461e9950da9 100644 --- a/toolchain/check/testdata/impl/no_prelude/self_in_class.carbon +++ b/toolchain/check/testdata/impl/no_prelude/self_in_class.carbon @@ -28,6 +28,7 @@ class A { // CHECK:STDOUT: %DefaultConstructible.type: type = facet_type <@DefaultConstructible> [concrete] // CHECK:STDOUT: %Self: %DefaultConstructible.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.839: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %Make.type.068: type = fn_type @Make.1 [concrete] // CHECK:STDOUT: %Make.606: %Make.type.068 = struct_value () [concrete] // CHECK:STDOUT: %DefaultConstructible.assoc_type: type = assoc_entity_type @DefaultConstructible [concrete] @@ -37,6 +38,7 @@ class A { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %DefaultConstructible.impl_witness: = impl_witness @A.%DefaultConstructible.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Make.type.351: type = fn_type @Make.2 [concrete] // CHECK:STDOUT: %Make.b73: %Make.type.351 = struct_value () [concrete] // CHECK:STDOUT: %DefaultConstructible.facet: %DefaultConstructible.type = facet_value %C, (%DefaultConstructible.impl_witness) [concrete] @@ -57,8 +59,8 @@ class A { // CHECK:STDOUT: interface @DefaultConstructible { // CHECK:STDOUT: %Self: %DefaultConstructible.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Make.decl: %Make.type.068 = fn_decl @Make.1 [concrete = constants.%Make.606] { -// CHECK:STDOUT: %return.patt: @Make.1.%Self.as_type.loc12_16.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Make.1.%Self.as_type.loc12_16.1 (%Self.as_type) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Make.1.%pattern_type (%pattern_type.839) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Make.1.%pattern_type (%pattern_type.839) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: %DefaultConstructible.type = name_ref Self, @DefaultConstructible.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc12_16.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc12_16.1 (constants.%Self.as_type)] @@ -76,8 +78,8 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %C.ref as %DefaultConstructible.ref { // CHECK:STDOUT: %Make.decl: %Make.type.351 = fn_decl @Make.2 [concrete = constants.%Make.b73] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%C.ref [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 @@ -118,6 +120,7 @@ class A { // CHECK:STDOUT: generic fn @Make.1(@DefaultConstructible.%Self: %DefaultConstructible.type) { // CHECK:STDOUT: %Self: %DefaultConstructible.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc12_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc12_16.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc12_16.1 [symbolic = %pattern_type (constants.%pattern_type.839)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @Make.1.%Self.as_type.loc12_16.1 (%Self.as_type); // CHECK:STDOUT: } @@ -133,10 +136,12 @@ class A { // CHECK:STDOUT: specific @Make.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc12_16.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.839 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Make.1(constants.%DefaultConstructible.facet) { // CHECK:STDOUT: %Self => constants.%DefaultConstructible.facet // CHECK:STDOUT: %Self.as_type.loc12_16.1 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/no_prelude/self_in_signature.carbon b/toolchain/check/testdata/impl/no_prelude/self_in_signature.carbon index 1604aa7009e2..18ed296c6965 100644 --- a/toolchain/check/testdata/impl/no_prelude/self_in_signature.carbon +++ b/toolchain/check/testdata/impl/no_prelude/self_in_signature.carbon @@ -42,6 +42,7 @@ impl D as SelfNested { // CHECK:STDOUT: %UseSelf.type: type = facet_type <@UseSelf> [concrete] // CHECK:STDOUT: %Self.085: %UseSelf.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.599: type = facet_access_type %Self.085 [symbolic] +// CHECK:STDOUT: %pattern_type.3ef: type = pattern_type %Self.as_type.599 [symbolic] // CHECK:STDOUT: %F.type.86a: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.408: %F.type.86a = struct_value () [concrete] @@ -52,11 +53,13 @@ impl D as SelfNested { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %UseSelf.impl_witness.b25: = impl_witness file.%UseSelf.impl_witness_table.loc19 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type.fc6: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.5e2: %F.type.fc6 = struct_value () [concrete] // CHECK:STDOUT: %UseSelf.facet.727: %UseSelf.type = facet_value %C, (%UseSelf.impl_witness.b25) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %UseSelf.impl_witness.f90: = impl_witness file.%UseSelf.impl_witness_table.loc23 [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %F.type.0aa: type = fn_type @F.3 [concrete] // CHECK:STDOUT: %F.f71: %F.type.0aa = struct_value () [concrete] // CHECK:STDOUT: %UseSelf.facet.d11: %UseSelf.type = facet_value %D, (%UseSelf.impl_witness.f90) [concrete] @@ -68,6 +71,7 @@ impl D as SelfNested { // CHECK:STDOUT: %struct_type.x.y.270: type = struct_type {.x: %Self.as_type.e1e, .y: %empty_tuple.type} [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.46b: type = tuple_type (%ptr.e87, %struct_type.x.y.270) [symbolic] +// CHECK:STDOUT: %pattern_type.5a1: type = pattern_type %tuple.type.46b [symbolic] // CHECK:STDOUT: %F.type.6ed: type = fn_type @F.4 [concrete] // CHECK:STDOUT: %F.998: %F.type.6ed = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.assoc_type: type = assoc_entity_type @SelfNested [concrete] @@ -76,6 +80,7 @@ impl D as SelfNested { // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] // CHECK:STDOUT: %struct_type.x.y.2f0: type = struct_type {.x: %C, .y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %tuple.type.a17: type = tuple_type (%ptr.019, %struct_type.x.y.2f0) [concrete] +// CHECK:STDOUT: %pattern_type.809: type = pattern_type %tuple.type.a17 [concrete] // CHECK:STDOUT: %F.type.ef0: type = fn_type @F.5 [concrete] // CHECK:STDOUT: %F.9a9: %F.type.ef0 = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.facet.2b2: %SelfNested.type = facet_value %C, (%SelfNested.impl_witness.5d5) [concrete] @@ -83,6 +88,7 @@ impl D as SelfNested { // CHECK:STDOUT: %ptr.19c: type = ptr_type %D [concrete] // CHECK:STDOUT: %struct_type.x.y.527: type = struct_type {.x: %D, .y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %tuple.type.a5f: type = tuple_type (%ptr.19c, %struct_type.x.y.527) [concrete] +// CHECK:STDOUT: %pattern_type.b43: type = pattern_type %tuple.type.a5f [concrete] // CHECK:STDOUT: %F.type.a9d: type = fn_type @F.6 [concrete] // CHECK:STDOUT: %F.c41: %F.type.a9d = struct_value () [concrete] // CHECK:STDOUT: %SelfNested.facet.f2c: %SelfNested.type = facet_value %D, (%SelfNested.impl_witness.16b) [concrete] @@ -128,12 +134,12 @@ impl D as SelfNested { // CHECK:STDOUT: interface @UseSelf { // CHECK:STDOUT: %Self: %UseSelf.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.085] // CHECK:STDOUT: %F.decl: %F.type.86a = fn_decl @F.1 [concrete = constants.%F.408] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %x.patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599) = value_param_pattern %x.patt, call_param1 -// CHECK:STDOUT: %return.patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.3ef) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.3ef) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %x.patt: @F.1.%pattern_type (%pattern_type.3ef) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.1.%pattern_type (%pattern_type.3ef) = value_param_pattern %x.patt, call_param1 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.3ef) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.3ef) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc12_32: %UseSelf.type = name_ref Self, @UseSelf.%Self [symbolic = %Self (constants.%Self.085)] // CHECK:STDOUT: %Self.as_type.loc12_32: type = facet_access_type %Self.ref.loc12_32 [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type.599)] @@ -166,8 +172,8 @@ impl D as SelfNested { // CHECK:STDOUT: interface @SelfNested { // CHECK:STDOUT: %Self: %SelfNested.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.2ff] // CHECK:STDOUT: %F.decl: %F.type.6ed = fn_decl @F.4 [concrete = constants.%F.998] { -// CHECK:STDOUT: %x.patt: @F.4.%tuple.type (%tuple.type.46b) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @F.4.%tuple.type (%tuple.type.46b) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: @F.4.%pattern_type (%pattern_type.5a1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @F.4.%pattern_type (%pattern_type.5a1) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: @F.4.%tuple.type (%tuple.type.46b) = value_param call_param0 // CHECK:STDOUT: %.loc28_37.1: type = splice_block %.loc28_37.3 [symbolic = %tuple.type (constants.%tuple.type.46b)] { @@ -196,12 +202,12 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c4a: %C.ref as %UseSelf.ref { // CHECK:STDOUT: %F.decl: %F.type.fc6 = fn_decl @F.2 [concrete = constants.%F.5e2] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %x.patt: %C = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %C = value_param_pattern %x.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.c48 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.c48 = value_param_pattern %x.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc20_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -222,12 +228,12 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.659: %D.ref as %UseSelf.ref { // CHECK:STDOUT: %F.decl: %F.type.0aa = fn_decl @F.3 [concrete = constants.%F.f71] { -// CHECK:STDOUT: %self.patt: %D = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %D = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %x.patt: %D = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %D = value_param_pattern %x.patt, call_param1 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.510 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.510 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.510 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.510 = value_param_pattern %x.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc24_32: type = name_ref Self, @impl.659.%D.ref [concrete = constants.%D] // CHECK:STDOUT: %self.param: %D = value_param call_param0 @@ -247,8 +253,8 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.730: %C.ref as %SelfNested.ref { // CHECK:STDOUT: %F.decl: %F.type.ef0 = fn_decl @F.5 [concrete = constants.%F.9a9] { -// CHECK:STDOUT: %x.patt: %tuple.type.a17 = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %tuple.type.a17 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.809 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.809 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %tuple.type.a17 = value_param call_param0 // CHECK:STDOUT: %.loc32_31.1: type = splice_block %.loc32_31.3 [concrete = constants.%tuple.type.a17] { @@ -272,8 +278,8 @@ impl D as SelfNested { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.82d: %D.ref as %SelfNested.ref { // CHECK:STDOUT: %F.decl: %F.type.a9d = fn_decl @F.6 [concrete = constants.%F.c41] { -// CHECK:STDOUT: %x.patt: %tuple.type.a5f = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %tuple.type.a5f = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.b43 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.b43 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %tuple.type.a5f = value_param call_param0 // CHECK:STDOUT: %.loc36_37.1: type = splice_block %.loc36_37.3 [concrete = constants.%tuple.type.a5f] { @@ -315,6 +321,7 @@ impl D as SelfNested { // CHECK:STDOUT: generic fn @F.1(@UseSelf.%Self: %UseSelf.type) { // CHECK:STDOUT: %Self: %UseSelf.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.085)] // CHECK:STDOUT: %Self.as_type.loc12_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type.599)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc12_14.1 [symbolic = %pattern_type (constants.%pattern_type.3ef)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599), %x.param: @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599)) -> @F.1.%Self.as_type.loc12_14.1 (%Self.as_type.599); // CHECK:STDOUT: } @@ -341,6 +348,7 @@ impl D as SelfNested { // CHECK:STDOUT: %ptr.loc28_16.1: type = ptr_type %Self.as_type.loc28_16.1 [symbolic = %ptr.loc28_16.1 (constants.%ptr.e87)] // CHECK:STDOUT: %struct_type.x.y.loc28_36.1: type = struct_type {.x: @F.4.%Self.as_type.loc28_16.1 (%Self.as_type.e1e), .y: %empty_tuple.type} [symbolic = %struct_type.x.y.loc28_36.1 (constants.%struct_type.x.y.270)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%ptr.loc28_16.1, %struct_type.x.y.loc28_36.1) [symbolic = %tuple.type (constants.%tuple.type.46b)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [symbolic = %pattern_type (constants.%pattern_type.5a1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%x.param: @F.4.%tuple.type (%tuple.type.46b)); // CHECK:STDOUT: } @@ -352,16 +360,19 @@ impl D as SelfNested { // CHECK:STDOUT: specific @F.1(constants.%Self.085) { // CHECK:STDOUT: %Self => constants.%Self.085 // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%Self.as_type.599 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3ef // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%UseSelf.facet.727) { // CHECK:STDOUT: %Self => constants.%UseSelf.facet.727 // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%UseSelf.facet.d11) { // CHECK:STDOUT: %Self => constants.%UseSelf.facet.d11 // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%D +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.4(constants.%Self.2ff) { @@ -370,6 +381,7 @@ impl D as SelfNested { // CHECK:STDOUT: %ptr.loc28_16.1 => constants.%ptr.e87 // CHECK:STDOUT: %struct_type.x.y.loc28_36.1 => constants.%struct_type.x.y.270 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.46b +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.5a1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.4(constants.%SelfNested.facet.2b2) { @@ -378,6 +390,7 @@ impl D as SelfNested { // CHECK:STDOUT: %ptr.loc28_16.1 => constants.%ptr.019 // CHECK:STDOUT: %struct_type.x.y.loc28_36.1 => constants.%struct_type.x.y.2f0 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.a17 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.809 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.4(constants.%SelfNested.facet.f2c) { @@ -386,5 +399,6 @@ impl D as SelfNested { // CHECK:STDOUT: %ptr.loc28_16.1 => constants.%ptr.19c // CHECK:STDOUT: %struct_type.x.y.loc28_36.1 => constants.%struct_type.x.y.527 // CHECK:STDOUT: %tuple.type => constants.%tuple.type.a5f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b43 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/use_assoc_const.carbon b/toolchain/check/testdata/impl/use_assoc_const.carbon index 7276f2267c5b..209f35dca25a 100644 --- a/toolchain/check/testdata/impl/use_assoc_const.carbon +++ b/toolchain/check/testdata/impl/use_assoc_const.carbon @@ -210,7 +210,7 @@ interface K { } impl () as K where .V = {.a: ()} { - // CHECK:STDERR: fail_associated_type_in_signature_mismatch.carbon:[[@LINE+7]]:20: error: type `{.x: ()}` of parameter 1 in redeclaration differs from previous parameter type `{.a: ()}` [RedeclParamDiffersType] + // CHECK:STDERR: fail_associated_type_in_signature_mismatch.carbon:[[@LINE+7]]:20: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: fn F[self: Self](v: {.x: ()}) -> {.x: ()} { return v; } // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: fail_associated_type_in_signature_mismatch.carbon:[[@LINE-7]]:20: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -291,9 +291,11 @@ fn F() { // CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete] // CHECK:STDOUT: %assoc0.411: %J.assoc_type = assoc_entity element0, @J.%U [concrete] // CHECK:STDOUT: %Self.as_type.3df: type = facet_access_type %Self.ccd [symbolic] +// CHECK:STDOUT: %pattern_type.4ca: type = pattern_type %Self.as_type.3df [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.646: = lookup_impl_witness %Self.ccd, @J [symbolic] // CHECK:STDOUT: %J.facet.521: %J.type = facet_value %Self.as_type.3df, (%J.lookup_impl_witness.646) [symbolic] // CHECK:STDOUT: %impl.elem0.11f: type = impl_witness_access %J.lookup_impl_witness.646, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.b98: type = pattern_type %impl.elem0.11f [symbolic] // CHECK:STDOUT: %F.type.c14: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.b71: %F.type.c14 = struct_value () [concrete] @@ -307,6 +309,8 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %J_where.type.b64: type = facet_type <@J where %impl.elem0.83f = %i32> [concrete] // CHECK:STDOUT: %J.impl_witness.e42: = impl_witness file.%J.impl_witness_table.loc8 [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.7d4: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.46e: %F.type.7d4 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.ecc: %J.type = facet_value %empty_tuple.type, (%J.impl_witness.e42) [concrete] @@ -344,6 +348,7 @@ fn F() { // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %J_where.type.0bc: type = facet_type <@J where %impl.elem0.83f = %C> [concrete] // CHECK:STDOUT: %J.impl_witness.12d: = impl_witness file.%J.impl_witness_table.loc21 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type.2a7: type = fn_type @F.3 [concrete] // CHECK:STDOUT: %F.fb5: %F.type.2a7 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.30e: %J.type = facet_value %C, (%J.impl_witness.12d) [concrete] @@ -388,10 +393,10 @@ fn F() { // CHECK:STDOUT: %J.impl_witness.loc8: = impl_witness %J.impl_witness_table.loc8 [concrete = constants.%J.impl_witness.e42] // CHECK:STDOUT: %impl_witness_assoc_constant.loc8: type = impl_witness_assoc_constant constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %CallMethod.decl: %CallMethod.type = fn_decl @CallMethod [concrete = constants.%CallMethod] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.cb1 = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -430,12 +435,12 @@ fn F() { // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete = constants.%assoc0.411] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.c14 = fn_decl @F.1 [concrete = constants.%F.b71] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type.3df) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type.3df) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %u.patt: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.11f) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.11f) = value_param_pattern %u.patt, call_param1 -// CHECK:STDOUT: %return.patt: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.11f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.11f) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type.loc5_8 (%pattern_type.4ca) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type.loc5_8 (%pattern_type.4ca) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %u.patt: @F.1.%pattern_type.loc5_20 (%pattern_type.b98) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.1.%pattern_type.loc5_20 (%pattern_type.b98) = value_param_pattern %u.patt, call_param1 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type.loc5_20 (%pattern_type.b98) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type.loc5_20 (%pattern_type.b98) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc5_29: type = impl_witness_access constants.%J.lookup_impl_witness.646, element0 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.11f)] // CHECK:STDOUT: %U.ref.loc5_29: type = name_ref U, %impl.elem0.loc5_29 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.11f)] @@ -470,12 +475,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.32a: %.loc8_7.2 as %.loc8_14 { // CHECK:STDOUT: %F.decl: %F.type.7d4 = fn_decl @F.2 [concrete = constants.%F.46e] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %u.patt: %i32 = binding_pattern u -// CHECK:STDOUT: %u.param_patt: %i32 = value_param_pattern %u.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %u.patt: %pattern_type.7ce = binding_pattern u +// CHECK:STDOUT: %u.param_patt: %pattern_type.7ce = value_param_pattern %u.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc9_31: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc9_31: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -499,12 +504,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.043: %C.ref.loc21_6 as %.loc21_13 { // CHECK:STDOUT: %F.decl: %F.type.2a7 = fn_decl @F.3 [concrete = constants.%F.fb5] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %u.patt: %C = binding_pattern u -// CHECK:STDOUT: %u.param_patt: %C = value_param_pattern %u.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %u.patt: %pattern_type.c48 = binding_pattern u +// CHECK:STDOUT: %u.param_patt: %pattern_type.c48 = value_param_pattern %u.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc22_29: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -537,8 +542,10 @@ fn F() { // CHECK:STDOUT: generic fn @F.1(@J.%Self: %J.type) { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.ccd)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.3df)] +// CHECK:STDOUT: %pattern_type.loc5_8: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type.loc5_8 (constants.%pattern_type.4ca)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.646)] // CHECK:STDOUT: %impl.elem0.loc5_23.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.11f)] +// CHECK:STDOUT: %pattern_type.loc5_20: type = pattern_type %impl.elem0.loc5_23.1 [symbolic = %pattern_type.loc5_20 (constants.%pattern_type.b98)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type.3df), %u.param: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.11f)) -> @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.11f); // CHECK:STDOUT: } @@ -598,8 +605,10 @@ fn F() { // CHECK:STDOUT: specific @F.1(constants.%Self.ccd) { // CHECK:STDOUT: %Self => constants.%Self.ccd // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type.3df +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.4ca // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.646 // CHECK:STDOUT: %impl.elem0.loc5_23.1 => constants.%impl.elem0.11f +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.b98 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%J.facet.330) {} @@ -607,15 +616,19 @@ fn F() { // CHECK:STDOUT: specific @F.1(constants.%J.facet.ecc) { // CHECK:STDOUT: %Self => constants.%J.facet.ecc // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.cb1 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness.e42 // CHECK:STDOUT: %impl.elem0.loc5_23.1 => constants.%i32 +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%J.facet.30e) { // CHECK:STDOUT: %Self => constants.%J.facet.30e // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%C +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.c48 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness.12d // CHECK:STDOUT: %impl.elem0.loc5_23.1 => constants.%C +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.c48 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- associated_type_in_function_signature.carbon @@ -629,6 +642,7 @@ fn F() { // CHECK:STDOUT: %J.lookup_impl_witness.646: = lookup_impl_witness %Self.ccd, @J [symbolic] // CHECK:STDOUT: %J.facet.521: %J.type = facet_value %Self.as_type.3df, (%J.lookup_impl_witness.646) [symbolic] // CHECK:STDOUT: %impl.elem0.11f: type = impl_witness_access %J.lookup_impl_witness.646, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.b98: type = pattern_type %impl.elem0.11f [symbolic] // CHECK:STDOUT: %F.type.c14: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.b71: %F.type.c14 = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %J.assoc_type = assoc_entity element1, @J.%F.decl [concrete] @@ -644,6 +658,7 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where %impl.elem0.83f = %i32> [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness file.%J.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.5d3: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.b9c: %F.type.5d3 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.183: %J.type = facet_value %D, (%J.impl_witness) [concrete] @@ -717,8 +732,8 @@ fn F() { // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness] // CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %CallFunction.decl: %CallFunction.type = fn_decl @CallFunction [concrete = constants.%CallFunction] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -733,10 +748,10 @@ fn F() { // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete = constants.%assoc0.411] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.c14 = fn_decl @F.1 [concrete = constants.%F.b71] { -// CHECK:STDOUT: %u.patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %u.patt: @F.1.%pattern_type (%pattern_type.b98) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.1.%pattern_type (%pattern_type.b98) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.b98) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.b98) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc5_17: type = impl_witness_access constants.%J.lookup_impl_witness.646, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] // CHECK:STDOUT: %U.ref.loc5_17: type = name_ref U, %impl.elem0.loc5_17 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] @@ -764,10 +779,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.fc1: %D.ref as %.loc10_13 { // CHECK:STDOUT: %F.decl: %F.type.5d3 = fn_decl @F.2 [concrete = constants.%F.b9c] { -// CHECK:STDOUT: %u.patt: %i32 = binding_pattern u -// CHECK:STDOUT: %u.param_patt: %i32 = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %u.patt: %pattern_type.7ce = binding_pattern u +// CHECK:STDOUT: %u.param_patt: %pattern_type.7ce = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_19: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_19: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -799,6 +814,7 @@ fn F() { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.ccd)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.646)] // CHECK:STDOUT: %impl.elem0.loc5_11.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc5_11.1 [symbolic = %pattern_type (constants.%pattern_type.b98)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f)) -> @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f); // CHECK:STDOUT: } @@ -854,6 +870,7 @@ fn F() { // CHECK:STDOUT: %Self => constants.%Self.ccd // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.646 // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%impl.elem0.11f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b98 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%J.facet.330) {} @@ -862,6 +879,7 @@ fn F() { // CHECK:STDOUT: %Self => constants.%J.facet.183 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- extend_impl_with_associated_type_in_signature.carbon @@ -875,9 +893,11 @@ fn F() { // CHECK:STDOUT: %J.lookup_impl_witness.64628e.1: = lookup_impl_witness %Self.ccd, @J [symbolic] // CHECK:STDOUT: %J.facet.5210a7.1: %J.type = facet_value %Self.as_type.3df, (%J.lookup_impl_witness.64628e.1) [symbolic] // CHECK:STDOUT: %impl.elem0.11fef0.1: type = impl_witness_access %J.lookup_impl_witness.64628e.1, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.b984e7.1: type = pattern_type %impl.elem0.11fef0.1 [symbolic] // CHECK:STDOUT: %F.type.c14: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.b71: %F.type.c14 = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %J.assoc_type = assoc_entity element1, @J.%F.decl [concrete] +// CHECK:STDOUT: %pattern_type.4ca604.1: type = pattern_type %Self.as_type.3df [symbolic] // CHECK:STDOUT: %G.type.285: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %G.e4b: %G.type.285 = struct_value () [concrete] // CHECK:STDOUT: %assoc2: %J.assoc_type = assoc_entity element2, @J.%G.decl [concrete] @@ -891,8 +911,10 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where %impl.elem0.83f = %i32> [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness @E.%J.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type.b84: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.b07: %F.type.b84 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.a4a: type = pattern_type %E [concrete] // CHECK:STDOUT: %G.type.4b6: type = fn_type @G.2 [concrete] // CHECK:STDOUT: %G.553: %G.type.4b6 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.ee5: %J.type = facet_value %E, (%J.impl_witness) [concrete] @@ -947,11 +969,14 @@ fn F() { // CHECK:STDOUT: %bound_method.efa: = bound_method %int_6.462, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_6.e56: %i32 = int_value 6 [concrete] // CHECK:STDOUT: %T: %J.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %J.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.28e: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.4ca604.2: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.64628e.2: = lookup_impl_witness %T, @J [symbolic] // CHECK:STDOUT: %J.facet.5210a7.2: %J.type = facet_value %T.as_type, (%J.lookup_impl_witness.64628e.2) [symbolic] // CHECK:STDOUT: %impl.elem0.11fef0.2: type = impl_witness_access %J.lookup_impl_witness.64628e.2, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.b984e7.2: type = pattern_type %impl.elem0.11fef0.2 [symbolic] // CHECK:STDOUT: %GenericCallF.type: type = fn_type @GenericCallF [concrete] // CHECK:STDOUT: %GenericCallF: %GenericCallF.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.58f: = require_complete_type %impl.elem0.11fef0.2 [symbolic] @@ -987,10 +1012,10 @@ fn F() { // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %E.decl: type = class_decl @E [concrete = constants.%E] {} {} // CHECK:STDOUT: %CallBoth.decl: %CallBoth.type = fn_decl @CallBoth [concrete = constants.%CallBoth] { -// CHECK:STDOUT: %e.patt: %E = binding_pattern e -// CHECK:STDOUT: %e.param_patt: %E = value_param_pattern %e.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %e.patt: %pattern_type.a4a = binding_pattern e +// CHECK:STDOUT: %e.param_patt: %pattern_type.a4a = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1001,13 +1026,13 @@ fn F() { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %GenericCallF.decl: %GenericCallF.type = fn_decl @GenericCallF [concrete = constants.%GenericCallF] { -// CHECK:STDOUT: %T.patt.loc24_17.1: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_17.2 (constants.%T.patt)] -// CHECK:STDOUT: %t.patt: @GenericCallF.%T.as_type.loc24_27.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @GenericCallF.%T.as_type.loc24_27.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 -// CHECK:STDOUT: %u.patt: @GenericCallF.%impl.elem0.loc24_34.2 (%impl.elem0.11fef0.2) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @GenericCallF.%impl.elem0.loc24_34.2 (%impl.elem0.11fef0.2) = value_param_pattern %u.patt, call_param1 -// CHECK:STDOUT: %return.patt: @GenericCallF.%impl.elem0.loc24_34.2 (%impl.elem0.11fef0.2) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @GenericCallF.%impl.elem0.loc24_34.2 (%impl.elem0.11fef0.2) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %T.patt.loc24_17.1: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.patt: @GenericCallF.%pattern_type.loc24_24 (%pattern_type.4ca604.2) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @GenericCallF.%pattern_type.loc24_24 (%pattern_type.4ca604.2) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %u.patt: @GenericCallF.%pattern_type.loc24_30 (%pattern_type.b984e7.2) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @GenericCallF.%pattern_type.loc24_30 (%pattern_type.b984e7.2) = value_param_pattern %u.patt, call_param1 +// CHECK:STDOUT: %return.patt: @GenericCallF.%pattern_type.loc24_30 (%pattern_type.b984e7.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @GenericCallF.%pattern_type.loc24_30 (%pattern_type.b984e7.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc24_41: %J.type = name_ref T, %T.loc24_17.1 [symbolic = %T.loc24_17.2 (constants.%T)] // CHECK:STDOUT: %U.ref.loc24_42: %J.assoc_type = name_ref U, @U.%assoc0 [concrete = constants.%assoc0.411] @@ -1036,10 +1061,10 @@ fn F() { // CHECK:STDOUT: %return: ref @GenericCallF.%impl.elem0.loc24_34.2 (%impl.elem0.11fef0.2) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [concrete = constants.%CallGeneric] { -// CHECK:STDOUT: %e.patt: %E = binding_pattern e -// CHECK:STDOUT: %e.param_patt: %E = value_param_pattern %e.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %e.patt: %pattern_type.a4a = binding_pattern e +// CHECK:STDOUT: %e.param_patt: %pattern_type.a4a = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1057,10 +1082,10 @@ fn F() { // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete = constants.%assoc0.411] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.c14 = fn_decl @F.1 [concrete = constants.%F.b71] { -// CHECK:STDOUT: %u.patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11fef0.1) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11fef0.1) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11fef0.1) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11fef0.1) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %u.patt: @F.1.%pattern_type (%pattern_type.b984e7.1) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.1.%pattern_type (%pattern_type.b984e7.1) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.b984e7.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.b984e7.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc5_17: type = impl_witness_access constants.%J.lookup_impl_witness.64628e.1, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11fef0.1)] // CHECK:STDOUT: %U.ref.loc5_17: type = name_ref U, %impl.elem0.loc5_17 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11fef0.1)] @@ -1075,12 +1100,12 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %assoc1: %J.assoc_type = assoc_entity element1, %F.decl [concrete = constants.%assoc1] // CHECK:STDOUT: %G.decl: %G.type.285 = fn_decl @G.1 [concrete = constants.%G.e4b] { -// CHECK:STDOUT: %self.patt: @G.1.%Self.as_type.loc6_14.1 (%Self.as_type.3df) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.1.%Self.as_type.loc6_14.1 (%Self.as_type.3df) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %v.patt: @G.1.%impl.elem0.loc6_23.1 (%impl.elem0.11fef0.1) = binding_pattern v -// CHECK:STDOUT: %v.param_patt: @G.1.%impl.elem0.loc6_23.1 (%impl.elem0.11fef0.1) = value_param_pattern %v.patt, call_param1 -// CHECK:STDOUT: %return.patt: @G.1.%impl.elem0.loc6_23.1 (%impl.elem0.11fef0.1) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @G.1.%impl.elem0.loc6_23.1 (%impl.elem0.11fef0.1) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @G.1.%pattern_type.loc6_8 (%pattern_type.4ca604.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.1.%pattern_type.loc6_8 (%pattern_type.4ca604.1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %v.patt: @G.1.%pattern_type.loc6_20 (%pattern_type.b984e7.1) = binding_pattern v +// CHECK:STDOUT: %v.param_patt: @G.1.%pattern_type.loc6_20 (%pattern_type.b984e7.1) = value_param_pattern %v.patt, call_param1 +// CHECK:STDOUT: %return.patt: @G.1.%pattern_type.loc6_20 (%pattern_type.b984e7.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @G.1.%pattern_type.loc6_20 (%pattern_type.b984e7.1) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc6_29: type = impl_witness_access constants.%J.lookup_impl_witness.64628e.1, element0 [symbolic = %impl.elem0.loc6_23.1 (constants.%impl.elem0.11fef0.1)] // CHECK:STDOUT: %U.ref.loc6_29: type = name_ref U, %impl.elem0.loc6_29 [symbolic = %impl.elem0.loc6_23.1 (constants.%impl.elem0.11fef0.1)] @@ -1116,10 +1141,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.939: %Self.ref as %.loc10_20 { // CHECK:STDOUT: %F.decl: %F.type.b84 = fn_decl @F.2 [concrete = constants.%F.b07] { -// CHECK:STDOUT: %u.patt: %i32 = binding_pattern u -// CHECK:STDOUT: %u.param_patt: %i32 = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %u.patt: %pattern_type.7ce = binding_pattern u +// CHECK:STDOUT: %u.param_patt: %pattern_type.7ce = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1133,12 +1158,12 @@ fn F() { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type.4b6 = fn_decl @G.2 [concrete = constants.%G.553] { -// CHECK:STDOUT: %self.patt: %E = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %E = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %v.param_patt: %i32 = value_param_pattern %v.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.a4a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.a4a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %v.param_patt: %pattern_type.7ce = value_param_pattern %v.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc14_33: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc14_33: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -1196,6 +1221,7 @@ fn F() { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.ccd)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.1)] // CHECK:STDOUT: %impl.elem0.loc5_11.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11fef0.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc5_11.1 [symbolic = %pattern_type (constants.%pattern_type.b984e7.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11fef0.1)) -> @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11fef0.1); // CHECK:STDOUT: } @@ -1203,8 +1229,10 @@ fn F() { // CHECK:STDOUT: generic fn @G.1(@J.%Self: %J.type) { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.ccd)] // CHECK:STDOUT: %Self.as_type.loc6_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type.3df)] +// CHECK:STDOUT: %pattern_type.loc6_8: type = pattern_type %Self.as_type.loc6_14.1 [symbolic = %pattern_type.loc6_8 (constants.%pattern_type.4ca604.1)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.1)] // CHECK:STDOUT: %impl.elem0.loc6_23.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_23.1 (constants.%impl.elem0.11fef0.1)] +// CHECK:STDOUT: %pattern_type.loc6_20: type = pattern_type %impl.elem0.loc6_23.1 [symbolic = %pattern_type.loc6_20 (constants.%pattern_type.b984e7.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @G.1.%Self.as_type.loc6_14.1 (%Self.as_type.3df), %v.param: @G.1.%impl.elem0.loc6_23.1 (%impl.elem0.11fef0.1)) -> @G.1.%impl.elem0.loc6_23.1 (%impl.elem0.11fef0.1); // CHECK:STDOUT: } @@ -1361,10 +1389,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @GenericCallF(%T.loc24_17.1: %J.type) { // CHECK:STDOUT: %T.loc24_17.2: %J.type = bind_symbolic_name T, 0 [symbolic = %T.loc24_17.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc24_17.2: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_17.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc24_17.2: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_17.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc24_27.2: type = facet_access_type %T.loc24_17.2 [symbolic = %T.as_type.loc24_27.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type.loc24_24: type = pattern_type %T.as_type.loc24_27.2 [symbolic = %pattern_type.loc24_24 (constants.%pattern_type.4ca604.2)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %T.loc24_17.2, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.2)] // CHECK:STDOUT: %impl.elem0.loc24_34.2: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc24_34.2 (constants.%impl.elem0.11fef0.2)] +// CHECK:STDOUT: %pattern_type.loc24_30: type = pattern_type %impl.elem0.loc24_34.2 [symbolic = %pattern_type.loc24_30 (constants.%pattern_type.b984e7.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc24_38: = require_complete_type %impl.elem0.loc24_34.2 [symbolic = %require_complete.loc24_38 (constants.%require_complete.58f)] @@ -1421,13 +1451,16 @@ fn F() { // CHECK:STDOUT: %Self => constants.%Self.ccd // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.1 // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%impl.elem0.11fef0.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b984e7.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G.1(constants.%Self.ccd) { // CHECK:STDOUT: %Self => constants.%Self.ccd // CHECK:STDOUT: %Self.as_type.loc6_14.1 => constants.%Self.as_type.3df +// CHECK:STDOUT: %pattern_type.loc6_8 => constants.%pattern_type.4ca604.1 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.1 // CHECK:STDOUT: %impl.elem0.loc6_23.1 => constants.%impl.elem0.11fef0.1 +// CHECK:STDOUT: %pattern_type.loc6_20 => constants.%pattern_type.b984e7.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%J.facet.330) {} @@ -1436,13 +1469,16 @@ fn F() { // CHECK:STDOUT: %Self => constants.%J.facet.ee5 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G.1(constants.%J.facet.ee5) { // CHECK:STDOUT: %Self => constants.%J.facet.ee5 // CHECK:STDOUT: %Self.as_type.loc6_14.1 => constants.%E +// CHECK:STDOUT: %pattern_type.loc6_8 => constants.%pattern_type.a4a // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness // CHECK:STDOUT: %impl.elem0.loc6_23.1 => constants.%i32 +// CHECK:STDOUT: %pattern_type.loc6_20 => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%J.facet.5210a7.2) {} @@ -1451,14 +1487,17 @@ fn F() { // CHECK:STDOUT: %T.loc24_17.2 => constants.%T // CHECK:STDOUT: %T.patt.loc24_17.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc24_27.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type.loc24_24 => constants.%pattern_type.4ca604.2 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.2 // CHECK:STDOUT: %impl.elem0.loc24_34.2 => constants.%impl.elem0.11fef0.2 +// CHECK:STDOUT: %pattern_type.loc24_30 => constants.%pattern_type.b984e7.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%J.facet.5210a7.2) { // CHECK:STDOUT: %Self => constants.%J.facet.5210a7.2 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.2 // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%impl.elem0.11fef0.2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b984e7.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(@GenericCallF.%J.facet) {} @@ -1467,8 +1506,10 @@ fn F() { // CHECK:STDOUT: %T.loc24_17.2 => constants.%J.facet.ee5 // CHECK:STDOUT: %T.patt.loc24_17.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc24_27.2 => constants.%E +// CHECK:STDOUT: %pattern_type.loc24_24 => constants.%pattern_type.a4a // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness // CHECK:STDOUT: %impl.elem0.loc24_34.2 => constants.%i32 +// CHECK:STDOUT: %pattern_type.loc24_30 => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc24_38 => constants.%complete_type.f8a @@ -1492,16 +1533,20 @@ fn F() { // CHECK:STDOUT: %J.facet.5210a7.1: %J.type = facet_value %Self.as_type.3df, (%J.lookup_impl_witness.64628e.1) [symbolic] // CHECK:STDOUT: %impl.elem0.9980b1.1: %Add.type = impl_witness_access %J.lookup_impl_witness.64628e.1, element0 [symbolic] // CHECK:STDOUT: %as_type.1a19b2.1: type = facet_access_type %impl.elem0.9980b1.1 [symbolic] +// CHECK:STDOUT: %pattern_type.aea692.1: type = pattern_type %as_type.1a19b2.1 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %J.assoc_type = assoc_entity element1, @J.%F.decl [concrete] // CHECK:STDOUT: %T: %J.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %J.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.28e: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.4ca: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.64628e.2: = lookup_impl_witness %T, @J [symbolic] // CHECK:STDOUT: %J.facet.5210a7.2: %J.type = facet_value %T.as_type, (%J.lookup_impl_witness.64628e.2) [symbolic] // CHECK:STDOUT: %impl.elem0.9980b1.2: %Add.type = impl_witness_access %J.lookup_impl_witness.64628e.2, element0 [symbolic] // CHECK:STDOUT: %as_type.1a19b2.2: type = facet_access_type %impl.elem0.9980b1.2 [symbolic] +// CHECK:STDOUT: %pattern_type.aea692.2: type = pattern_type %as_type.1a19b2.2 [symbolic] // CHECK:STDOUT: %GenericAddResult.type: type = fn_type @GenericAddResult [concrete] // CHECK:STDOUT: %GenericAddResult: %GenericAddResult.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.9b6: = require_complete_type %as_type.1a19b2.2 [symbolic] @@ -1534,13 +1579,13 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %GenericAddResult.decl: %GenericAddResult.type = fn_decl @GenericAddResult [concrete = constants.%GenericAddResult] { -// CHECK:STDOUT: %T.patt.loc8_21.1: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_21.2 (constants.%T.patt)] -// CHECK:STDOUT: %t.patt: @GenericAddResult.%T.as_type.loc8_31.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @GenericAddResult.%T.as_type.loc8_31.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 -// CHECK:STDOUT: %u.patt: @GenericAddResult.%as_type.loc8_38.2 (%as_type.1a19b2.2) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @GenericAddResult.%as_type.loc8_38.2 (%as_type.1a19b2.2) = value_param_pattern %u.patt, call_param1 -// CHECK:STDOUT: %return.patt: @GenericAddResult.%as_type.loc8_38.2 (%as_type.1a19b2.2) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @GenericAddResult.%as_type.loc8_38.2 (%as_type.1a19b2.2) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %T.patt.loc8_21.1: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.patt: @GenericAddResult.%pattern_type.loc8_28 (%pattern_type.4ca) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @GenericAddResult.%pattern_type.loc8_28 (%pattern_type.4ca) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %u.patt: @GenericAddResult.%pattern_type.loc8_34 (%pattern_type.aea692.2) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @GenericAddResult.%pattern_type.loc8_34 (%pattern_type.aea692.2) = value_param_pattern %u.patt, call_param1 +// CHECK:STDOUT: %return.patt: @GenericAddResult.%pattern_type.loc8_34 (%pattern_type.aea692.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @GenericAddResult.%pattern_type.loc8_34 (%pattern_type.aea692.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_45: %J.type = name_ref T, %T.loc8_21.1 [symbolic = %T.loc8_21.2 (constants.%T)] // CHECK:STDOUT: %U.ref.loc8_46: %J.assoc_type = name_ref U, @U.%assoc0 [concrete = constants.%assoc0.304] @@ -1580,10 +1625,10 @@ fn F() { // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete = constants.%assoc0.304] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %u.patt: @F.%as_type (%as_type.1a19b2.1) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.%as_type (%as_type.1a19b2.1) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%as_type (%as_type.1a19b2.1) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%as_type (%as_type.1a19b2.1) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %u.patt: @F.%pattern_type (%pattern_type.aea692.1) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.%pattern_type (%pattern_type.aea692.1) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.aea692.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.aea692.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc5_17: %Add.type = impl_witness_access constants.%J.lookup_impl_witness.64628e.1, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.9980b1.1)] // CHECK:STDOUT: %U.ref.loc5_17: %Add.type = name_ref U, %impl.elem0.loc5_17 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.9980b1.1)] @@ -1618,17 +1663,20 @@ fn F() { // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.1)] // CHECK:STDOUT: %impl.elem0.loc5_11.1: %Add.type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.9980b1.1)] // CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0.loc5_11.1 [symbolic = %as_type (constants.%as_type.1a19b2.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %as_type [symbolic = %pattern_type (constants.%pattern_type.aea692.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @F.%as_type (%as_type.1a19b2.1)) -> @F.%as_type (%as_type.1a19b2.1); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @GenericAddResult(%T.loc8_21.1: %J.type) { // CHECK:STDOUT: %T.loc8_21.2: %J.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_21.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_21.2: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_21.2: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_21.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc8_31.2: type = facet_access_type %T.loc8_21.2 [symbolic = %T.as_type.loc8_31.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type.loc8_28: type = pattern_type %T.as_type.loc8_31.2 [symbolic = %pattern_type.loc8_28 (constants.%pattern_type.4ca)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %T.loc8_21.2, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.2)] // CHECK:STDOUT: %impl.elem0.loc8_38.2: %Add.type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc8_38.2 (constants.%impl.elem0.9980b1.2)] // CHECK:STDOUT: %as_type.loc8_38.2: type = facet_access_type %impl.elem0.loc8_38.2 [symbolic = %as_type.loc8_38.2 (constants.%as_type.1a19b2.2)] +// CHECK:STDOUT: %pattern_type.loc8_34: type = pattern_type %as_type.loc8_38.2 [symbolic = %pattern_type.loc8_34 (constants.%pattern_type.aea692.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_42: = require_complete_type %as_type.loc8_38.2 [symbolic = %require_complete.loc8_42 (constants.%require_complete.9b6)] @@ -1691,6 +1739,7 @@ fn F() { // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.1 // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%impl.elem0.9980b1.1 // CHECK:STDOUT: %as_type => constants.%as_type.1a19b2.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.aea692.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%J.facet.5210a7.2) {} @@ -1699,9 +1748,11 @@ fn F() { // CHECK:STDOUT: %T.loc8_21.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_21.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc8_31.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type.loc8_28 => constants.%pattern_type.4ca // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.2 // CHECK:STDOUT: %impl.elem0.loc8_38.2 => constants.%impl.elem0.9980b1.2 // CHECK:STDOUT: %as_type.loc8_38.2 => constants.%as_type.1a19b2.2 +// CHECK:STDOUT: %pattern_type.loc8_34 => constants.%pattern_type.aea692.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%J.facet.5210a7.2) { @@ -1709,6 +1760,7 @@ fn F() { // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.2 // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%impl.elem0.9980b1.2 // CHECK:STDOUT: %as_type => constants.%as_type.1a19b2.2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.aea692.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(@GenericAddResult.%J.facet) {} @@ -1721,18 +1773,23 @@ fn F() { // CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete] // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.4ca604.1: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.64628e.1: = lookup_impl_witness %Self, @J [symbolic] // CHECK:STDOUT: %J.facet.5210a7.1: %J.type = facet_value %Self.as_type, (%J.lookup_impl_witness.64628e.1) [symbolic] // CHECK:STDOUT: %impl.elem0.11fef0.1: type = impl_witness_access %J.lookup_impl_witness.64628e.1, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.b984e7.1: type = pattern_type %impl.elem0.11fef0.1 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %J.assoc_type = assoc_entity element1, @J.%G.decl [concrete] // CHECK:STDOUT: %T: %J.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %J.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.28e: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.4ca604.2: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.64628e.2: = lookup_impl_witness %T, @J [symbolic] // CHECK:STDOUT: %J.facet.5210a7.2: %J.type = facet_value %T.as_type, (%J.lookup_impl_witness.64628e.2) [symbolic] // CHECK:STDOUT: %impl.elem0.11fef0.2: type = impl_witness_access %J.lookup_impl_witness.64628e.2, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.b984e7.2: type = pattern_type %impl.elem0.11fef0.2 [symbolic] // CHECK:STDOUT: %GenericCallInterfaceQualified.type: type = fn_type @GenericCallInterfaceQualified [concrete] // CHECK:STDOUT: %GenericCallInterfaceQualified: %GenericCallInterfaceQualified.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.58f: = require_complete_type %impl.elem0.11fef0.2 [symbolic] @@ -1758,13 +1815,13 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %GenericCallInterfaceQualified.decl: %GenericCallInterfaceQualified.type = fn_decl @GenericCallInterfaceQualified [concrete = constants.%GenericCallInterfaceQualified] { -// CHECK:STDOUT: %T.patt.loc8_34.1: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_34.2 (constants.%T.patt)] -// CHECK:STDOUT: %t.patt: @GenericCallInterfaceQualified.%T.as_type.loc8_44.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @GenericCallInterfaceQualified.%T.as_type.loc8_44.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 -// CHECK:STDOUT: %u.patt: @GenericCallInterfaceQualified.%impl.elem0.loc8_51.2 (%impl.elem0.11fef0.2) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @GenericCallInterfaceQualified.%impl.elem0.loc8_51.2 (%impl.elem0.11fef0.2) = value_param_pattern %u.patt, call_param1 -// CHECK:STDOUT: %return.patt: @GenericCallInterfaceQualified.%impl.elem0.loc8_51.2 (%impl.elem0.11fef0.2) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @GenericCallInterfaceQualified.%impl.elem0.loc8_51.2 (%impl.elem0.11fef0.2) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %T.patt.loc8_34.1: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_34.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.patt: @GenericCallInterfaceQualified.%pattern_type.loc8_41 (%pattern_type.4ca604.2) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @GenericCallInterfaceQualified.%pattern_type.loc8_41 (%pattern_type.4ca604.2) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %u.patt: @GenericCallInterfaceQualified.%pattern_type.loc8_47 (%pattern_type.b984e7.2) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @GenericCallInterfaceQualified.%pattern_type.loc8_47 (%pattern_type.b984e7.2) = value_param_pattern %u.patt, call_param1 +// CHECK:STDOUT: %return.patt: @GenericCallInterfaceQualified.%pattern_type.loc8_47 (%pattern_type.b984e7.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @GenericCallInterfaceQualified.%pattern_type.loc8_47 (%pattern_type.b984e7.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_58: %J.type = name_ref T, %T.loc8_34.1 [symbolic = %T.loc8_34.2 (constants.%T)] // CHECK:STDOUT: %U.ref.loc8_59: %J.assoc_type = name_ref U, @U.%assoc0 [concrete = constants.%assoc0] @@ -1800,12 +1857,12 @@ fn F() { // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete = constants.%assoc0] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: @G.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %v.patt: @G.%impl.elem0.loc5_23.1 (%impl.elem0.11fef0.1) = binding_pattern v -// CHECK:STDOUT: %v.param_patt: @G.%impl.elem0.loc5_23.1 (%impl.elem0.11fef0.1) = value_param_pattern %v.patt, call_param1 -// CHECK:STDOUT: %return.patt: @G.%impl.elem0.loc5_23.1 (%impl.elem0.11fef0.1) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @G.%impl.elem0.loc5_23.1 (%impl.elem0.11fef0.1) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @G.%pattern_type.loc5_8 (%pattern_type.4ca604.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.%pattern_type.loc5_8 (%pattern_type.4ca604.1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %v.patt: @G.%pattern_type.loc5_20 (%pattern_type.b984e7.1) = binding_pattern v +// CHECK:STDOUT: %v.param_patt: @G.%pattern_type.loc5_20 (%pattern_type.b984e7.1) = value_param_pattern %v.patt, call_param1 +// CHECK:STDOUT: %return.patt: @G.%pattern_type.loc5_20 (%pattern_type.b984e7.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @G.%pattern_type.loc5_20 (%pattern_type.b984e7.1) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc5_29: type = impl_witness_access constants.%J.lookup_impl_witness.64628e.1, element0 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.11fef0.1)] // CHECK:STDOUT: %U.ref.loc5_29: type = name_ref U, %impl.elem0.loc5_29 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.11fef0.1)] @@ -1841,18 +1898,22 @@ fn F() { // CHECK:STDOUT: generic fn @G(@J.%Self: %J.type) { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc5_8: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type.loc5_8 (constants.%pattern_type.4ca604.1)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.1)] // CHECK:STDOUT: %impl.elem0.loc5_23.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.11fef0.1)] +// CHECK:STDOUT: %pattern_type.loc5_20: type = pattern_type %impl.elem0.loc5_23.1 [symbolic = %pattern_type.loc5_20 (constants.%pattern_type.b984e7.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @G.%Self.as_type.loc5_14.1 (%Self.as_type), %v.param: @G.%impl.elem0.loc5_23.1 (%impl.elem0.11fef0.1)) -> @G.%impl.elem0.loc5_23.1 (%impl.elem0.11fef0.1); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @GenericCallInterfaceQualified(%T.loc8_34.1: %J.type) { // CHECK:STDOUT: %T.loc8_34.2: %J.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_34.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_34.2: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_34.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_34.2: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_34.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc8_44.2: type = facet_access_type %T.loc8_34.2 [symbolic = %T.as_type.loc8_44.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type.loc8_41: type = pattern_type %T.as_type.loc8_44.2 [symbolic = %pattern_type.loc8_41 (constants.%pattern_type.4ca604.2)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %T.loc8_34.2, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.2)] // CHECK:STDOUT: %impl.elem0.loc8_51.2: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc8_51.2 (constants.%impl.elem0.11fef0.2)] +// CHECK:STDOUT: %pattern_type.loc8_47: type = pattern_type %impl.elem0.loc8_51.2 [symbolic = %pattern_type.loc8_47 (constants.%pattern_type.b984e7.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8_55: = require_complete_type %impl.elem0.loc8_51.2 [symbolic = %require_complete.loc8_55 (constants.%require_complete.58f)] @@ -1886,8 +1947,10 @@ fn F() { // CHECK:STDOUT: specific @G(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.4ca604.1 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.1 // CHECK:STDOUT: %impl.elem0.loc5_23.1 => constants.%impl.elem0.11fef0.1 +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.b984e7.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%J.facet.5210a7.2) {} @@ -1896,15 +1959,19 @@ fn F() { // CHECK:STDOUT: %T.loc8_34.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_34.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc8_44.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type.loc8_41 => constants.%pattern_type.4ca604.2 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.2 // CHECK:STDOUT: %impl.elem0.loc8_51.2 => constants.%impl.elem0.11fef0.2 +// CHECK:STDOUT: %pattern_type.loc8_47 => constants.%pattern_type.b984e7.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%J.facet.5210a7.2) { // CHECK:STDOUT: %Self => constants.%J.facet.5210a7.2 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.4ca604.2 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.2 // CHECK:STDOUT: %impl.elem0.loc5_23.1 => constants.%impl.elem0.11fef0.2 +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.b984e7.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(@GenericCallInterfaceQualified.%J.facet) {} @@ -1920,6 +1987,7 @@ fn F() { // CHECK:STDOUT: %J.lookup_impl_witness.646: = lookup_impl_witness %Self.ccd, @J [symbolic] // CHECK:STDOUT: %J.facet.521: %J.type = facet_value %Self.as_type.3df, (%J.lookup_impl_witness.646) [symbolic] // CHECK:STDOUT: %impl.elem0.11f: type = impl_witness_access %J.lookup_impl_witness.646, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.b98: type = pattern_type %impl.elem0.11f [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %J.assoc_type = assoc_entity element1, @J.%F.decl [concrete] @@ -1932,8 +2000,11 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where %impl.elem0.83f = %i32> [concrete] // CHECK:STDOUT: %T: %J_where.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %J_where.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.a22: type = pattern_type %J_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.a22 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.b32: type = pattern_type %T.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %GenericCallFI32.type: type = fn_type @GenericCallFI32 [concrete] // CHECK:STDOUT: %GenericCallFI32: %GenericCallFI32.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.5de: = require_complete_type %T.as_type [symbolic] @@ -1943,6 +2014,7 @@ fn F() { // CHECK:STDOUT: %impl.elem1: %.9b0 = impl_witness_access %J.lookup_impl_witness.bee, element1 [symbolic] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %impl.elem0.db9: type = impl_witness_access %J.lookup_impl_witness.bee, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.c1e: type = pattern_type %impl.elem0.db9 [symbolic] // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem1, @F(%J.facet.487) [symbolic] // CHECK:STDOUT: %require_complete.cfd: = require_complete_type %impl.elem0.db9 [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] @@ -1976,11 +2048,11 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %GenericCallFI32.decl: %GenericCallFI32.type = fn_decl @GenericCallFI32 [concrete = constants.%GenericCallFI32] { -// CHECK:STDOUT: %T.patt.loc8_20.1: %J_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] -// CHECK:STDOUT: %t.patt: @GenericCallFI32.%T.as_type.loc8_45.2 (%T.as_type) = binding_pattern t -// CHECK:STDOUT: %t.param_patt: @GenericCallFI32.%T.as_type.loc8_45.2 (%T.as_type) = value_param_pattern %t.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %T.patt.loc8_20.1: %pattern_type.a22 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] +// CHECK:STDOUT: %t.patt: @GenericCallFI32.%pattern_type (%pattern_type.b32) = binding_pattern t +// CHECK:STDOUT: %t.param_patt: @GenericCallFI32.%pattern_type (%pattern_type.b32) = value_param_pattern %t.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc8_51: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc8_51: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -2017,10 +2089,10 @@ fn F() { // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete = constants.%assoc0.411] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %u.patt: @F.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %u.patt: @F.%pattern_type (%pattern_type.b98) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.%pattern_type (%pattern_type.b98) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.b98) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.b98) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc5_17: type = impl_witness_access constants.%J.lookup_impl_witness.646, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] // CHECK:STDOUT: %U.ref.loc5_17: type = name_ref U, %impl.elem0.loc5_17 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] @@ -2050,14 +2122,16 @@ fn F() { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.ccd)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.646)] // CHECK:STDOUT: %impl.elem0.loc5_11.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc5_11.1 [symbolic = %pattern_type (constants.%pattern_type.b98)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @F.%impl.elem0.loc5_11.1 (%impl.elem0.11f)) -> @F.%impl.elem0.loc5_11.1 (%impl.elem0.11f); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @GenericCallFI32(%T.loc8_20.1: %J_where.type) { // CHECK:STDOUT: %T.loc8_20.2: %J_where.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_20.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_20.2: %J_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_20.2: %pattern_type.a22 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc8_45.2: type = facet_access_type %T.loc8_20.2 [symbolic = %T.as_type.loc8_45.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_45.2 [symbolic = %pattern_type (constants.%pattern_type.b32)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc8: = require_complete_type %T.as_type.loc8_45.2 [symbolic = %require_complete.loc8 (constants.%require_complete.5de)] @@ -2100,6 +2174,7 @@ fn F() { // CHECK:STDOUT: %Self => constants.%Self.ccd // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.646 // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%impl.elem0.11f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b98 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%J.facet.330) {} @@ -2108,12 +2183,14 @@ fn F() { // CHECK:STDOUT: %T.loc8_20.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_20.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc8_45.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b32 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%J.facet.487) { // CHECK:STDOUT: %Self => constants.%J.facet.487 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.bee // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%impl.elem0.db9 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c1e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(@GenericCallFI32.%J.facet) {} @@ -2129,6 +2206,7 @@ fn F() { // CHECK:STDOUT: %J.lookup_impl_witness.646: = lookup_impl_witness %Self.ccd, @J [symbolic] // CHECK:STDOUT: %J.facet.521: %J.type = facet_value %Self.as_type.3df, (%J.lookup_impl_witness.646) [symbolic] // CHECK:STDOUT: %impl.elem0.11f: type = impl_witness_access %J.lookup_impl_witness.646, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.b98: type = pattern_type %impl.elem0.11f [symbolic] // CHECK:STDOUT: %F.type.c14: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.b71: %F.type.c14 = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %J.assoc_type = assoc_entity element1, @J.%F.decl [concrete] @@ -2145,6 +2223,7 @@ fn F() { // CHECK:STDOUT: %F.type.b84: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.b07: %F.type.b84 = struct_value () [concrete] // CHECK:STDOUT: %J.facet.bd9: %J.type = facet_value %E, (%J.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -2177,10 +2256,10 @@ fn F() { // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete = constants.%assoc0.411] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.c14 = fn_decl @F.1 [concrete = constants.%F.b71] { -// CHECK:STDOUT: %u.patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %u.patt: @F.1.%pattern_type (%pattern_type.b98) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.1.%pattern_type (%pattern_type.b98) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.b98) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.b98) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc5_17: type = impl_witness_access constants.%J.lookup_impl_witness.646, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] // CHECK:STDOUT: %U.ref.loc5_17: type = name_ref U, %impl.elem0.loc5_17 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] @@ -2265,6 +2344,7 @@ fn F() { // CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.ccd)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %Self, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.646)] // CHECK:STDOUT: %impl.elem0.loc5_11.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_11.1 (constants.%impl.elem0.11f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc5_11.1 [symbolic = %pattern_type (constants.%pattern_type.b98)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f)) -> @F.1.%impl.elem0.loc5_11.1 (%impl.elem0.11f); // CHECK:STDOUT: } @@ -2285,6 +2365,7 @@ fn F() { // CHECK:STDOUT: %Self => constants.%Self.ccd // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.646 // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%impl.elem0.11f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b98 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U(constants.%J.facet.330) {} @@ -2293,6 +2374,7 @@ fn F() { // CHECK:STDOUT: %Self => constants.%J.facet.bd9 // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.impl_witness // CHECK:STDOUT: %impl.elem0.loc5_11.1 => constants.%i32 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_self_period_associated_type.carbon @@ -2303,6 +2385,7 @@ fn F() { // CHECK:STDOUT: %J2.assoc_type: type = assoc_entity_type @J2 [concrete] // CHECK:STDOUT: %assoc0: %J2.assoc_type = assoc_entity element0, @J2.%U2 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.969: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.c41: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.932: %F.type.c41 = struct_value () [concrete] @@ -2315,6 +2398,8 @@ fn F() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %J2_where.type.9e1: type = facet_type <@J2 where %impl.elem0 = %empty_struct_type> [concrete] // CHECK:STDOUT: %J2.impl_witness.1aa: = impl_witness file.%J2.impl_witness_table.loc22 [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %F.type.f40: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.214: %F.type.f40 = struct_value () [concrete] // CHECK:STDOUT: %J2.facet.af8: %J2.type = facet_value %empty_tuple.type, (%J2.impl_witness.1aa) [concrete] @@ -2322,6 +2407,7 @@ fn F() { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %J2_where.type.df9: type = facet_type <@J2 where %impl.elem0 = %C2> [concrete] // CHECK:STDOUT: %J2.impl_witness.774: = impl_witness file.%J2.impl_witness_table.loc31 [concrete] +// CHECK:STDOUT: %pattern_type.838: type = pattern_type %C2 [concrete] // CHECK:STDOUT: %F.type.05d: type = fn_type @F.3 [concrete] // CHECK:STDOUT: %F.bfa: %F.type.05d = struct_value () [concrete] // CHECK:STDOUT: %J2.facet.eed: %J2.type = facet_value %C2, (%J2.impl_witness.774) [concrete] @@ -2387,8 +2473,8 @@ fn F() { // CHECK:STDOUT: %assoc0: %J2.assoc_type = assoc_entity element0, @J2.%U2 [concrete = constants.%assoc0] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.c41 = fn_decl @F.1 [concrete = constants.%F.932] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc19_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc19_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.969) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.969) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: %z.patt: = binding_pattern z // CHECK:STDOUT: %z.param_patt: = value_param_pattern %z.patt, call_param1 [concrete = ] // CHECK:STDOUT: %return.patt: = return_slot_pattern @@ -2423,12 +2509,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.4e9: %.loc22_7.2 as %.loc22_15 { // CHECK:STDOUT: %F.decl: %F.type.f40 = fn_decl @F.2 [concrete = constants.%F.214] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %z.patt: %empty_struct_type = binding_pattern z -// CHECK:STDOUT: %z.param_patt: %empty_struct_type = value_param_pattern %z.patt, call_param1 -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %z.patt: %pattern_type.a96 = binding_pattern z +// CHECK:STDOUT: %z.param_patt: %pattern_type.a96 = value_param_pattern %z.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc23_31.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc23_31.2: type = converted %.loc23_31.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -2452,12 +2538,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.8b3: %C2.ref.loc31_6 as %.loc31_15 { // CHECK:STDOUT: %F.decl: %F.type.05d = fn_decl @F.3 [concrete = constants.%F.bfa] { -// CHECK:STDOUT: %self.patt: %C2 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C2 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %z.patt: %C2 = binding_pattern z -// CHECK:STDOUT: %z.param_patt: %C2 = value_param_pattern %z.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C2 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C2 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.838 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.838 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %z.patt: %pattern_type.838 = binding_pattern z +// CHECK:STDOUT: %z.param_patt: %pattern_type.838 = value_param_pattern %z.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.838 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.838 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C2.ref.loc32_30: type = name_ref C2, file.%C2.decl [concrete = constants.%C2] // CHECK:STDOUT: %self.param: %C2 = value_param call_param0 @@ -2490,6 +2576,7 @@ fn F() { // CHECK:STDOUT: generic fn @F.1(@J2.%Self: %J2.type) { // CHECK:STDOUT: %Self: %J2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc19_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc19_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc19_14.1 [symbolic = %pattern_type (constants.%pattern_type.969)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc19_14.1 (%Self.as_type), %z.param: ) -> ; // CHECK:STDOUT: } @@ -2511,6 +2598,7 @@ fn F() { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc19_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.969 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @U2(constants.%J2.facet.e30) {} @@ -2518,11 +2606,13 @@ fn F() { // CHECK:STDOUT: specific @F.1(constants.%J2.facet.af8) { // CHECK:STDOUT: %Self => constants.%J2.facet.af8 // CHECK:STDOUT: %Self.as_type.loc19_14.1 => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%J2.facet.eed) { // CHECK:STDOUT: %Self => constants.%J2.facet.eed // CHECK:STDOUT: %Self.as_type.loc19_14.1 => constants.%C2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.838 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_associated_type_in_signature_mismatch.carbon @@ -2533,9 +2623,11 @@ fn F() { // CHECK:STDOUT: %K.assoc_type: type = assoc_entity_type @K [concrete] // CHECK:STDOUT: %assoc0: %K.assoc_type = assoc_entity element0, @K.%V [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.ca1: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %K.lookup_impl_witness.da8: = lookup_impl_witness %Self, @K [symbolic] // CHECK:STDOUT: %K.facet.589: %K.type = facet_value %Self.as_type, (%K.lookup_impl_witness.da8) [symbolic] // CHECK:STDOUT: %impl.elem0.75d: type = impl_witness_access %K.lookup_impl_witness.da8, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.6c7: type = pattern_type %impl.elem0.75d [symbolic] // CHECK:STDOUT: %F.type.cf5: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.06b: %F.type.cf5 = struct_value () [concrete] @@ -2548,10 +2640,13 @@ fn F() { // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %empty_tuple.type} [concrete] // CHECK:STDOUT: %K_where.type: type = facet_type <@K where %impl.elem0.52c = %struct_type.a> [concrete] // CHECK:STDOUT: %K.impl_witness: = impl_witness file.%K.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] +// CHECK:STDOUT: %pattern_type.414: type = pattern_type %struct_type.x [concrete] // CHECK:STDOUT: %F.type.c52: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.5eb: %F.type.c52 = struct_value () [concrete] // CHECK:STDOUT: %K.facet.77f: %K.type = facet_value %empty_tuple.type, (%K.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.e85: type = pattern_type %struct_type.a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -2596,12 +2691,12 @@ fn F() { // CHECK:STDOUT: %assoc0: %K.assoc_type = assoc_entity element0, @K.%V [concrete = constants.%assoc0] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.cf5 = fn_decl @F.1 [concrete = constants.%F.06b] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %v.patt: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.75d) = binding_pattern v -// CHECK:STDOUT: %v.param_patt: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.75d) = value_param_pattern %v.patt, call_param1 -// CHECK:STDOUT: %return.patt: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.75d) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.75d) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type.loc5_8 (%pattern_type.ca1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type.loc5_8 (%pattern_type.ca1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %v.patt: @F.1.%pattern_type.loc5_20 (%pattern_type.6c7) = binding_pattern v +// CHECK:STDOUT: %v.param_patt: @F.1.%pattern_type.loc5_20 (%pattern_type.6c7) = value_param_pattern %v.patt, call_param1 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type.loc5_20 (%pattern_type.6c7) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type.loc5_20 (%pattern_type.6c7) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc5_29: type = impl_witness_access constants.%K.lookup_impl_witness.da8, element0 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.75d)] // CHECK:STDOUT: %V.ref.loc5_29: type = name_ref V, %impl.elem0.loc5_29 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.75d)] @@ -2636,12 +2731,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %.loc8_7.2 as %.loc8_14 { // CHECK:STDOUT: %F.decl: %F.type.c52 = fn_decl @F.2 [concrete = constants.%F.5eb] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %v.patt: %struct_type.x = binding_pattern v -// CHECK:STDOUT: %v.param_patt: %struct_type.x = value_param_pattern %v.patt, call_param1 -// CHECK:STDOUT: %return.patt: %struct_type.x = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.x = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %v.patt: %pattern_type.414 = binding_pattern v +// CHECK:STDOUT: %v.param_patt: %pattern_type.414 = value_param_pattern %v.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.414 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.414 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc16_42.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc16_42.2: type = converted %.loc16_42.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -2668,8 +2763,10 @@ fn F() { // CHECK:STDOUT: generic fn @F.1(@K.%Self: %K.type) { // CHECK:STDOUT: %Self: %K.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc5_8: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type.loc5_8 (constants.%pattern_type.ca1)] // CHECK:STDOUT: %K.lookup_impl_witness: = lookup_impl_witness %Self, @K [symbolic = %K.lookup_impl_witness (constants.%K.lookup_impl_witness.da8)] // CHECK:STDOUT: %impl.elem0.loc5_23.1: type = impl_witness_access %K.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_23.1 (constants.%impl.elem0.75d)] +// CHECK:STDOUT: %pattern_type.loc5_20: type = pattern_type %impl.elem0.loc5_23.1 [symbolic = %pattern_type.loc5_20 (constants.%pattern_type.6c7)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type), %v.param: @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.75d)) -> @F.1.%impl.elem0.loc5_23.1 (%impl.elem0.75d); // CHECK:STDOUT: } @@ -2687,8 +2784,10 @@ fn F() { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.ca1 // CHECK:STDOUT: %K.lookup_impl_witness => constants.%K.lookup_impl_witness.da8 // CHECK:STDOUT: %impl.elem0.loc5_23.1 => constants.%impl.elem0.75d +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.6c7 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @V(constants.%K.facet.b09) {} @@ -2696,8 +2795,10 @@ fn F() { // CHECK:STDOUT: specific @F.1(constants.%K.facet.77f) { // CHECK:STDOUT: %Self => constants.%K.facet.77f // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.cb1 // CHECK:STDOUT: %K.lookup_impl_witness => constants.%K.impl_witness // CHECK:STDOUT: %impl.elem0.loc5_23.1 => constants.%struct_type.a +// CHECK:STDOUT: %pattern_type.loc5_20 => constants.%pattern_type.e85 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_non-type_in_function.carbon @@ -2710,6 +2811,7 @@ fn F() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %M.assoc_type: type = assoc_entity_type @M [concrete] // CHECK:STDOUT: %assoc0: %M.assoc_type = assoc_entity element0, @M.%Z [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %G.type.020: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %G.91c: %G.type.020 = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %M.assoc_type = assoc_entity element1, @M.%G.decl [concrete] @@ -2772,8 +2874,8 @@ fn F() { // CHECK:STDOUT: %assoc0: %M.assoc_type = assoc_entity element0, @M.%Z [concrete = constants.%assoc0] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type.020 = fn_decl @G.1 [concrete = constants.%G.91c] { -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc5_14.2: type = converted %.loc5_14.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -2795,8 +2897,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %.loc8_7.2 as %.loc8_14 { // CHECK:STDOUT: %G.decl: %G.type.8d1 = fn_decl @G.2 [concrete = constants.%G.bb3] { -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_14.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc9_14.2: type = converted %.loc9_14.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -2842,7 +2944,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] @@ -2895,7 +2998,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc3_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc3_9.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc3_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -2956,8 +3059,8 @@ fn F() { // CHECK:STDOUT: %assoc0: %M.assoc_type = assoc_entity element0, @M.%Z [concrete = constants.%assoc0] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type.020 = fn_decl @G.1 [concrete = constants.%G.91c] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param @@ -2977,8 +3080,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.8b4: %C as %.loc10_17 { // CHECK:STDOUT: %G.decl: %G.type.d92 = fn_decl @G.2 [concrete = constants.%G.eac] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param @@ -2992,8 +3095,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.d97: %C as %.loc16_17 { // CHECK:STDOUT: %G.decl: %G.type.b29 = fn_decl @G.3 [concrete = constants.%G.f3b] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param @@ -3007,7 +3110,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc3_9.1: type) { // CHECK:STDOUT: %T.loc3_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc3_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc3_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc3_9.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc3_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -3093,6 +3196,7 @@ fn F() { // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0.995: %I.assoc_type = assoc_entity element0, @I.%N [concrete] // CHECK:STDOUT: %Self.as_type.b70: type = facet_access_type %Self.826 [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %Self.as_type.b70 [symbolic] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %I.lookup_impl_witness.5d6: = lookup_impl_witness %Self.826, @I [symbolic] @@ -3112,6 +3216,7 @@ fn F() { // CHECK:STDOUT: %bound_method.81c: = bound_method %impl.elem0.fab, %Convert.specific_fn.8a8 [symbolic] // CHECK:STDOUT: %int.convert_checked: init Core.IntLiteral = call %bound_method.81c(%impl.elem0.fab) [symbolic] // CHECK:STDOUT: %array_type.377: type = array_type %int.convert_checked, bool [symbolic] +// CHECK:STDOUT: %pattern_type.bc6: type = pattern_type %array_type.377 [symbolic] // CHECK:STDOUT: %F.type.cf0: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %F.bc6: %F.type.cf0 = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.%F.decl [concrete] @@ -3134,7 +3239,9 @@ fn F() { // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0.d4d = %int_2.ef8> [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness file.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %array_type.c9b: type = array_type %int_2.ecc, bool [concrete] +// CHECK:STDOUT: %pattern_type.5d5: type = pattern_type %array_type.c9b [concrete] // CHECK:STDOUT: %F.type.2c7: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.0b4: %F.type.2c7 = struct_value () [concrete] // CHECK:STDOUT: %I.facet.85d: %I.type = facet_value %empty_tuple.type, (%I.impl_witness) [concrete] @@ -3198,10 +3305,10 @@ fn F() { // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%N [concrete = constants.%assoc0.995] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.cf0 = fn_decl @F.1 [concrete = constants.%F.bc6] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type.b70) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type.b70) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%array_type.loc5_38.1 (%array_type.377) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%array_type.loc5_38.1 (%array_type.377) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type.loc5_8 (%pattern_type.6de) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type.loc5_8 (%pattern_type.6de) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type.loc5_22 (%pattern_type.bc6) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type.loc5_22 (%pattern_type.bc6) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %impl.elem0.loc5_37.2: %i32 = impl_witness_access constants.%I.lookup_impl_witness.5d6, element0 [symbolic = %impl.elem0.loc5_37.1 (constants.%impl.elem0.fab)] @@ -3241,10 +3348,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.9a6: %.loc8_7.2 as %.loc8_14 { // CHECK:STDOUT: %F.decl: %F.type.2c7 = fn_decl @F.2 [concrete = constants.%F.0b4] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %array_type.c9b = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %array_type.c9b = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5d5 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5d5 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] @@ -3266,12 +3373,14 @@ fn F() { // CHECK:STDOUT: generic fn @F.1(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.826)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type.b70)] +// CHECK:STDOUT: %pattern_type.loc5_8: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type.loc5_8 (constants.%pattern_type.6de)] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %Self, @I [symbolic = %I.lookup_impl_witness (constants.%I.lookup_impl_witness.5d6)] // CHECK:STDOUT: %impl.elem0.loc5_37.1: %i32 = impl_witness_access %I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc5_37.1 (constants.%impl.elem0.fab)] // CHECK:STDOUT: %Convert.bound: = bound_method %impl.elem0.loc5_37.1, constants.%Convert.960 [symbolic = %Convert.bound (constants.%Convert.bound.44d)] // CHECK:STDOUT: %bound_method.loc5_37.1: = bound_method %impl.elem0.loc5_37.1, constants.%Convert.specific_fn.8a8 [symbolic = %bound_method.loc5_37.1 (constants.%bound_method.81c)] // CHECK:STDOUT: %int.convert_checked.loc5_37.1: init Core.IntLiteral = call %bound_method.loc5_37.1(%impl.elem0.loc5_37.1) [symbolic = %int.convert_checked.loc5_37.1 (constants.%int.convert_checked)] // CHECK:STDOUT: %array_type.loc5_38.1: type = array_type %int.convert_checked.loc5_37.1, bool [symbolic = %array_type.loc5_38.1 (constants.%array_type.377)] +// CHECK:STDOUT: %pattern_type.loc5_22: type = pattern_type %array_type.loc5_38.1 [symbolic = %pattern_type.loc5_22 (constants.%pattern_type.bc6)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc5_14.1 (%Self.as_type.b70)) -> @F.1.%array_type.loc5_38.1 (%array_type.377); // CHECK:STDOUT: } @@ -3299,12 +3408,14 @@ fn F() { // CHECK:STDOUT: specific @F.1(constants.%Self.826) { // CHECK:STDOUT: %Self => constants.%Self.826 // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type.b70 +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.6de // CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.lookup_impl_witness.5d6 // CHECK:STDOUT: %impl.elem0.loc5_37.1 => constants.%impl.elem0.fab // CHECK:STDOUT: %Convert.bound => constants.%Convert.bound.44d // CHECK:STDOUT: %bound_method.loc5_37.1 => constants.%bound_method.81c // CHECK:STDOUT: %int.convert_checked.loc5_37.1 => constants.%int.convert_checked // CHECK:STDOUT: %array_type.loc5_38.1 => constants.%array_type.377 +// CHECK:STDOUT: %pattern_type.loc5_22 => constants.%pattern_type.bc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @N(constants.%I.facet.74c) {} @@ -3312,12 +3423,14 @@ fn F() { // CHECK:STDOUT: specific @F.1(constants.%I.facet.85d) { // CHECK:STDOUT: %Self => constants.%I.facet.85d // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type.loc5_8 => constants.%pattern_type.cb1 // CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.impl_witness // CHECK:STDOUT: %impl.elem0.loc5_37.1 => constants.%int_2.ef8 // CHECK:STDOUT: %Convert.bound => constants.%Convert.bound.fbf // CHECK:STDOUT: %bound_method.loc5_37.1 => constants.%bound_method.992 // CHECK:STDOUT: %int.convert_checked.loc5_37.1 => constants.%int_2.ecc // CHECK:STDOUT: %array_type.loc5_38.1 => constants.%array_type.c9b +// CHECK:STDOUT: %pattern_type.loc5_22 => constants.%pattern_type.5d5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- symbolic_associated_type_in_concrete_context.carbon @@ -3328,7 +3441,8 @@ fn F() { // CHECK:STDOUT: %Z.assoc_type: type = assoc_entity_type @Z [concrete] // CHECK:STDOUT: %assoc0: %Z.assoc_type = assoc_entity element0, @Z.%X [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.f2e: type = class_type @C, @C(%T) [symbolic] @@ -3350,6 +3464,7 @@ fn F() { // CHECK:STDOUT: %complete_type.00b: = complete_type_witness %Z_where.type.1a6 [concrete] // CHECK:STDOUT: %Z.impl_witness.19e: = impl_witness file.%Z.impl_witness_table, @impl(%D) [concrete] // CHECK:STDOUT: %Z.facet.f2a: %Z.type = facet_value %D, (%Z.impl_witness.19e) [concrete] +// CHECK:STDOUT: %pattern_type.7f8: type = pattern_type %C.131 [concrete] // CHECK:STDOUT: %C.val: %C.131 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -3371,13 +3486,13 @@ fn F() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {} // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc6_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_9.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc9_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc9_24: type = name_ref T, %T.loc9_14.1 [symbolic = %T.loc9_14.2 (constants.%T)] // CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type] @@ -3419,7 +3534,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc9_14.1: type) { // CHECK:STDOUT: %T.loc9_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc9_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc9_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_14.2 (constants.%T.patt)] // CHECK:STDOUT: %C.loc9_45.2: type = class_type @C, @C(%T.loc9_14.2) [symbolic = %C.loc9_45.2 (constants.%C.f2e)] // CHECK:STDOUT: %Z_where.type: type = facet_type <@Z where constants.%impl.elem0 = %C.loc9_45.2> [symbolic = %Z_where.type (constants.%Z_where.type.585)] // CHECK:STDOUT: %require_complete: = require_complete_type %Z_where.type [symbolic = %require_complete (constants.%require_complete)] @@ -3435,7 +3550,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc6_9.1: type) { // CHECK:STDOUT: %T.loc6_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_9.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -3461,7 +3576,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C.131 = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.7f8 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %.loc12_21.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] diff --git a/toolchain/check/testdata/index/array_element_access.carbon b/toolchain/check/testdata/index/array_element_access.carbon index 98f6e0491ab3..b474383462d8 100644 --- a/toolchain/check/testdata/index/array_element_access.carbon +++ b/toolchain/check/testdata/index/array_element_access.carbon @@ -20,6 +20,7 @@ var d: i32 = a[b]; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_2, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.ae7: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %int_24.e3c: Core.IntLiteral = int_value 24 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -33,6 +34,7 @@ var d: i32 = a[b]; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.221: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.dae: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -68,8 +70,8 @@ var d: i32 = a[b]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.ae7 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.ae7 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type [concrete = constants.%array_type] { @@ -80,8 +82,8 @@ var d: i32 = a[b]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc12_8: type = splice_block %i32.loc12 [concrete = constants.%i32] { @@ -90,8 +92,8 @@ var d: i32 = a[b]; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c -// CHECK:STDOUT: %.loc13_1: %i32 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c +// CHECK:STDOUT: %.loc13_1: %pattern_type.7ce = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var c // CHECK:STDOUT: %.loc13_8: type = splice_block %i32.loc13 [concrete = constants.%i32] { @@ -100,8 +102,8 @@ var d: i32 = a[b]; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %i32 = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %i32 = binding_pattern d -// CHECK:STDOUT: %.loc14_1: %i32 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.7ce = binding_pattern d +// CHECK:STDOUT: %.loc14_1: %pattern_type.7ce = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var d // CHECK:STDOUT: %.loc14_8: type = splice_block %i32.loc14 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/index/expr_category.carbon b/toolchain/check/testdata/index/expr_category.carbon index 7d58eec1597a..c05e8814fb29 100644 --- a/toolchain/check/testdata/index/expr_category.carbon +++ b/toolchain/check/testdata/index/expr_category.carbon @@ -35,6 +35,7 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3.1ba, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -63,6 +64,7 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %int_3.822: %i32 = int_value 3 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%int_1.5d2, %int_2.ef8, %int_3.822) [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %Convert.bound.d04: = bound_method %int_0.5c6, %Convert.956 [concrete] // CHECK:STDOUT: %bound_method.b6e: = bound_method %int_0.5c6, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] @@ -92,8 +94,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %array_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %array_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5d8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5d8 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -103,8 +105,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %return: ref %array_type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %b.patt: %array_type = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %array_type = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.5d8 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.5d8 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %array_type = value_param call_param0 // CHECK:STDOUT: %.loc13: type = splice_block %array_type.loc13 [concrete = constants.%array_type] { @@ -116,8 +118,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: %b: %array_type = bind_name b, %b.param // CHECK:STDOUT: } // CHECK:STDOUT: %ValueBinding.decl: %ValueBinding.type = fn_decl @ValueBinding [concrete = constants.%ValueBinding] { -// CHECK:STDOUT: %b.patt: %array_type = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %array_type = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.5d8 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.5d8 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %array_type = value_param call_param0 // CHECK:STDOUT: %.loc21: type = splice_block %array_type.loc21 [concrete = constants.%array_type] { @@ -135,8 +137,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: fn @G(%b.param: %array_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc14_3.1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.5d8 = binding_pattern a +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.5d8 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %int_1.loc14_27: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -181,8 +183,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pa.patt: %ptr.235 = binding_pattern pa -// CHECK:STDOUT: %.loc17_3: %ptr.235 = var_pattern %pa.patt +// CHECK:STDOUT: %pa.patt: %pattern_type.fe8 = binding_pattern pa +// CHECK:STDOUT: %.loc17_3: %pattern_type.fe8 = var_pattern %pa.patt // CHECK:STDOUT: } // CHECK:STDOUT: %pa.var: ref %ptr.235 = var pa // CHECK:STDOUT: %a.ref.loc17: ref %array_type = name_ref a, %a @@ -231,8 +233,8 @@ fn ValueBinding(b: array(i32, 3)) { // CHECK:STDOUT: fn @ValueBinding(%b.param: %array_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc22_3.1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.5d8 = binding_pattern a +// CHECK:STDOUT: %.loc22_3.1: %pattern_type.5d8 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %int_1.loc22_27: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/index/fail_array_large_index.carbon b/toolchain/check/testdata/index/fail_array_large_index.carbon index f71d21bb344e..b7919457371b 100644 --- a/toolchain/check/testdata/index/fail_array_large_index.carbon +++ b/toolchain/check/testdata/index/fail_array_large_index.carbon @@ -29,6 +29,7 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -41,6 +42,7 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.221: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.dae: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -72,8 +74,8 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a98 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.a98 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type [concrete = constants.%array_type] { @@ -84,8 +86,8 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc17_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc17_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc17_8: type = splice_block %i32.loc17 [concrete = constants.%i32] { @@ -94,8 +96,8 @@ var c: i32 = a[0x7FFF_FFFF]; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c -// CHECK:STDOUT: %.loc23_1: %i32 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c +// CHECK:STDOUT: %.loc23_1: %pattern_type.7ce = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var c // CHECK:STDOUT: %.loc23_8: type = splice_block %i32.loc23 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/index/fail_array_non_int_indexing.carbon b/toolchain/check/testdata/index/fail_array_non_int_indexing.carbon index 1c1bf4bcef54..86504484a809 100644 --- a/toolchain/check/testdata/index/fail_array_non_int_indexing.carbon +++ b/toolchain/check/testdata/index/fail_array_non_int_indexing.carbon @@ -25,6 +25,7 @@ var b: i32 = a[2.6]; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -37,6 +38,7 @@ var b: i32 = a[2.6]; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -61,8 +63,8 @@ var b: i32 = a[2.6]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a98 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.a98 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type [concrete = constants.%array_type] { @@ -73,8 +75,8 @@ var b: i32 = a[2.6]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc19_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc19_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc19_8: type = splice_block %i32.loc19 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/index/fail_array_out_of_bound_access.carbon b/toolchain/check/testdata/index/fail_array_out_of_bound_access.carbon index ea5cb88a8fd6..d49fe7c7e744 100644 --- a/toolchain/check/testdata/index/fail_array_out_of_bound_access.carbon +++ b/toolchain/check/testdata/index/fail_array_out_of_bound_access.carbon @@ -22,6 +22,7 @@ var b: i32 = a[1]; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_1.5b8, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.a98: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -34,6 +35,7 @@ var b: i32 = a[1]; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.221: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.dae: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -60,8 +62,8 @@ var b: i32 = a[1]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %array_type = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %array_type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.a98 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.a98 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %array_type = var a // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type [concrete = constants.%array_type] { @@ -72,8 +74,8 @@ var b: i32 = a[1]; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/index/fail_expr_category.carbon b/toolchain/check/testdata/index/fail_expr_category.carbon index 079b34f3fc04..7a5cf59a98bc 100644 --- a/toolchain/check/testdata/index/fail_expr_category.carbon +++ b/toolchain/check/testdata/index/fail_expr_category.carbon @@ -44,11 +44,13 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_3, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.5d8: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -85,8 +87,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %array_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %array_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5d8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5d8 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -96,8 +98,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: %return: ref %array_type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %b.patt: %array_type = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %array_type = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.5d8 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.5d8 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %array_type = value_param call_param0 // CHECK:STDOUT: %.loc13: type = splice_block %array_type [concrete = constants.%array_type] { @@ -115,8 +117,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: fn @G(%b.param: %array_type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pb.patt: %ptr.235 = binding_pattern pb -// CHECK:STDOUT: %.loc19_3: %ptr.235 = var_pattern %pb.patt +// CHECK:STDOUT: %pb.patt: %pattern_type.fe8 = binding_pattern pb +// CHECK:STDOUT: %.loc19_3: %pattern_type.fe8 = var_pattern %pb.patt // CHECK:STDOUT: } // CHECK:STDOUT: %pb.var: ref %ptr.235 = var pb // CHECK:STDOUT: %b.ref.loc19: %array_type = name_ref b, %b @@ -164,8 +166,8 @@ fn G(b: array(i32, 3)) { // CHECK:STDOUT: %.loc24_8: init %i32 = converted %int_4.loc24, %int.convert_checked.loc24_8 [concrete = constants.%int_4.940] // CHECK:STDOUT: assign %.loc24_6.3, %.loc24_8 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %pf.patt: %ptr.235 = binding_pattern pf -// CHECK:STDOUT: %.loc32_3: %ptr.235 = var_pattern %pf.patt +// CHECK:STDOUT: %pf.patt: %pattern_type.fe8 = binding_pattern pf +// CHECK:STDOUT: %.loc32_3: %pattern_type.fe8 = var_pattern %pf.patt // CHECK:STDOUT: } // CHECK:STDOUT: %pf.var: ref %ptr.235 = var pf // CHECK:STDOUT: %F.ref.loc32: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] diff --git a/toolchain/check/testdata/index/fail_invalid_base.carbon b/toolchain/check/testdata/index/fail_invalid_base.carbon index 2696865165c1..86d2bbb9a4be 100644 --- a/toolchain/check/testdata/index/fail_invalid_base.carbon +++ b/toolchain/check/testdata/index/fail_invalid_base.carbon @@ -39,6 +39,7 @@ var d: i32 = {.a: i32, .b: i32}[0]; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -71,8 +72,8 @@ var d: i32 = {.a: i32, .b: i32}[0]; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %N: = namespace [concrete] {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { @@ -82,8 +83,8 @@ var d: i32 = {.a: i32, .b: i32}[0]; // CHECK:STDOUT: %a: ref %i32 = bind_name a, %a.var // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc23_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc23_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc23_8: type = splice_block %i32.loc23 [concrete = constants.%i32] { @@ -92,8 +93,8 @@ var d: i32 = {.a: i32, .b: i32}[0]; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c -// CHECK:STDOUT: %.loc29_1: %i32 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c +// CHECK:STDOUT: %.loc29_1: %pattern_type.7ce = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var c // CHECK:STDOUT: %.loc29_8: type = splice_block %i32.loc29 [concrete = constants.%i32] { @@ -102,8 +103,8 @@ var d: i32 = {.a: i32, .b: i32}[0]; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %i32 = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %i32 = binding_pattern d -// CHECK:STDOUT: %.loc35_1: %i32 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.7ce = binding_pattern d +// CHECK:STDOUT: %.loc35_1: %pattern_type.7ce = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var d // CHECK:STDOUT: %.loc35_8: type = splice_block %i32.loc35 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/index/fail_name_not_found.carbon b/toolchain/check/testdata/index/fail_name_not_found.carbon index 946b66ee2121..35c717676504 100644 --- a/toolchain/check/testdata/index/fail_name_not_found.carbon +++ b/toolchain/check/testdata/index/fail_name_not_found.carbon @@ -23,6 +23,7 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -47,8 +48,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc16_3: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc16_3: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %a.ref: = name_ref a, [concrete = ] diff --git a/toolchain/check/testdata/index/fail_negative_indexing.carbon b/toolchain/check/testdata/index/fail_negative_indexing.carbon index 27449fdb5985..e4b36b7f4ac6 100644 --- a/toolchain/check/testdata/index/fail_negative_indexing.carbon +++ b/toolchain/check/testdata/index/fail_negative_indexing.carbon @@ -23,6 +23,7 @@ var d: i32 = c[-10]; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_2, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.ae7: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -36,6 +37,7 @@ var d: i32 = c[-10]; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.132: = bound_method %int_42.20e, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.8c1: = bound_method %int_42.20e, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_42.c68: %i32 = int_value 42 [concrete] @@ -74,8 +76,8 @@ var d: i32 = c[-10]; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %array_type = binding_pattern c -// CHECK:STDOUT: %.loc11_1: %array_type = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.ae7 = binding_pattern c +// CHECK:STDOUT: %.loc11_1: %pattern_type.ae7 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %array_type = var c // CHECK:STDOUT: %.loc11_20: type = splice_block %array_type [concrete = constants.%array_type] { @@ -86,8 +88,8 @@ var d: i32 = c[-10]; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %array_type = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %i32 = binding_pattern d -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.7ce = binding_pattern d +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var d // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon b/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon index fe16b2ba9f65..c045a03a8c40 100644 --- a/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon +++ b/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon @@ -33,6 +33,7 @@ interface Interface { // CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, @Interface.%F.decl [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %Interface.assoc_type = assoc_entity element1, @Interface.%G.decl [concrete] @@ -60,12 +61,12 @@ interface Interface { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, %F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc22_35: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc22_35: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon b/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon index d5f2ae975200..75cc48af241b 100644 --- a/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon +++ b/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon @@ -75,6 +75,7 @@ fn Interface.C.F[self: Self](U:! type, u: U) -> U { return u; } // CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, @Interface.%F.decl [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type.ef383d.1: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %G.362a5a.1: %G.type.ef383d.1 = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %Interface.assoc_type = assoc_entity element1, @Interface.%G.decl [concrete] @@ -101,12 +102,12 @@ fn Interface.C.F[self: Self](U:! type, u: U) -> U { return u; } // CHECK:STDOUT: %Interface.decl: type = interface_decl @Interface [concrete = constants.%Interface.type] {} {} // CHECK:STDOUT: %F.decl: %F.type.1ad64d.2 = fn_decl @F.2 [concrete = constants.%F.5d382e.2] {} {} // CHECK:STDOUT: %G.decl: %G.type.ef383d.2 = fn_decl @G.2 [concrete = constants.%G.362a5a.2] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc32_35: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc32_35: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -132,12 +133,12 @@ fn Interface.C.F[self: Self](U:! type, u: U) -> U { return u; } // CHECK:STDOUT: %F.decl: %F.type.1ad64d.1 = fn_decl @F.1 [concrete = constants.%F.5d382e.1] {} {} // CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, %F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %G.decl: %G.type.ef383d.1 = fn_decl @G.1 [concrete = constants.%G.362a5a.1] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc13_35: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc13_35: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -202,8 +203,11 @@ fn Interface.C.F[self: Self](U:! type, u: U) -> U { return u; } // CHECK:STDOUT: %Interface.type: type = facet_type <@Interface> [concrete] // CHECK:STDOUT: %Self: %Interface.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic] +// CHECK:STDOUT: %pattern_type.68b: type = pattern_type %C [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.a32: type = pattern_type %U [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F, @C(%Self) [symbolic] // CHECK:STDOUT: %F: %F.type = struct_value () [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -227,13 +231,13 @@ fn Interface.C.F[self: Self](U:! type, u: U) -> U { return u; } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Interface.decl: type = interface_decl @Interface [concrete = constants.%Interface.type] {} {} // CHECK:STDOUT: %F.decl: @C.%F.type (%F.type) = fn_decl @F [symbolic = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%C (%C) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%C (%C) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %U.patt.loc20: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt)] -// CHECK:STDOUT: %u.patt: @F.%U.loc14_22.1 (%U) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.%U.loc14_22.1 (%U) = value_param_pattern %u.patt, call_param1 -// CHECK:STDOUT: %return.patt: @F.%U.loc14_22.1 (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%U.loc14_22.1 (%U) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @F.%pattern_type.loc14_10 (%pattern_type.68b) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type.loc14_10 (%pattern_type.68b) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc20: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt)] +// CHECK:STDOUT: %u.patt: @F.%pattern_type.loc14_32 (%pattern_type.a32) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.%pattern_type.loc14_32 (%pattern_type.a32) = value_param_pattern %u.patt, call_param1 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc14_32 (%pattern_type.a32) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc14_32 (%pattern_type.a32) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc20_49: type = name_ref U, %U.loc20 [symbolic = %U.loc14_22.1 (constants.%U)] // CHECK:STDOUT: %self.param.loc20: @F.%C (%C) = value_param call_param0 @@ -269,13 +273,13 @@ fn Interface.C.F[self: Self](U:! type, u: U) -> U { return u; } // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @C.%F.type (%F.type) = fn_decl @F [symbolic = @C.%F (constants.%F)] { -// CHECK:STDOUT: %self.patt: @F.%C (%C) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%C (%C) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %U.patt.loc20: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt)] -// CHECK:STDOUT: %u.patt: @F.%U.loc14_22.1 (%U) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.%U.loc14_22.1 (%U) = value_param_pattern %u.patt, call_param1 -// CHECK:STDOUT: %return.patt: @F.%U.loc14_22.1 (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%U.loc14_22.1 (%U) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @F.%pattern_type.loc14_10 (%pattern_type.68b) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type.loc14_10 (%pattern_type.68b) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc20: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt)] +// CHECK:STDOUT: %u.patt: @F.%pattern_type.loc14_32 (%pattern_type.a32) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.%pattern_type.loc14_32 (%pattern_type.a32) = value_param_pattern %u.patt, call_param1 +// CHECK:STDOUT: %return.patt: @F.%pattern_type.loc14_32 (%pattern_type.a32) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type.loc14_32 (%pattern_type.a32) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref.loc14_41: type = name_ref U, %U.loc14_22.2 [symbolic = %U.loc14_22.1 (constants.%U)] // CHECK:STDOUT: %self.param.loc14: @F.%C (%C) = value_param call_param0 @@ -304,8 +308,10 @@ fn Interface.C.F[self: Self](U:! type, u: U) -> U { return u; } // CHECK:STDOUT: generic fn @F(@Interface.%Self: %Interface.type, %U.loc14_22.2: type) { // CHECK:STDOUT: %Self: %Interface.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)] +// CHECK:STDOUT: %pattern_type.loc14_10: type = pattern_type %C [symbolic = %pattern_type.loc14_10 (constants.%pattern_type.68b)] // CHECK:STDOUT: %U.loc14_22.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc14_22.1 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc14: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc14: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc14 (constants.%U.patt)] +// CHECK:STDOUT: %pattern_type.loc14_32: type = pattern_type %U.loc14_22.1 [symbolic = %pattern_type.loc14_32 (constants.%pattern_type.a32)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc20_46: = require_complete_type %U.loc14_22.1 [symbolic = %require_complete.loc20_46 (constants.%require_complete.b54)] @@ -328,8 +334,10 @@ fn Interface.C.F[self: Self](U:! type, u: U) -> U { return u; } // CHECK:STDOUT: specific @F(constants.%Self, constants.%U) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %C => constants.%C +// CHECK:STDOUT: %pattern_type.loc14_10 => constants.%pattern_type.68b // CHECK:STDOUT: %U.loc14_22.1 => constants.%U // CHECK:STDOUT: %U.patt.loc14 => constants.%U.patt +// CHECK:STDOUT: %pattern_type.loc14_32 => constants.%pattern_type.a32 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(@F.%Self) {} diff --git a/toolchain/check/testdata/interface/member_lookup.carbon b/toolchain/check/testdata/interface/member_lookup.carbon index d1a5807a12a3..2d785fb9ddf2 100644 --- a/toolchain/check/testdata/interface/member_lookup.carbon +++ b/toolchain/check/testdata/interface/member_lookup.carbon @@ -52,7 +52,8 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Interface.type.e32: type = generic_interface_type @Interface [concrete] // CHECK:STDOUT: %Interface.generic: %Interface.type.e32 = struct_value () [concrete] // CHECK:STDOUT: %Interface.type.d32: type = facet_type <@Interface, @Interface(%T)> [symbolic] @@ -61,7 +62,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %Interface.assoc_type.0d9: type = assoc_entity_type @Interface, @Interface(%T) [symbolic] // CHECK:STDOUT: %assoc0.dbe: %Interface.assoc_type.0d9 = assoc_entity element0, @Interface.%X [symbolic] // CHECK:STDOUT: %I.a5f: %Interface.type.d32 = bind_symbolic_name I, 1 [symbolic] -// CHECK:STDOUT: %I.patt.47c: %Interface.type.d32 = symbolic_binding_pattern I, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.f17: type = pattern_type %Interface.type.d32 [symbolic] +// CHECK:STDOUT: %I.patt.ca8: %pattern_type.f17 = symbolic_binding_pattern I, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %AccessGeneric.type: type = fn_type @AccessGeneric [concrete] // CHECK:STDOUT: %AccessGeneric: %AccessGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6f3: = require_complete_type %Interface.type.d32 [symbolic] @@ -73,7 +76,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Interface.type.981: type = facet_type <@Interface, @Interface(%i32)> [concrete] // CHECK:STDOUT: %I.d08: %Interface.type.981 = bind_symbolic_name I, 0 [symbolic] -// CHECK:STDOUT: %I.patt.1f8: %Interface.type.981 = symbolic_binding_pattern I, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.875: type = pattern_type %Interface.type.981 [concrete] +// CHECK:STDOUT: %I.patt.63e: %pattern_type.875 = symbolic_binding_pattern I, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessConcrete.type: type = fn_type @AccessConcrete [concrete] // CHECK:STDOUT: %AccessConcrete: %AccessConcrete.type = struct_value () [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] @@ -104,15 +109,15 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Interface.decl: %Interface.type.e32 = interface_decl @Interface [concrete = constants.%Interface.generic] { -// CHECK:STDOUT: %T.patt.loc4_21.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_21.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_21.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %AccessGeneric.decl: %AccessGeneric.type = fn_decl @AccessGeneric [concrete = constants.%AccessGeneric] { -// CHECK:STDOUT: %T.patt.loc8_18.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_18.2 (constants.%T.patt)] -// CHECK:STDOUT: %I.patt.loc8_28.1: @AccessGeneric.%Interface.type.loc8_43.2 (%Interface.type.d32) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_28.2 (constants.%I.patt.47c)] -// CHECK:STDOUT: %return.patt: @AccessGeneric.%T.loc8_18.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @AccessGeneric.%T.loc8_18.2 (%T) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc8_18.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %I.patt.loc8_28.1: @AccessGeneric.%pattern_type.loc8_28 (%pattern_type.f17) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_28.2 (constants.%I.patt.ca8)] +// CHECK:STDOUT: %return.patt: @AccessGeneric.%pattern_type.loc8_46 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @AccessGeneric.%pattern_type.loc8_46 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_49: type = name_ref T, %T.loc8_18.1 [symbolic = %T.loc8_18.2 (constants.%T)] // CHECK:STDOUT: %T.loc8_18.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_18.2 (constants.%T)] @@ -126,9 +131,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %return: ref @AccessGeneric.%T.loc8_18.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessConcrete.decl: %AccessConcrete.type = fn_decl @AccessConcrete [concrete = constants.%AccessConcrete] { -// CHECK:STDOUT: %I.patt.loc12_19.1: %Interface.type.981 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc12_19.2 (constants.%I.patt.1f8)] -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %I.patt.loc12_19.1: %pattern_type.875 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc12_19.2 (constants.%I.patt.63e)] +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12_42: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12_42: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -146,7 +151,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Interface(%T.loc4_21.1: type) { // CHECK:STDOUT: %T.loc4_21.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_21.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_21.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(%T.loc4_21.2)> [symbolic = %Interface.type (constants.%Interface.type.d32)] @@ -177,10 +182,12 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessGeneric(%T.loc8_18.1: type, %I.loc8_28.1: @AccessGeneric.%Interface.type.loc8_43.2 (%Interface.type.d32)) { // CHECK:STDOUT: %T.loc8_18.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_18.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_18.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_18.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_18.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_18.2 (constants.%T.patt)] // CHECK:STDOUT: %Interface.type.loc8_43.2: type = facet_type <@Interface, @Interface(%T.loc8_18.2)> [symbolic = %Interface.type.loc8_43.2 (constants.%Interface.type.d32)] // CHECK:STDOUT: %I.loc8_28.2: @AccessGeneric.%Interface.type.loc8_43.2 (%Interface.type.d32) = bind_symbolic_name I, 1 [symbolic = %I.loc8_28.2 (constants.%I.a5f)] -// CHECK:STDOUT: %I.patt.loc8_28.2: @AccessGeneric.%Interface.type.loc8_43.2 (%Interface.type.d32) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_28.2 (constants.%I.patt.47c)] +// CHECK:STDOUT: %pattern_type.loc8_28: type = pattern_type %Interface.type.loc8_43.2 [symbolic = %pattern_type.loc8_28 (constants.%pattern_type.f17)] +// CHECK:STDOUT: %I.patt.loc8_28.2: @AccessGeneric.%pattern_type.loc8_28 (%pattern_type.f17) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_28.2 (constants.%I.patt.ca8)] +// CHECK:STDOUT: %pattern_type.loc8_46: type = pattern_type %T.loc8_18.2 [symbolic = %pattern_type.loc8_46 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9_10: = require_complete_type %Interface.type.loc8_43.2 [symbolic = %require_complete.loc9_10 (constants.%require_complete.6f3)] @@ -205,7 +212,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessConcrete(%I.loc12_19.1: %Interface.type.981) { // CHECK:STDOUT: %I.loc12_19.2: %Interface.type.981 = bind_symbolic_name I, 0 [symbolic = %I.loc12_19.2 (constants.%I.d08)] -// CHECK:STDOUT: %I.patt.loc12_19.2: %Interface.type.981 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc12_19.2 (constants.%I.patt.1f8)] +// CHECK:STDOUT: %I.patt.loc12_19.2: %pattern_type.875 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc12_19.2 (constants.%I.patt.63e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.as_type.loc13_11.2: type = facet_access_type %I.loc12_19.2 [symbolic = %I.as_type.loc13_11.2 (constants.%I.as_type.ee6)] @@ -247,7 +254,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %T.patt.loc8_18.2 => constants.%T.patt // CHECK:STDOUT: %Interface.type.loc8_43.2 => constants.%Interface.type.d32 // CHECK:STDOUT: %I.loc8_28.2 => constants.%I.a5f -// CHECK:STDOUT: %I.patt.loc8_28.2 => constants.%I.patt.47c +// CHECK:STDOUT: %pattern_type.loc8_28 => constants.%pattern_type.f17 +// CHECK:STDOUT: %I.patt.loc8_28.2 => constants.%I.patt.ca8 +// CHECK:STDOUT: %pattern_type.loc8_46 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Interface(@AccessGeneric.%T.loc8_18.2) {} @@ -270,7 +279,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: specific @AccessConcrete(constants.%I.d08) { // CHECK:STDOUT: %I.loc12_19.2 => constants.%I.d08 -// CHECK:STDOUT: %I.patt.loc12_19.2 => constants.%I.patt.1f8 +// CHECK:STDOUT: %I.patt.loc12_19.2 => constants.%I.patt.63e // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @X(constants.%i32, constants.%Interface.facet.06c) { @@ -282,7 +291,8 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Interface.type.e32: type = generic_interface_type @Interface [concrete] // CHECK:STDOUT: %Interface.generic: %Interface.type.e32 = struct_value () [concrete] // CHECK:STDOUT: %Interface.type.d32: type = facet_type <@Interface, @Interface(%T)> [symbolic] @@ -291,7 +301,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %Interface.assoc_type.0d9: type = assoc_entity_type @Interface, @Interface(%T) [symbolic] // CHECK:STDOUT: %assoc0.dbe: %Interface.assoc_type.0d9 = assoc_entity element0, @Interface.%X [symbolic] // CHECK:STDOUT: %I.a5f: %Interface.type.d32 = bind_symbolic_name I, 1 [symbolic] -// CHECK:STDOUT: %I.patt.47c: %Interface.type.d32 = symbolic_binding_pattern I, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.f17: type = pattern_type %Interface.type.d32 [symbolic] +// CHECK:STDOUT: %I.patt.ca8: %pattern_type.f17 = symbolic_binding_pattern I, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %AccessMissingGeneric.type: type = fn_type @AccessMissingGeneric [concrete] // CHECK:STDOUT: %AccessMissingGeneric: %AccessMissingGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.6f3: = require_complete_type %Interface.type.d32 [symbolic] @@ -299,7 +311,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Interface.type.981: type = facet_type <@Interface, @Interface(%i32)> [concrete] // CHECK:STDOUT: %I.d08: %Interface.type.981 = bind_symbolic_name I, 0 [symbolic] -// CHECK:STDOUT: %I.patt.1f8: %Interface.type.981 = symbolic_binding_pattern I, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.875: type = pattern_type %Interface.type.981 [concrete] +// CHECK:STDOUT: %I.patt.63e: %pattern_type.875 = symbolic_binding_pattern I, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %AccessMissingConcrete.type: type = fn_type @AccessMissingConcrete [concrete] // CHECK:STDOUT: %AccessMissingConcrete: %AccessMissingConcrete.type = struct_value () [concrete] // CHECK:STDOUT: %Self.62a: %Interface.type.981 = bind_symbolic_name Self, 1 [symbolic] @@ -324,15 +338,15 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Interface.decl: %Interface.type.e32 = interface_decl @Interface [concrete = constants.%Interface.generic] { -// CHECK:STDOUT: %T.patt.loc4_21.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_21.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_21.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMissingGeneric.decl: %AccessMissingGeneric.type = fn_decl @AccessMissingGeneric [concrete = constants.%AccessMissingGeneric] { -// CHECK:STDOUT: %T.patt.loc8_25.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_25.2 (constants.%T.patt)] -// CHECK:STDOUT: %I.patt.loc8_35.1: @AccessMissingGeneric.%Interface.type.loc8_50.2 (%Interface.type.d32) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_35.2 (constants.%I.patt.47c)] -// CHECK:STDOUT: %return.patt: @AccessMissingGeneric.%T.loc8_25.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @AccessMissingGeneric.%T.loc8_25.2 (%T) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc8_25.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %I.patt.loc8_35.1: @AccessMissingGeneric.%pattern_type.loc8_35 (%pattern_type.f17) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_35.2 (constants.%I.patt.ca8)] +// CHECK:STDOUT: %return.patt: @AccessMissingGeneric.%pattern_type.loc8_53 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @AccessMissingGeneric.%pattern_type.loc8_53 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc8_56: type = name_ref T, %T.loc8_25.1 [symbolic = %T.loc8_25.2 (constants.%T)] // CHECK:STDOUT: %T.loc8_25.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_25.2 (constants.%T)] @@ -346,9 +360,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %return: ref @AccessMissingGeneric.%T.loc8_25.2 (%T) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %AccessMissingConcrete.decl: %AccessMissingConcrete.type = fn_decl @AccessMissingConcrete [concrete = constants.%AccessMissingConcrete] { -// CHECK:STDOUT: %I.patt.loc16_26.1: %Interface.type.981 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc16_26.2 (constants.%I.patt.1f8)] -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %I.patt.loc16_26.1: %pattern_type.875 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc16_26.2 (constants.%I.patt.63e)] +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc16_49: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc16_49: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -366,7 +380,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Interface(%T.loc4_21.1: type) { // CHECK:STDOUT: %T.loc4_21.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_21.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_21.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_21.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_21.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(%T.loc4_21.2)> [symbolic = %Interface.type (constants.%Interface.type.d32)] @@ -398,10 +412,12 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessMissingGeneric(%T.loc8_25.1: type, %I.loc8_35.1: @AccessMissingGeneric.%Interface.type.loc8_50.2 (%Interface.type.d32)) { // CHECK:STDOUT: %T.loc8_25.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_25.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_25.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_25.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_25.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_25.2 (constants.%T.patt)] // CHECK:STDOUT: %Interface.type.loc8_50.2: type = facet_type <@Interface, @Interface(%T.loc8_25.2)> [symbolic = %Interface.type.loc8_50.2 (constants.%Interface.type.d32)] // CHECK:STDOUT: %I.loc8_35.2: @AccessMissingGeneric.%Interface.type.loc8_50.2 (%Interface.type.d32) = bind_symbolic_name I, 1 [symbolic = %I.loc8_35.2 (constants.%I.a5f)] -// CHECK:STDOUT: %I.patt.loc8_35.2: @AccessMissingGeneric.%Interface.type.loc8_50.2 (%Interface.type.d32) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_35.2 (constants.%I.patt.47c)] +// CHECK:STDOUT: %pattern_type.loc8_35: type = pattern_type %Interface.type.loc8_50.2 [symbolic = %pattern_type.loc8_35 (constants.%pattern_type.f17)] +// CHECK:STDOUT: %I.patt.loc8_35.2: @AccessMissingGeneric.%pattern_type.loc8_35 (%pattern_type.f17) = symbolic_binding_pattern I, 1 [symbolic = %I.patt.loc8_35.2 (constants.%I.patt.ca8)] +// CHECK:STDOUT: %pattern_type.loc8_53: type = pattern_type %T.loc8_25.2 [symbolic = %pattern_type.loc8_53 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Interface.type.loc8_50.2 [symbolic = %require_complete (constants.%require_complete.6f3)] @@ -416,7 +432,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AccessMissingConcrete(%I.loc16_26.1: %Interface.type.981) { // CHECK:STDOUT: %I.loc16_26.2: %Interface.type.981 = bind_symbolic_name I, 0 [symbolic = %I.loc16_26.2 (constants.%I.d08)] -// CHECK:STDOUT: %I.patt.loc16_26.2: %Interface.type.981 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc16_26.2 (constants.%I.patt.1f8)] +// CHECK:STDOUT: %I.patt.loc16_26.2: %pattern_type.875 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc16_26.2 (constants.%I.patt.63e)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -451,7 +467,9 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: %T.patt.loc8_25.2 => constants.%T.patt // CHECK:STDOUT: %Interface.type.loc8_50.2 => constants.%Interface.type.d32 // CHECK:STDOUT: %I.loc8_35.2 => constants.%I.a5f -// CHECK:STDOUT: %I.patt.loc8_35.2 => constants.%I.patt.47c +// CHECK:STDOUT: %pattern_type.loc8_35 => constants.%pattern_type.f17 +// CHECK:STDOUT: %I.patt.loc8_35.2 => constants.%I.patt.ca8 +// CHECK:STDOUT: %pattern_type.loc8_53 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Interface(@AccessMissingGeneric.%T.loc8_25.2) {} @@ -469,6 +487,6 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: specific @AccessMissingConcrete(constants.%I.d08) { // CHECK:STDOUT: %I.loc16_26.2 => constants.%I.d08 -// CHECK:STDOUT: %I.patt.loc16_26.2 => constants.%I.patt.1f8 +// CHECK:STDOUT: %I.patt.loc16_26.2 => constants.%I.patt.63e // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/min_prelude/as_type_of_type.carbon b/toolchain/check/testdata/interface/min_prelude/as_type_of_type.carbon index 6dda99a9b795..24e3c1ceb65e 100644 --- a/toolchain/check/testdata/interface/min_prelude/as_type_of_type.carbon +++ b/toolchain/check/testdata/interface/min_prelude/as_type_of_type.carbon @@ -23,11 +23,13 @@ fn F(T:! Empty) { // CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete] // CHECK:STDOUT: %Self: %Empty.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: %Empty.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %Empty.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.6c3: type = pattern_type %Empty.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.6c3 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.dad: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -45,7 +47,7 @@ fn F(T:! Empty) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Empty.decl: type = interface_decl @Empty [concrete = constants.%Empty.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc16_6.1: %Empty.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_6.1: %pattern_type.6c3 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.type] // CHECK:STDOUT: %T.loc16_6.1: %Empty.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_6.2 (constants.%T)] @@ -62,17 +64,18 @@ fn F(T:! Empty) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc16_6.1: %Empty.type) { // CHECK:STDOUT: %T.loc16_6.2: %Empty.type = bind_symbolic_name T, 0 [symbolic = %T.loc16_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc16_6.2: %Empty.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_6.2: %pattern_type.6c3 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc17_10.2: type = facet_access_type %T.loc16_6.2 [symbolic = %T.as_type.loc17_10.2 (constants.%T.as_type)] // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc17_10.2 [symbolic = %require_complete (constants.%require_complete)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc17_10.2 [symbolic = %pattern_type (constants.%pattern_type.dad)] // CHECK:STDOUT: // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: @F.%T.as_type.loc17_10.2 (%T.as_type) = binding_pattern x -// CHECK:STDOUT: %.loc17_3: @F.%T.as_type.loc17_10.2 (%T.as_type) = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.dad) = binding_pattern x +// CHECK:STDOUT: %.loc17_3: @F.%pattern_type (%pattern_type.dad) = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref @F.%T.as_type.loc17_10.2 (%T.as_type) = var x // CHECK:STDOUT: %.loc17_10.1: type = splice_block %.loc17_10.2 [symbolic = %T.as_type.loc17_10.2 (constants.%T.as_type)] { diff --git a/toolchain/check/testdata/interface/min_prelude/compound_member_access.carbon b/toolchain/check/testdata/interface/min_prelude/compound_member_access.carbon index 64af0f033713..c96cb79906f3 100644 --- a/toolchain/check/testdata/interface/min_prelude/compound_member_access.carbon +++ b/toolchain/check/testdata/interface/min_prelude/compound_member_access.carbon @@ -198,23 +198,26 @@ fn Works() { // CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete] // CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%U [concrete] // CHECK:STDOUT: %T: %J.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %J.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.28e: type = pattern_type %J.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.64628e.1: = lookup_impl_witness %T, @J [symbolic] // CHECK:STDOUT: %J.facet.5210a7.1: %J.type = facet_value %T.as_type, (%J.lookup_impl_witness.64628e.1) [symbolic] // CHECK:STDOUT: %impl.elem0.11fef0.1: type = impl_witness_access %J.lookup_impl_witness.64628e.1, element0 [symbolic] // CHECK:STDOUT: %S: %impl.elem0.11fef0.1 = bind_symbolic_name S, 1 [symbolic] -// CHECK:STDOUT: %S.patt: %impl.elem0.11fef0.1 = symbolic_binding_pattern S, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.b984e7.1: type = pattern_type %impl.elem0.11fef0.1 [symbolic] +// CHECK:STDOUT: %S.patt: %pattern_type.b984e7.1 = symbolic_binding_pattern S, 1 [symbolic] // CHECK:STDOUT: %Simple1.type: type = fn_type @Simple1 [concrete] // CHECK:STDOUT: %Simple1: %Simple1.type = struct_value () [concrete] // CHECK:STDOUT: %V: %J.type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %J.type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.28e = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] // CHECK:STDOUT: %J.lookup_impl_witness.64628e.2: = lookup_impl_witness %V, @J [symbolic] // CHECK:STDOUT: %J.facet.5210a7.2: %J.type = facet_value %V.as_type, (%J.lookup_impl_witness.64628e.2) [symbolic] // CHECK:STDOUT: %impl.elem0.11fef0.2: type = impl_witness_access %J.lookup_impl_witness.64628e.2, element0 [symbolic] // CHECK:STDOUT: %W: %impl.elem0.11fef0.2 = bind_symbolic_name W, 1 [symbolic] -// CHECK:STDOUT: %W.patt: %impl.elem0.11fef0.2 = symbolic_binding_pattern W, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.b984e7.2: type = pattern_type %impl.elem0.11fef0.2 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.b984e7.2 = symbolic_binding_pattern W, 1 [symbolic] // CHECK:STDOUT: %Compound1.type: type = fn_type @Compound1 [concrete] // CHECK:STDOUT: %Compound1: %Compound1.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -235,8 +238,8 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %Simple1.decl: %Simple1.type = fn_decl @Simple1 [concrete = constants.%Simple1] { -// CHECK:STDOUT: %T.patt.loc8_12.1: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] -// CHECK:STDOUT: %S.patt.loc8_19.1: @Simple1.%impl.elem0.loc8_24.2 (%impl.elem0.11fef0.1) = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc8_19.2 (constants.%S.patt)] +// CHECK:STDOUT: %T.patt.loc8_12.1: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %S.patt.loc8_19.1: @Simple1.%pattern_type (%pattern_type.b984e7.1) = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc8_19.2 (constants.%S.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type] // CHECK:STDOUT: %T.loc8_12.1: %J.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T)] @@ -250,8 +253,8 @@ fn Works() { // CHECK:STDOUT: %S.loc8_19.1: @Simple1.%impl.elem0.loc8_24.2 (%impl.elem0.11fef0.1) = bind_symbolic_name S, 1 [symbolic = %S.loc8_19.2 (constants.%S)] // CHECK:STDOUT: } // CHECK:STDOUT: %Compound1.decl: %Compound1.type = fn_decl @Compound1 [concrete = constants.%Compound1] { -// CHECK:STDOUT: %V.patt.loc11_14.1: %J.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] -// CHECK:STDOUT: %W.patt.loc11_21.1: @Compound1.%impl.elem0.loc11_26.2 (%impl.elem0.11fef0.2) = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc11_21.2 (constants.%W.patt)] +// CHECK:STDOUT: %V.patt.loc11_14.1: %pattern_type.28e = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %W.patt.loc11_21.1: @Compound1.%pattern_type (%pattern_type.b984e7.2) = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc11_21.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %J.ref.loc11_18: type = name_ref J, file.%J.decl [concrete = constants.%J.type] // CHECK:STDOUT: %V.loc11_14.1: %J.type = bind_symbolic_name V, 0 [symbolic = %V.loc11_14.2 (constants.%V)] @@ -283,12 +286,13 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple1(%T.loc8_12.1: %J.type, %S.loc8_19.1: @Simple1.%impl.elem0.loc8_24.2 (%impl.elem0.11fef0.1)) { // CHECK:STDOUT: %T.loc8_12.2: %J.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_12.2: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_12.2: %pattern_type.28e = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc8_24.2: type = facet_access_type %T.loc8_12.2 [symbolic = %T.as_type.loc8_24.2 (constants.%T.as_type)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %T.loc8_12.2, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.1)] // CHECK:STDOUT: %impl.elem0.loc8_24.2: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc8_24.2 (constants.%impl.elem0.11fef0.1)] // CHECK:STDOUT: %S.loc8_19.2: @Simple1.%impl.elem0.loc8_24.2 (%impl.elem0.11fef0.1) = bind_symbolic_name S, 1 [symbolic = %S.loc8_19.2 (constants.%S)] -// CHECK:STDOUT: %S.patt.loc8_19.2: @Simple1.%impl.elem0.loc8_24.2 (%impl.elem0.11fef0.1) = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc8_19.2 (constants.%S.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc8_24.2 [symbolic = %pattern_type (constants.%pattern_type.b984e7.1)] +// CHECK:STDOUT: %S.patt.loc8_19.2: @Simple1.%pattern_type (%pattern_type.b984e7.1) = symbolic_binding_pattern S, 1 [symbolic = %S.patt.loc8_19.2 (constants.%S.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -300,11 +304,12 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound1(%V.loc11_14.1: %J.type, %W.loc11_21.1: @Compound1.%impl.elem0.loc11_26.2 (%impl.elem0.11fef0.2)) { // CHECK:STDOUT: %V.loc11_14.2: %J.type = bind_symbolic_name V, 0 [symbolic = %V.loc11_14.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc11_14.2: %J.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc11_14.2: %pattern_type.28e = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] // CHECK:STDOUT: %J.lookup_impl_witness: = lookup_impl_witness %V.loc11_14.2, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.64628e.2)] // CHECK:STDOUT: %impl.elem0.loc11_26.2: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_26.2 (constants.%impl.elem0.11fef0.2)] // CHECK:STDOUT: %W.loc11_21.2: @Compound1.%impl.elem0.loc11_26.2 (%impl.elem0.11fef0.2) = bind_symbolic_name W, 1 [symbolic = %W.loc11_21.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc11_21.2: @Compound1.%impl.elem0.loc11_26.2 (%impl.elem0.11fef0.2) = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc11_21.2 (constants.%W.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc11_26.2 [symbolic = %pattern_type (constants.%pattern_type.b984e7.2)] +// CHECK:STDOUT: %W.patt.loc11_21.2: @Compound1.%pattern_type (%pattern_type.b984e7.2) = symbolic_binding_pattern W, 1 [symbolic = %W.patt.loc11_21.2 (constants.%W.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -325,6 +330,7 @@ fn Works() { // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.1 // CHECK:STDOUT: %impl.elem0.loc8_24.2 => constants.%impl.elem0.11fef0.1 // CHECK:STDOUT: %S.loc8_19.2 => constants.%S +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b984e7.1 // CHECK:STDOUT: %S.patt.loc8_19.2 => constants.%S.patt // CHECK:STDOUT: } // CHECK:STDOUT: @@ -336,6 +342,7 @@ fn Works() { // CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.64628e.2 // CHECK:STDOUT: %impl.elem0.loc11_26.2 => constants.%impl.elem0.11fef0.2 // CHECK:STDOUT: %W.loc11_21.2 => constants.%W +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b984e7.2 // CHECK:STDOUT: %W.patt.loc11_21.2 => constants.%W.patt // CHECK:STDOUT: } // CHECK:STDOUT: @@ -350,7 +357,8 @@ fn Works() { // CHECK:STDOUT: %K1.assoc_type: type = assoc_entity_type @K1 [concrete] // CHECK:STDOUT: %assoc0: %K1.assoc_type = assoc_entity element0, @K1.%Q1.decl [concrete] // CHECK:STDOUT: %T: %K1.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %K1.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %K1.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Simple2.type: type = fn_type @Simple2 [concrete] // CHECK:STDOUT: %Simple2: %Simple2.type = struct_value () [concrete] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] @@ -360,7 +368,7 @@ fn Works() { // CHECK:STDOUT: %impl.elem0.9661c0.1: %.484362.1 = impl_witness_access %K1.lookup_impl_witness.d8ae08.1, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.54474d.1: = specific_impl_function %impl.elem0.9661c0.1, @Q1(%K1.facet.9e06af.1) [symbolic] // CHECK:STDOUT: %V: %K1.type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %K1.type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %Compound2.type: type = fn_type @Compound2 [concrete] // CHECK:STDOUT: %Compound2: %Compound2.type = struct_value () [concrete] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] @@ -387,13 +395,13 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %K1.decl: type = interface_decl @K1 [concrete = constants.%K1.type] {} {} // CHECK:STDOUT: %Simple2.decl: %Simple2.type = fn_decl @Simple2 [concrete = constants.%Simple2] { -// CHECK:STDOUT: %T.patt.loc8_12.1: %K1.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_12.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %K1.ref: type = name_ref K1, file.%K1.decl [concrete = constants.%K1.type] // CHECK:STDOUT: %T.loc8_12.1: %K1.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Compound2.decl: %Compound2.type = fn_decl @Compound2 [concrete = constants.%Compound2] { -// CHECK:STDOUT: %V.patt.loc13_14.1: %K1.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc13_14.1: %pattern_type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_14.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %K1.ref.loc13: type = name_ref K1, file.%K1.decl [concrete = constants.%K1.type] // CHECK:STDOUT: %V.loc13_14.1: %K1.type = bind_symbolic_name V, 0 [symbolic = %V.loc13_14.2 (constants.%V)] @@ -417,7 +425,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple2(%T.loc8_12.1: %K1.type) { // CHECK:STDOUT: %T.loc8_12.2: %K1.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_12.2: %K1.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_12.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc9_4.2: type = facet_access_type %T.loc8_12.2 [symbolic = %T.as_type.loc9_4.2 (constants.%T.as_type)] @@ -442,7 +450,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound2(%V.loc13_14.1: %K1.type) { // CHECK:STDOUT: %V.loc13_14.2: %K1.type = bind_symbolic_name V, 0 [symbolic = %V.loc13_14.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc13_14.2: %K1.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc13_14.2: %pattern_type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_14.2 (constants.%V.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %K1.lookup_impl_witness: = lookup_impl_witness %V.loc13_14.2, @K1 [symbolic = %K1.lookup_impl_witness (constants.%K1.lookup_impl_witness.d8ae08.2)] @@ -495,8 +503,10 @@ fn Works() { // CHECK:STDOUT: %K2.assoc_type: type = assoc_entity_type @K2 [concrete] // CHECK:STDOUT: %assoc0.d67: %K2.assoc_type = assoc_entity element0, @K2.%Q2.decl [concrete] // CHECK:STDOUT: %T.0ce: %K2.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.6d1: %K2.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.fda: type = pattern_type %K2.type [concrete] +// CHECK:STDOUT: %T.patt.879: %pattern_type.fda = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.0ce [symbolic] +// CHECK:STDOUT: %pattern_type.466ee6.1: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %Simple3.type: type = fn_type @Simple3 [concrete] // CHECK:STDOUT: %Simple3: %Simple3.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.022e81.1: = require_complete_type %T.as_type [symbolic] @@ -506,18 +516,22 @@ fn Works() { // CHECK:STDOUT: %impl.elem0: %.8de = impl_witness_access %K2.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @Q2(%K2.facet) [symbolic] // CHECK:STDOUT: %V: %K2.type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %K2.type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.fda = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] +// CHECK:STDOUT: %pattern_type.466ee6.2: type = pattern_type %V.as_type [symbolic] // CHECK:STDOUT: %Compound3.type: type = fn_type @Compound3 [concrete] // CHECK:STDOUT: %Compound3: %Compound3.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.022e81.2: = require_complete_type %V.as_type [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.014: type = facet_type <@ImplicitAs, @ImplicitAs(%K2.type)> [concrete] @@ -529,11 +543,12 @@ fn Works() { // CHECK:STDOUT: %assoc0.dc0: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.207 [symbolic] // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.bd4), @impl [concrete] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness %BitAnd.impl_witness_table, @impl(%T.8b3) [symbolic] // CHECK:STDOUT: %Op.type: type = fn_type @Op, @impl(%T.8b3) [symbolic] // CHECK:STDOUT: %Op: %Op.type = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T.8b3 [symbolic] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T.8b3 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -543,13 +558,13 @@ fn Works() { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc13_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//prelude, inst67 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//prelude, inst72 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//prelude, loc14_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//prelude, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//prelude, loc13_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//prelude, inst67 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//prelude, inst72 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//prelude, loc14_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.02e = import_ref Core//prelude, loc18_41, unloaded // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded // CHECK:STDOUT: %Core.import_ref.287 = import_ref Core//prelude, loc21_36, unloaded @@ -569,9 +584,9 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %K2.decl: type = interface_decl @K2 [concrete = constants.%K2.type] {} {} // CHECK:STDOUT: %Simple3.decl: %Simple3.type = fn_decl @Simple3 [concrete = constants.%Simple3] { -// CHECK:STDOUT: %T.patt.loc8_12.1: %K2.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt.6d1)] -// CHECK:STDOUT: %x.patt: @Simple3.%T.as_type.loc8_23.2 (%T.as_type) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Simple3.%T.as_type.loc8_23.2 (%T.as_type) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc8_12.1: %pattern_type.fda = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt.879)] +// CHECK:STDOUT: %x.patt: @Simple3.%pattern_type (%pattern_type.466ee6.1) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Simple3.%pattern_type (%pattern_type.466ee6.1) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %K2.ref: type = name_ref K2, file.%K2.decl [concrete = constants.%K2.type] // CHECK:STDOUT: %T.loc8_12.1: %K2.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T.0ce)] @@ -584,9 +599,9 @@ fn Works() { // CHECK:STDOUT: %x: @Simple3.%T.as_type.loc8_23.2 (%T.as_type) = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %Compound3.decl: %Compound3.type = fn_decl @Compound3 [concrete = constants.%Compound3] { -// CHECK:STDOUT: %V.patt.loc14_14.1: %K2.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc14_14.2 (constants.%V.patt)] -// CHECK:STDOUT: %y.patt: @Compound3.%V.as_type.loc14_25.2 (%V.as_type) = binding_pattern y -// CHECK:STDOUT: %y.param_patt: @Compound3.%V.as_type.loc14_25.2 (%V.as_type) = value_param_pattern %y.patt, call_param0 +// CHECK:STDOUT: %V.patt.loc14_14.1: %pattern_type.fda = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc14_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %y.patt: @Compound3.%pattern_type (%pattern_type.466ee6.2) = binding_pattern y +// CHECK:STDOUT: %y.param_patt: @Compound3.%pattern_type (%pattern_type.466ee6.2) = value_param_pattern %y.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %K2.ref.loc14: type = name_ref K2, file.%K2.decl [concrete = constants.%K2.type] // CHECK:STDOUT: %V.loc14_14.1: %K2.type = bind_symbolic_name V, 0 [symbolic = %V.loc14_14.2 (constants.%V)] @@ -613,7 +628,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -640,7 +655,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(imports.%Core.import_ref.5ab3ec.3: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt.250)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -660,8 +675,9 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple3(%T.loc8_12.1: %K2.type) { // CHECK:STDOUT: %T.loc8_12.2: %K2.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.2 (constants.%T.0ce)] -// CHECK:STDOUT: %T.patt.loc8_12.2: %K2.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt.6d1)] +// CHECK:STDOUT: %T.patt.loc8_12.2: %pattern_type.fda = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_12.2 (constants.%T.patt.879)] // CHECK:STDOUT: %T.as_type.loc8_23.2: type = facet_access_type %T.loc8_12.2 [symbolic = %T.as_type.loc8_23.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_23.2 [symbolic = %pattern_type (constants.%pattern_type.466ee6.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.as_type.loc8_23.2 [symbolic = %require_complete (constants.%require_complete.022e81.1)] @@ -686,8 +702,9 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound3(%V.loc14_14.1: %K2.type) { // CHECK:STDOUT: %V.loc14_14.2: %K2.type = bind_symbolic_name V, 0 [symbolic = %V.loc14_14.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc14_14.2: %K2.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc14_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc14_14.2: %pattern_type.fda = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc14_14.2 (constants.%V.patt)] // CHECK:STDOUT: %V.as_type.loc14_25.2: type = facet_access_type %V.loc14_14.2 [symbolic = %V.as_type.loc14_25.2 (constants.%V.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %V.as_type.loc14_25.2 [symbolic = %pattern_type (constants.%pattern_type.466ee6.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %V.as_type.loc14_25.2 [symbolic = %require_complete (constants.%require_complete.022e81.2)] @@ -707,12 +724,15 @@ fn Works() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op(imports.%Core.import_ref.5ab3ec.4: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -723,8 +743,9 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple3(constants.%T.0ce) { // CHECK:STDOUT: %T.loc8_12.2 => constants.%T.0ce -// CHECK:STDOUT: %T.patt.loc8_12.2 => constants.%T.patt.6d1 +// CHECK:STDOUT: %T.patt.loc8_12.2 => constants.%T.patt.879 // CHECK:STDOUT: %T.as_type.loc8_23.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.466ee6.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Q2(constants.%K2.facet) {} @@ -735,6 +756,7 @@ fn Works() { // CHECK:STDOUT: %V.loc14_14.2 => constants.%V // CHECK:STDOUT: %V.patt.loc14_14.2 => constants.%V.patt // CHECK:STDOUT: %V.as_type.loc14_25.2 => constants.%V.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.466ee6.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%Dest) { @@ -751,6 +773,8 @@ fn Works() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%K2.type) { @@ -768,7 +792,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 -// CHECK:STDOUT: %T.patt => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt => constants.%T.patt.250 // CHECK:STDOUT: %BitAnd.impl_witness => constants.%BitAnd.impl_witness // CHECK:STDOUT: } // CHECK:STDOUT: @@ -776,6 +800,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op(constants.%T.8b3) { // CHECK:STDOUT: %T => constants.%T.8b3 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- instance.carbon @@ -784,18 +809,23 @@ fn Works() { // CHECK:STDOUT: %L1.type: type = facet_type <@L1> [concrete] // CHECK:STDOUT: %Self: %L1.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.ad3e89.1: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %R1.type: type = fn_type @R1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %R1: %R1.type = struct_value () [concrete] // CHECK:STDOUT: %L1.assoc_type: type = assoc_entity_type @L1 [concrete] // CHECK:STDOUT: %assoc0: %L1.assoc_type = assoc_entity element0, @L1.%R1.decl [concrete] // CHECK:STDOUT: %ptr.72f01d.1: type = ptr_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.53384b.1: type = pattern_type %ptr.72f01d.1 [symbolic] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %S1.type: type = fn_type @S1 [concrete] // CHECK:STDOUT: %S1: %S1.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %L1.assoc_type = assoc_entity element1, @L1.%S1.decl [concrete] // CHECK:STDOUT: %T: %L1.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %L1.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.5da: type = pattern_type %L1.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.5da = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.ad3e89.2: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %Simple4.type: type = fn_type @Simple4 [concrete] // CHECK:STDOUT: %Simple4: %Simple4.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.97cd40.1: = require_complete_type %T.as_type [symbolic] @@ -807,11 +837,13 @@ fn Works() { // CHECK:STDOUT: %.e9a411.1: type = fn_type_with_self_type %S1.type, %L1.facet.ed78cc.1 [symbolic] // CHECK:STDOUT: %impl.elem1.a8c6e3.1: %.e9a411.1 = impl_witness_access %L1.lookup_impl_witness.0a136b.1, element1 [symbolic] // CHECK:STDOUT: %ptr.72f01d.2: type = ptr_type %T.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.53384b.2: type = pattern_type %ptr.72f01d.2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.bbb82e.1: = specific_impl_function %impl.elem1.a8c6e3.1, @S1(%L1.facet.ed78cc.1) [symbolic] // CHECK:STDOUT: %require_complete.9326df.1: = require_complete_type %ptr.72f01d.2 [symbolic] // CHECK:STDOUT: %V: %L1.type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %L1.type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.5da = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] +// CHECK:STDOUT: %pattern_type.ad3e89.3: type = pattern_type %V.as_type [symbolic] // CHECK:STDOUT: %Compound4.type: type = fn_type @Compound4 [concrete] // CHECK:STDOUT: %Compound4: %Compound4.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.97cd40.2: = require_complete_type %V.as_type [symbolic] @@ -823,6 +855,7 @@ fn Works() { // CHECK:STDOUT: %.e9a411.2: type = fn_type_with_self_type %S1.type, %L1.facet.ed78cc.2 [symbolic] // CHECK:STDOUT: %impl.elem1.a8c6e3.2: %.e9a411.2 = impl_witness_access %L1.lookup_impl_witness.0a136b.2, element1 [symbolic] // CHECK:STDOUT: %ptr.72f01d.3: type = ptr_type %V.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.53384b.3: type = pattern_type %ptr.72f01d.3 [symbolic] // CHECK:STDOUT: %specific_impl_fn.bbb82e.2: = specific_impl_function %impl.elem1.a8c6e3.2, @S1(%L1.facet.ed78cc.2) [symbolic] // CHECK:STDOUT: %require_complete.9326df.2: = require_complete_type %ptr.72f01d.3 [symbolic] // CHECK:STDOUT: } @@ -843,9 +876,9 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %L1.decl: type = interface_decl @L1 [concrete = constants.%L1.type] {} {} // CHECK:STDOUT: %Simple4.decl: %Simple4.type = fn_decl @Simple4 [concrete = constants.%Simple4] { -// CHECK:STDOUT: %T.patt.loc9_12.1: %L1.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_12.2 (constants.%T.patt)] -// CHECK:STDOUT: %x.patt: @Simple4.%T.as_type.loc9_23.2 (%T.as_type) = binding_pattern x -// CHECK:STDOUT: %x.param_patt: @Simple4.%T.as_type.loc9_23.2 (%T.as_type) = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc9_12.1: %pattern_type.5da = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %x.patt: @Simple4.%pattern_type (%pattern_type.ad3e89.2) = binding_pattern x +// CHECK:STDOUT: %x.param_patt: @Simple4.%pattern_type (%pattern_type.ad3e89.2) = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %L1.ref: type = name_ref L1, file.%L1.decl [concrete = constants.%L1.type] // CHECK:STDOUT: %T.loc9_12.1: %L1.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_12.2 (constants.%T)] @@ -858,9 +891,9 @@ fn Works() { // CHECK:STDOUT: %x: @Simple4.%T.as_type.loc9_23.2 (%T.as_type) = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %Compound4.decl: %Compound4.type = fn_decl @Compound4 [concrete = constants.%Compound4] { -// CHECK:STDOUT: %V.patt.loc16_14.1: %L1.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc16_14.2 (constants.%V.patt)] -// CHECK:STDOUT: %y.patt: @Compound4.%V.as_type.loc16_25.2 (%V.as_type) = binding_pattern y -// CHECK:STDOUT: %y.param_patt: @Compound4.%V.as_type.loc16_25.2 (%V.as_type) = value_param_pattern %y.patt, call_param0 +// CHECK:STDOUT: %V.patt.loc16_14.1: %pattern_type.5da = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc16_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %y.patt: @Compound4.%pattern_type (%pattern_type.ad3e89.3) = binding_pattern y +// CHECK:STDOUT: %y.param_patt: @Compound4.%pattern_type (%pattern_type.ad3e89.3) = value_param_pattern %y.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %L1.ref.loc16: type = name_ref L1, file.%L1.decl [concrete = constants.%L1.type] // CHECK:STDOUT: %V.loc16_14.1: %L1.type = bind_symbolic_name V, 0 [symbolic = %V.loc16_14.2 (constants.%V)] @@ -877,8 +910,8 @@ fn Works() { // CHECK:STDOUT: interface @L1 { // CHECK:STDOUT: %Self: %L1.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %R1.decl: %R1.type = fn_decl @R1 [concrete = constants.%R1] { -// CHECK:STDOUT: %self.patt: @R1.%Self.as_type.loc4_15.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @R1.%Self.as_type.loc4_15.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @R1.%pattern_type (%pattern_type.ad3e89.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @R1.%pattern_type (%pattern_type.ad3e89.1) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @R1.%Self.as_type.loc4_15.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc4_15.1: type = splice_block %.loc4_15.2 [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)] { @@ -890,9 +923,9 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %L1.assoc_type = assoc_entity element0, %R1.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %S1.decl: %S1.type = fn_decl @S1 [concrete = constants.%S1] { -// CHECK:STDOUT: %self.patt: @S1.%ptr.loc5_24.1 (%ptr.72f01d.1) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @S1.%ptr.loc5_24.1 (%ptr.72f01d.1) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc5_9: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: @S1.%pattern_type (%pattern_type.53384b.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @S1.%pattern_type (%pattern_type.53384b.1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc5_9: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @S1.%ptr.loc5_24.1 (%ptr.72f01d.1) = value_param call_param0 // CHECK:STDOUT: %.loc5_24.1: type = splice_block %ptr.loc5_24.2 [symbolic = %ptr.loc5_24.1 (constants.%ptr.72f01d.1)] { @@ -915,6 +948,7 @@ fn Works() { // CHECK:STDOUT: generic fn @R1(@L1.%Self: %L1.type) { // CHECK:STDOUT: %Self: %L1.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_15.1 [symbolic = %pattern_type (constants.%pattern_type.ad3e89.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @R1.%Self.as_type.loc4_15.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -923,14 +957,16 @@ fn Works() { // CHECK:STDOUT: %Self: %L1.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_24.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_24.1 (constants.%Self.as_type)] // CHECK:STDOUT: %ptr.loc5_24.1: type = ptr_type %Self.as_type.loc5_24.1 [symbolic = %ptr.loc5_24.1 (constants.%ptr.72f01d.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc5_24.1 [symbolic = %pattern_type (constants.%pattern_type.53384b.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @S1.%ptr.loc5_24.1 (%ptr.72f01d.1)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple4(%T.loc9_12.1: %L1.type) { // CHECK:STDOUT: %T.loc9_12.2: %L1.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_12.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc9_12.2: %L1.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc9_12.2: %pattern_type.5da = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_12.2 (constants.%T.patt)] // CHECK:STDOUT: %T.as_type.loc9_23.2: type = facet_access_type %T.loc9_12.2 [symbolic = %T.as_type.loc9_23.2 (constants.%T.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc9_23.2 [symbolic = %pattern_type (constants.%pattern_type.ad3e89.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc9: = require_complete_type %T.as_type.loc9_23.2 [symbolic = %require_complete.loc9 (constants.%require_complete.97cd40.1)] @@ -957,8 +993,8 @@ fn Works() { // CHECK:STDOUT: %bound_method.loc10_8: = bound_method %x.ref.loc10, %specific_impl_fn.loc10_4.1 // CHECK:STDOUT: %.loc10_8: init %empty_tuple.type = call %bound_method.loc10_8(%x.ref.loc10) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %xcopy.patt: @Simple4.%T.as_type.loc9_23.2 (%T.as_type) = binding_pattern xcopy -// CHECK:STDOUT: %.loc11_3: @Simple4.%T.as_type.loc9_23.2 (%T.as_type) = var_pattern %xcopy.patt +// CHECK:STDOUT: %xcopy.patt: @Simple4.%pattern_type (%pattern_type.ad3e89.2) = binding_pattern xcopy +// CHECK:STDOUT: %.loc11_3: @Simple4.%pattern_type (%pattern_type.ad3e89.2) = var_pattern %xcopy.patt // CHECK:STDOUT: } // CHECK:STDOUT: %xcopy.var: ref @Simple4.%T.as_type.loc9_23.2 (%T.as_type) = var xcopy // CHECK:STDOUT: %x.ref.loc11: @Simple4.%T.as_type.loc9_23.2 (%T.as_type) = name_ref x, %x @@ -985,8 +1021,9 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound4(%V.loc16_14.1: %L1.type) { // CHECK:STDOUT: %V.loc16_14.2: %L1.type = bind_symbolic_name V, 0 [symbolic = %V.loc16_14.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc16_14.2: %L1.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc16_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc16_14.2: %pattern_type.5da = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc16_14.2 (constants.%V.patt)] // CHECK:STDOUT: %V.as_type.loc16_25.2: type = facet_access_type %V.loc16_14.2 [symbolic = %V.as_type.loc16_25.2 (constants.%V.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %V.as_type.loc16_25.2 [symbolic = %pattern_type (constants.%pattern_type.ad3e89.3)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16: = require_complete_type %V.as_type.loc16_25.2 [symbolic = %require_complete.loc16 (constants.%require_complete.97cd40.2)] @@ -1012,8 +1049,8 @@ fn Works() { // CHECK:STDOUT: %bound_method.loc17_13: = bound_method %y.ref.loc17, %specific_impl_fn.loc17_4.1 // CHECK:STDOUT: %.loc17_13: init %empty_tuple.type = call %bound_method.loc17_13(%y.ref.loc17) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %ycopy.patt: @Compound4.%V.as_type.loc16_25.2 (%V.as_type) = binding_pattern ycopy -// CHECK:STDOUT: %.loc18_3: @Compound4.%V.as_type.loc16_25.2 (%V.as_type) = var_pattern %ycopy.patt +// CHECK:STDOUT: %ycopy.patt: @Compound4.%pattern_type (%pattern_type.ad3e89.3) = binding_pattern ycopy +// CHECK:STDOUT: %.loc18_3: @Compound4.%pattern_type (%pattern_type.ad3e89.3) = var_pattern %ycopy.patt // CHECK:STDOUT: } // CHECK:STDOUT: %ycopy.var: ref @Compound4.%V.as_type.loc16_25.2 (%V.as_type) = var ycopy // CHECK:STDOUT: %y.ref.loc18: @Compound4.%V.as_type.loc16_25.2 (%V.as_type) = name_ref y, %y @@ -1040,29 +1077,34 @@ fn Works() { // CHECK:STDOUT: specific @R1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ad3e89.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @S1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_24.1 => constants.%Self.as_type // CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.72f01d.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.53384b.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple4(constants.%T) { // CHECK:STDOUT: %T.loc9_12.2 => constants.%T // CHECK:STDOUT: %T.patt.loc9_12.2 => constants.%T.patt // CHECK:STDOUT: %T.as_type.loc9_23.2 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ad3e89.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @R1(constants.%L1.facet.ed78cc.1) { // CHECK:STDOUT: %Self => constants.%L1.facet.ed78cc.1 // CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ad3e89.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @S1(constants.%L1.facet.ed78cc.1) { // CHECK:STDOUT: %Self => constants.%L1.facet.ed78cc.1 // CHECK:STDOUT: %Self.as_type.loc5_24.1 => constants.%T.as_type // CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.72f01d.2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.53384b.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @R1(@Simple4.%L1.facet) {} @@ -1073,17 +1115,20 @@ fn Works() { // CHECK:STDOUT: %V.loc16_14.2 => constants.%V // CHECK:STDOUT: %V.patt.loc16_14.2 => constants.%V.patt // CHECK:STDOUT: %V.as_type.loc16_25.2 => constants.%V.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ad3e89.3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @R1(constants.%L1.facet.ed78cc.2) { // CHECK:STDOUT: %Self => constants.%L1.facet.ed78cc.2 // CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%V.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ad3e89.3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @S1(constants.%L1.facet.ed78cc.2) { // CHECK:STDOUT: %Self => constants.%L1.facet.ed78cc.2 // CHECK:STDOUT: %Self.as_type.loc5_24.1 => constants.%V.as_type // CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.72f01d.3 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.53384b.3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @R1(@Compound4.%L1.facet) {} @@ -1096,17 +1141,21 @@ fn Works() { // CHECK:STDOUT: %L2.type: type = facet_type <@L2> [concrete] // CHECK:STDOUT: %Self: %L2.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.47b45b.1: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %R2.type: type = fn_type @R2 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %R2: %R2.type = struct_value () [concrete] // CHECK:STDOUT: %L2.assoc_type: type = assoc_entity_type @L2 [concrete] // CHECK:STDOUT: %assoc0: %L2.assoc_type = assoc_entity element0, @L2.%R2.decl [concrete] // CHECK:STDOUT: %ptr.f3e54b.1: type = ptr_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.696b36.1: type = pattern_type %ptr.f3e54b.1 [symbolic] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %S2.type: type = fn_type @S2 [concrete] // CHECK:STDOUT: %S2: %S2.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %L2.assoc_type = assoc_entity element1, @L2.%S2.decl [concrete] // CHECK:STDOUT: %T: %L2.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %L2.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.1c0: type = pattern_type %L2.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.1c0 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Simple5.type: type = fn_type @Simple5 [concrete] // CHECK:STDOUT: %Simple5: %Simple5.type = struct_value () [concrete] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] @@ -1114,13 +1163,15 @@ fn Works() { // CHECK:STDOUT: %L2.facet: %L2.type = facet_value %T.as_type, (%L2.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %.c42: type = fn_type_with_self_type %R2.type, %L2.facet [symbolic] // CHECK:STDOUT: %impl.elem0: %.c42 = impl_witness_access %L2.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.47b45b.2: type = pattern_type %T.as_type [symbolic] // CHECK:STDOUT: %specific_impl_fn.7ee: = specific_impl_function %impl.elem0, @R2(%L2.facet) [symbolic] // CHECK:STDOUT: %.7f6: type = fn_type_with_self_type %S2.type, %L2.facet [symbolic] // CHECK:STDOUT: %impl.elem1: %.7f6 = impl_witness_access %L2.lookup_impl_witness, element1 [symbolic] // CHECK:STDOUT: %ptr.f3e54b.2: type = ptr_type %T.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.696b36.2: type = pattern_type %ptr.f3e54b.2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.b69: = specific_impl_function %impl.elem1, @S2(%L2.facet) [symbolic] // CHECK:STDOUT: %V: %L2.type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %L2.type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.1c0 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %Compound5.type: type = fn_type @Compound5 [concrete] // CHECK:STDOUT: %Compound5: %Compound5.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -1141,13 +1192,13 @@ fn Works() { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %L2.decl: type = interface_decl @L2 [concrete = constants.%L2.type] {} {} // CHECK:STDOUT: %Simple5.decl: %Simple5.type = fn_decl @Simple5 [concrete = constants.%Simple5] { -// CHECK:STDOUT: %T.patt.loc10_12.1: %L2.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc10_12.1: %pattern_type.1c0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_12.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %L2.ref: type = name_ref L2, file.%L2.decl [concrete = constants.%L2.type] // CHECK:STDOUT: %T.loc10_12.1: %L2.type = bind_symbolic_name T, 0 [symbolic = %T.loc10_12.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %Compound5.decl: %Compound5.type = fn_decl @Compound5 [concrete = constants.%Compound5] { -// CHECK:STDOUT: %V.patt.loc30_14.1: %L2.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc30_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc30_14.1: %pattern_type.1c0 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc30_14.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %L2.ref.loc30: type = name_ref L2, file.%L2.decl [concrete = constants.%L2.type] // CHECK:STDOUT: %V.loc30_14.1: %L2.type = bind_symbolic_name V, 0 [symbolic = %V.loc30_14.2 (constants.%V)] @@ -1157,8 +1208,8 @@ fn Works() { // CHECK:STDOUT: interface @L2 { // CHECK:STDOUT: %Self: %L2.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %R2.decl: %R2.type = fn_decl @R2 [concrete = constants.%R2] { -// CHECK:STDOUT: %self.patt: @R2.%Self.as_type.loc5_15.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @R2.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @R2.%pattern_type (%pattern_type.47b45b.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @R2.%pattern_type (%pattern_type.47b45b.1) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @R2.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_15.1: type = splice_block %.loc5_15.2 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] { @@ -1170,9 +1221,9 @@ fn Works() { // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %L2.assoc_type = assoc_entity element0, %R2.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %S2.decl: %S2.type = fn_decl @S2 [concrete = constants.%S2] { -// CHECK:STDOUT: %self.patt: @S2.%ptr.loc6_24.1 (%ptr.f3e54b.1) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @S2.%ptr.loc6_24.1 (%ptr.f3e54b.1) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc6_9: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: @S2.%pattern_type (%pattern_type.696b36.1) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @S2.%pattern_type (%pattern_type.696b36.1) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc6_9: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @S2.%ptr.loc6_24.1 (%ptr.f3e54b.1) = value_param call_param0 // CHECK:STDOUT: %.loc6_24.1: type = splice_block %ptr.loc6_24.2 [symbolic = %ptr.loc6_24.1 (constants.%ptr.f3e54b.1)] { @@ -1195,6 +1246,7 @@ fn Works() { // CHECK:STDOUT: generic fn @R2(@L2.%Self: %L2.type) { // CHECK:STDOUT: %Self: %L2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_15.1 [symbolic = %pattern_type (constants.%pattern_type.47b45b.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @R2.%Self.as_type.loc5_15.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -1203,13 +1255,14 @@ fn Works() { // CHECK:STDOUT: %Self: %L2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc6_24.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_24.1 (constants.%Self.as_type)] // CHECK:STDOUT: %ptr.loc6_24.1: type = ptr_type %Self.as_type.loc6_24.1 [symbolic = %ptr.loc6_24.1 (constants.%ptr.f3e54b.1)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc6_24.1 [symbolic = %pattern_type (constants.%pattern_type.696b36.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @S2.%ptr.loc6_24.1 (%ptr.f3e54b.1)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Simple5(%T.loc10_12.1: %L2.type) { // CHECK:STDOUT: %T.loc10_12.2: %L2.type = bind_symbolic_name T, 0 [symbolic = %T.loc10_12.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc10_12.2: %L2.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_12.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc10_12.2: %pattern_type.1c0 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_12.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc18_4.2: type = facet_access_type %T.loc10_12.2 [symbolic = %T.as_type.loc18_4.2 (constants.%T.as_type)] @@ -1245,7 +1298,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Compound5(%V.loc30_14.1: %L2.type) { // CHECK:STDOUT: %V.loc30_14.2: %L2.type = bind_symbolic_name V, 0 [symbolic = %V.loc30_14.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc30_14.2: %L2.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc30_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc30_14.2: %pattern_type.1c0 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc30_14.2 (constants.%V.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1264,12 +1317,14 @@ fn Works() { // CHECK:STDOUT: specific @R2(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.47b45b.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @S2(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc6_24.1 => constants.%Self.as_type // CHECK:STDOUT: %ptr.loc6_24.1 => constants.%ptr.f3e54b.1 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.696b36.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple5(constants.%T) { @@ -1280,12 +1335,14 @@ fn Works() { // CHECK:STDOUT: specific @R2(constants.%L2.facet) { // CHECK:STDOUT: %Self => constants.%L2.facet // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%T.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.47b45b.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @S2(constants.%L2.facet) { // CHECK:STDOUT: %Self => constants.%L2.facet // CHECK:STDOUT: %Self.as_type.loc6_24.1 => constants.%T.as_type // CHECK:STDOUT: %ptr.loc6_24.1 => constants.%ptr.f3e54b.2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.696b36.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @R2(@Simple5.%L2.facet) {} @@ -1322,12 +1379,15 @@ fn Works() { // CHECK:STDOUT: %assoc0.d45: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type.19f: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type.19f [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl.f92 [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl.f92(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] @@ -1341,10 +1401,12 @@ fn Works() { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type.40a: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type.40a [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2d2: type = facet_type <@ImplicitAs, @ImplicitAs(%A.type)> [concrete] @@ -1362,21 +1424,21 @@ fn Works() { // CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0.d45] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.f92.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.f92.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.f92.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.9c1: type = import_ref Core//prelude, loc21_29, loaded [concrete = constants.%BitAnd.type] // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.f92.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.3: type = import_ref Core//prelude, loc13_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//prelude, inst67 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//prelude, inst72 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//prelude, loc14_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//prelude, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.4: type = import_ref Core//prelude, loc13_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//prelude, inst67 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//prelude, inst72 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//prelude, loc14_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1419,7 +1481,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.3: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -1447,7 +1509,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.f92(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl.f92(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1554,12 +1616,14 @@ fn Works() { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.19f)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1571,6 +1635,8 @@ fn Works() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.40a)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1582,6 +1648,7 @@ fn Works() { // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.19f +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(constants.%T) { @@ -1594,6 +1661,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(type) { @@ -1609,6 +1677,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -1627,6 +1696,8 @@ fn Works() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.40a +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%A.type) { @@ -1667,12 +1738,15 @@ fn Works() { // CHECK:STDOUT: %assoc0.d45: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] +// CHECK:STDOUT: %pattern_type.67d: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness_table = impl_witness_table (imports.%Core.import_ref.1e6), @impl.f92 [concrete] // CHECK:STDOUT: %BitAnd.impl_witness.b7b: = impl_witness %BitAnd.impl_witness_table, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.type.f99: type = fn_type @Op.2, @impl.f92(%T) [symbolic] // CHECK:STDOUT: %Op.05a: %Op.type.f99 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness.0e5: = impl_witness %BitAnd.impl_witness_table, @impl.f92(type) [concrete] // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl.f92(type) [concrete] @@ -1691,10 +1765,10 @@ fn Works() { // CHECK:STDOUT: .BitAnd = %Core.BitAnd // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst102 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ad0 = import_ref Core//prelude, inst110 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.a46: %BitAnd.assoc_type = import_ref Core//prelude, loc18_41, loaded [concrete = constants.%assoc0.d45] // CHECK:STDOUT: %Core.Op = import_ref Core//prelude, Op, unloaded -// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst102 [no loc], loaded [symbolic = constants.%Self.25f] +// CHECK:STDOUT: %Core.import_ref.040: %BitAnd.type = import_ref Core//prelude, inst110 [no loc], loaded [symbolic = constants.%Self.25f] // CHECK:STDOUT: %Core.import_ref.140: = import_ref Core//prelude, loc21_36, loaded [symbolic = @impl.f92.%BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//prelude, loc21_14, loaded [symbolic = @impl.f92.%T (constants.%T)] // CHECK:STDOUT: %Core.import_ref.583: type = import_ref Core//prelude, loc21_24, loaded [symbolic = @impl.f92.%T (constants.%T)] @@ -1749,7 +1823,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl.f92(imports.%Core.import_ref.5ab3ec.1: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness constants.%BitAnd.impl_witness_table, @impl.f92(%T) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness.b7b)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1840,12 +1914,14 @@ fn Works() { // CHECK:STDOUT: generic fn @Op.1(imports.%Core.import_ref.040: %BitAnd.type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.25f)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic = %pattern_type (constants.%pattern_type.67d)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(imports.%Core.import_ref.5ab3ec.2: type) [from "include_files/facet_types.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1859,6 +1935,7 @@ fn Works() { // CHECK:STDOUT: specific @Op.1(constants.%Self.25f) { // CHECK:STDOUT: %Self => constants.%Self.25f // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.67d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(constants.%T) { @@ -1871,6 +1948,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl.f92(type) { @@ -1886,6 +1964,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(type) { // CHECK:STDOUT: %T => type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.98f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -1894,12 +1973,15 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %As.type.b51: type = generic_interface_type @As [concrete] // CHECK:STDOUT: %As.generic: %As.type.b51 = struct_value () [concrete] // CHECK:STDOUT: %As.type.8ba: type = facet_type <@As, @As(%Dest)> [symbolic] // CHECK:STDOUT: %Self.b4e: %As.type.8ba = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.7f0: type = facet_access_type %Self.b4e [symbolic] +// CHECK:STDOUT: %pattern_type.947: type = pattern_type %Self.as_type.7f0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type.ad1: type = fn_type @Convert.1, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.0ed: %Convert.type.ad1 = struct_value () [symbolic] // CHECK:STDOUT: %As.assoc_type: type = assoc_entity_type @As, @As(%Dest) [symbolic] @@ -1909,6 +1991,7 @@ fn Works() { // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type.419: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type.419 [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.2, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -1916,13 +1999,15 @@ fn Works() { // CHECK:STDOUT: %BitAnd.type: type = facet_type <@BitAnd> [concrete] // CHECK:STDOUT: %Self.e44: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type.560: type = facet_access_type %Self.e44 [symbolic] +// CHECK:STDOUT: %pattern_type.a80: type = pattern_type %Self.as_type.560 [symbolic] // CHECK:STDOUT: %Op.type.613: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Op.d98: %Op.type.613 = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.assoc_type: type = assoc_entity_type @BitAnd [concrete] // CHECK:STDOUT: %assoc0.220: %BitAnd.assoc_type = assoc_entity element0, @BitAnd.%Op.decl [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T) [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Op.type.28d: type = fn_type @Op.2, @impl(%T) [symbolic] // CHECK:STDOUT: %Op.902: %Op.type.28d = struct_value () [symbolic] // CHECK:STDOUT: %require_complete: = require_complete_type %T [symbolic] @@ -1936,18 +2021,18 @@ fn Works() { // CHECK:STDOUT: .BitAnd = %BitAnd.decl // CHECK:STDOUT: } // CHECK:STDOUT: %As.decl: %As.type.b51 = interface_decl @As [concrete = constants.%As.generic] { -// CHECK:STDOUT: %Dest.patt.loc9_14.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc9_14.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc13_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc13_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] // CHECK:STDOUT: } // CHECK:STDOUT: %BitAnd.decl: type = interface_decl @BitAnd [concrete = constants.%BitAnd.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %T.patt.loc21_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc21_14.1 [symbolic = %T.loc21_14.2 (constants.%T)] // CHECK:STDOUT: %BitAnd.ref: type = name_ref BitAnd, file.%BitAnd.decl [concrete = constants.%BitAnd.type] @@ -1959,7 +2044,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @As(%Dest.loc9_14.1: type) { // CHECK:STDOUT: %Dest.loc9_14.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc9_14.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc9_14.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc9_14.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc9_14.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest.loc9_14.2)> [symbolic = %As.type (constants.%As.type.8ba)] @@ -1972,10 +2057,10 @@ fn Works() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.b4e)] // CHECK:STDOUT: %Convert.decl: @As.%Convert.type (%Convert.type.ad1) = fn_decl @Convert.1 [symbolic = @As.%Convert (constants.%Convert.0ed)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc10_14 (%pattern_type.947) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc10_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @As.%Dest.loc9_14.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0) = value_param call_param0 @@ -2001,7 +2086,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc13_22.1: type) { // CHECK:STDOUT: %Dest.loc13_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc13_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc13_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc13_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc13_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -2014,10 +2099,10 @@ fn Works() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.2 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.2.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.2.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.2.%pattern_type.loc14_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.2.%pattern_type.loc14_28 (%pattern_type.7dcd0a.1) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc13_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419) = value_param call_param0 @@ -2044,12 +2129,12 @@ fn Works() { // CHECK:STDOUT: interface @BitAnd { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.e44] // CHECK:STDOUT: %Op.decl: %Op.type.613 = fn_decl @Op.1 [concrete = constants.%Op.d98] { -// CHECK:STDOUT: %self.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.1.%pattern_type (%pattern_type.a80) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.1.%pattern_type (%pattern_type.a80) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.1.%pattern_type (%pattern_type.a80) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc18_37: %BitAnd.type = name_ref Self, @BitAnd.%Self [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_37: type = facet_access_type %Self.ref.loc18_37 [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] @@ -2081,7 +2166,7 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%T.loc21_14.1: type) { // CHECK:STDOUT: %T.loc21_14.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_14.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc21_14.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc21_14.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt)] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table, @impl(%T.loc21_14.2) [symbolic = %BitAnd.impl_witness (constants.%BitAnd.impl_witness)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -2091,12 +2176,12 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: impl: %T.ref as %BitAnd.ref { // CHECK:STDOUT: %Op.decl: @impl.%Op.type (%Op.type.28d) = fn_decl @Op.2 [symbolic = @impl.%Op (constants.%Op.902)] { -// CHECK:STDOUT: %self.patt: @Op.2.%T (%T) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Op.2.%T (%T) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: @Op.2.%T (%T) = binding_pattern other -// CHECK:STDOUT: %other.param_patt: @Op.2.%T (%T) = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: @Op.2.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Op.2.%T (%T) = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = binding_pattern other +// CHECK:STDOUT: %other.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Op.2.%pattern_type (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc22_37: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Op.2.%T (%T) = value_param call_param0 @@ -2120,6 +2205,8 @@ fn Works() { // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.8ba)] // CHECK:STDOUT: %Self: @Convert.1.%As.type (%As.type.8ba) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.b4e)] // CHECK:STDOUT: %Self.as_type.loc10_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc10_20.1 (constants.%Self.as_type.7f0)] +// CHECK:STDOUT: %pattern_type.loc10_14: type = pattern_type %Self.as_type.loc10_20.1 [symbolic = %pattern_type.loc10_14 (constants.%pattern_type.947)] +// CHECK:STDOUT: %pattern_type.loc10_28: type = pattern_type %Dest [symbolic = %pattern_type.loc10_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc10_20.1 (%Self.as_type.7f0)) -> @Convert.1.%Dest (%Dest); // CHECK:STDOUT: } @@ -2129,6 +2216,8 @@ fn Works() { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.2.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc14_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_20.1 (constants.%Self.as_type.419)] +// CHECK:STDOUT: %pattern_type.loc14_14: type = pattern_type %Self.as_type.loc14_20.1 [symbolic = %pattern_type.loc14_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc14_28: type = pattern_type %Dest [symbolic = %pattern_type.loc14_28 (constants.%pattern_type.7dcd0a.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.2.%Self.as_type.loc14_20.1 (%Self.as_type.419)) -> @Convert.2.%Dest (%Dest); // CHECK:STDOUT: } @@ -2136,12 +2225,14 @@ fn Works() { // CHECK:STDOUT: generic fn @Op.1(@BitAnd.%Self: %BitAnd.type) { // CHECK:STDOUT: %Self: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.e44)] // CHECK:STDOUT: %Self.as_type.loc18_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_15.1 (constants.%Self.as_type.560)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_15.1 [symbolic = %pattern_type (constants.%pattern_type.a80)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560), %other.param: @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560)) -> @Op.1.%Self.as_type.loc18_15.1 (%Self.as_type.560); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Op.2(@impl.%T.loc21_14.1: type) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -2158,6 +2249,8 @@ fn Works() { // CHECK:STDOUT: %As.type => constants.%As.type.8ba // CHECK:STDOUT: %Self => constants.%Self.b4e // CHECK:STDOUT: %Self.as_type.loc10_20.1 => constants.%Self.as_type.7f0 +// CHECK:STDOUT: %pattern_type.loc10_14 => constants.%pattern_type.947 +// CHECK:STDOUT: %pattern_type.loc10_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(@Convert.1.%Dest) {} @@ -2174,6 +2267,8 @@ fn Works() { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc14_20.1 => constants.%Self.as_type.419 +// CHECK:STDOUT: %pattern_type.loc14_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc14_28 => constants.%pattern_type.7dcd0a.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.2.%Dest) {} @@ -2183,6 +2278,7 @@ fn Works() { // CHECK:STDOUT: specific @Op.1(constants.%Self.e44) { // CHECK:STDOUT: %Self => constants.%Self.e44 // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%Self.as_type.560 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a80 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(constants.%T) { @@ -2195,10 +2291,12 @@ fn Works() { // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.2(constants.%T) { // CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Op.1(constants.%BitAnd.facet) { // CHECK:STDOUT: %Self => constants.%BitAnd.facet // CHECK:STDOUT: %Self.as_type.loc18_15.1 => constants.%T +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/min_prelude/default_fn.carbon b/toolchain/check/testdata/interface/min_prelude/default_fn.carbon index 845b65829658..8734060758fb 100644 --- a/toolchain/check/testdata/interface/min_prelude/default_fn.carbon +++ b/toolchain/check/testdata/interface/min_prelude/default_fn.carbon @@ -33,12 +33,14 @@ class C { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.b2f: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.0b5: type = fn_type @F.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F.20c: %F.type.0b5 = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%F.decl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @C.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type.4a2: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.eb2: %F.type.4a2 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete] @@ -67,8 +69,8 @@ class C { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type.0b5 = fn_decl @F.1 [concrete = constants.%F.20c] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc17_16.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc17_16.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.b2f) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.b2f) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.1.%Self.as_type.loc17_16.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc17_16.1: type = splice_block %.loc17_16.2 [symbolic = %Self.as_type.loc17_16.1 (constants.%Self.as_type)] { @@ -90,8 +92,8 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %C.ref as %I.ref { // CHECK:STDOUT: %F.decl: %F.type.4a2 = fn_decl @F.2 [concrete = constants.%F.eb2] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%C.ref [concrete = constants.%C] @@ -124,6 +126,7 @@ class C { // CHECK:STDOUT: generic fn @F.1(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc17_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc17_16.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc17_16.1 [symbolic = %pattern_type (constants.%pattern_type.b2f)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc17_16.1 [symbolic = %require_complete (constants.%require_complete)] @@ -131,8 +134,8 @@ class C { // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc17_16.1 (%Self.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc19_7.1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc19_7.1: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc19_19.1: %empty_struct_type = struct_literal () @@ -160,11 +163,13 @@ class C { // CHECK:STDOUT: specific @F.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc17_16.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b2f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc17_16.1 => constants.%C +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- include_files/destroy.carbon diff --git a/toolchain/check/testdata/interface/min_prelude/fail_member_lookup.carbon b/toolchain/check/testdata/interface/min_prelude/fail_member_lookup.carbon index c936d82db276..9ed6671190a1 100644 --- a/toolchain/check/testdata/interface/min_prelude/fail_member_lookup.carbon +++ b/toolchain/check/testdata/interface/min_prelude/fail_member_lookup.carbon @@ -58,12 +58,15 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.96f: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.96f = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert: %Convert.type = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -75,7 +78,7 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc3_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc3_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -83,7 +86,7 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc3_22.1: type) { // CHECK:STDOUT: %Dest.loc3_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc3_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc3_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -96,10 +99,10 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type) = fn_decl @Convert [symbolic = @ImplicitAs.%Convert (constants.%Convert)] { -// CHECK:STDOUT: %self.patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc3_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param call_param0 @@ -128,6 +131,8 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.as_type.loc4_20.1 [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc4_28: type = pattern_type %Dest [symbolic = %pattern_type.loc4_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type)) -> @Convert.%Dest (%Dest); // CHECK:STDOUT: } @@ -142,6 +147,8 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_20.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.%Dest) {} @@ -163,10 +170,13 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.dc8: type = facet_type <@ImplicitAs, @ImplicitAs(type)> [concrete] @@ -179,7 +189,8 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %Different.type: type = facet_type <@Different> [concrete] // CHECK:STDOUT: %Self.e7f: %Different.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %U: %Different.type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %Different.type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.855: type = pattern_type %Different.type [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.855 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -191,11 +202,11 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: import Core//default // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst26 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst27 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//default, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//default, loc3_22, loaded [symbolic = @ImplicitAs.%Dest (constants.%Dest)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst26 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst27 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//default, loc4_35, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -212,7 +223,7 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %F.decl: %F.type.b25 = fn_decl @F.2 [concrete = constants.%F.c41] {} {} // CHECK:STDOUT: %Different.decl: type = interface_decl @Different [concrete = constants.%Different.type] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %U.patt.loc34_6.1: %Different.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc34_6.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc34_6.1: %pattern_type.855 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc34_6.2 (constants.%U.patt)] // CHECK:STDOUT: %return.patt: = return_slot_pattern // CHECK:STDOUT: %return.param_patt: = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { @@ -243,7 +254,7 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "core.carbon"] { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -300,13 +311,15 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %Dest [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%U.loc34_6.1: %Different.type) { // CHECK:STDOUT: %U.loc34_6.2: %Different.type = bind_symbolic_name U, 0 [symbolic = %U.loc34_6.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc34_6.2: %Different.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc34_6.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc34_6.2: %pattern_type.855 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc34_6.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> ; // CHECK:STDOUT: } @@ -329,6 +342,8 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(type) { diff --git a/toolchain/check/testdata/interface/min_prelude/generic_method.carbon b/toolchain/check/testdata/interface/min_prelude/generic_method.carbon index 2aef686dee29..4185877507cf 100644 --- a/toolchain/check/testdata/interface/min_prelude/generic_method.carbon +++ b/toolchain/check/testdata/interface/min_prelude/generic_method.carbon @@ -84,17 +84,20 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %A.type.495: type = generic_interface_type @A [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %A.generic: %A.type.495 = struct_value () [concrete] // CHECK:STDOUT: %A.type.75a: type = facet_type <@A, @A(%T.8b3)> [symbolic] // CHECK:STDOUT: %Self.753: %A.type.75a = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %U.2cb: type = bind_symbolic_name U, 2 [symbolic] -// CHECK:STDOUT: %U.patt.b3a: type = symbolic_binding_pattern U, 2 [symbolic] +// CHECK:STDOUT: %U.patt.41c: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic] +// CHECK:STDOUT: %pattern_type.20f: type = pattern_type %U.2cb [symbolic] // CHECK:STDOUT: %tuple.type.e59: type = tuple_type (type, %A.type.75a, type) [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.753 [symbolic] // CHECK:STDOUT: %tuple.type.bd2: type = tuple_type (%T.8b3, %Self.as_type, %U.2cb) [symbolic] +// CHECK:STDOUT: %pattern_type.44c: type = pattern_type %tuple.type.bd2 [symbolic] // CHECK:STDOUT: %F.type.17a: type = fn_type @F.1, @A(%T.8b3) [symbolic] // CHECK:STDOUT: %F.0d8: %F.type.17a = struct_value () [symbolic] // CHECK:STDOUT: %A.assoc_type.ed3: type = assoc_entity_type @A, @A(%T.8b3) [symbolic] @@ -112,9 +115,11 @@ fn CallIndirect() { // CHECK:STDOUT: %assoc0.5f6: %A.assoc_type.296 = assoc_entity element0, @A.%F.decl [concrete] // CHECK:STDOUT: %A.impl_witness: = impl_witness file.%A.impl_witness_table [concrete] // CHECK:STDOUT: %U.8b3: type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt.e01: type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt.250: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %U.8b3 [symbolic] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.765: type = tuple_type (%X, %Y, %U.8b3) [symbolic] +// CHECK:STDOUT: %pattern_type.340: type = pattern_type %tuple.type.765 [symbolic] // CHECK:STDOUT: %F.type.436: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.ce9: %F.type.436 = struct_value () [concrete] // CHECK:STDOUT: %A.facet.552: %A.type.91f = facet_value %Y, (%A.impl_witness) [concrete] @@ -127,11 +132,14 @@ fn CallIndirect() { // CHECK:STDOUT: %Call.type: type = fn_type @Call [concrete] // CHECK:STDOUT: %Call: %Call.type = struct_value () [concrete] // CHECK:STDOUT: %.a60: type = fn_type_with_self_type %F.type.13d, %A.facet.552 [concrete] +// CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %Z [concrete] // CHECK:STDOUT: %tuple.type.f6b: type = tuple_type (%X, %Y, %Z) [concrete] +// CHECK:STDOUT: %pattern_type.ef1: type = pattern_type %tuple.type.f6b [concrete] // CHECK:STDOUT: %F.specific_fn: = specific_function %F.ce9, @F.2(%Z) [concrete] // CHECK:STDOUT: %Z.val: %Z = struct_value () [concrete] // CHECK:STDOUT: %T.9c2: %A.type.91f = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e81: %A.type.91f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.817: type = pattern_type %A.type.91f [concrete] +// CHECK:STDOUT: %T.patt.33a: %pattern_type.817 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %CallGeneric.type: type = fn_type @CallGeneric [concrete] // CHECK:STDOUT: %CallGeneric: %CallGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.9c2 [symbolic] @@ -140,6 +148,7 @@ fn CallIndirect() { // CHECK:STDOUT: %.ffa: type = fn_type_with_self_type %F.type.13d, %A.facet.11f [symbolic] // CHECK:STDOUT: %impl.elem0: %.ffa = impl_witness_access %A.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %tuple.type.e28: type = tuple_type (%X, %T.as_type, %Z) [symbolic] +// CHECK:STDOUT: %pattern_type.f25: type = pattern_type %tuple.type.e28 [symbolic] // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @F.1(%X, %A.facet.11f, %Z) [symbolic] // CHECK:STDOUT: %require_complete.500: = require_complete_type %tuple.type.e28 [symbolic] // CHECK:STDOUT: %CallIndirect.type: type = fn_type @CallIndirect [concrete] @@ -168,7 +177,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type.495 = interface_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt.loc5_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc5_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc5_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.2 (constants.%T.8b3)] // CHECK:STDOUT: } @@ -185,7 +194,7 @@ fn CallIndirect() { // CHECK:STDOUT: %A.impl_witness: = impl_witness %A.impl_witness_table [concrete = constants.%A.impl_witness] // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] {} {} // CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [concrete = constants.%CallGeneric] { -// CHECK:STDOUT: %T.patt.loc25_16.1: %A.type.91f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_16.2 (constants.%T.patt.e81)] +// CHECK:STDOUT: %T.patt.loc25_16.1: %pattern_type.817 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_16.2 (constants.%T.patt.33a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc25: type = splice_block %A.type [concrete = constants.%A.type.91f] { // CHECK:STDOUT: %A.ref: %A.type.495 = name_ref A, file.%A.decl [concrete = constants.%A.generic] @@ -199,7 +208,7 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @A(%T.loc5_13.1: type) { // CHECK:STDOUT: %T.loc5_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc5_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc5_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T.loc5_13.2)> [symbolic = %A.type (constants.%A.type.75a)] @@ -212,11 +221,11 @@ fn CallIndirect() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @A.%A.type (%A.type.75a) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.753)] // CHECK:STDOUT: %F.decl: @A.%F.type (%F.type.17a) = fn_decl @F.1 [symbolic = @A.%F (constants.%F.0d8)] { -// CHECK:STDOUT: %U.patt.loc6_8.1: type = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_8.2 (constants.%U.patt.b3a)] -// CHECK:STDOUT: %u.patt: @F.1.%U.loc6_8.1 (%U.2cb) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.1.%U.loc6_8.1 (%U.2cb) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%tuple.type.loc6_38.2 (%tuple.type.bd2) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%tuple.type.loc6_38.2 (%tuple.type.bd2) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %U.patt.loc6_8.1: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_8.2 (constants.%U.patt.41c)] +// CHECK:STDOUT: %u.patt: @F.1.%pattern_type.loc6_18 (%pattern_type.20f) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.1.%pattern_type.loc6_18 (%pattern_type.20f) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type.loc6_24 (%pattern_type.44c) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type.loc6_24 (%pattern_type.44c) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @A.%T.loc5_13.1 [symbolic = %T (constants.%T.8b3)] // CHECK:STDOUT: %.loc6_31: @F.1.%A.type (%A.type.75a) = specific_constant @A.%Self.1, @A(constants.%T.8b3) [symbolic = %Self (constants.%Self.753)] @@ -245,11 +254,11 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %Y.ref as %A.type { // CHECK:STDOUT: %F.decl: %F.type.436 = fn_decl @F.2 [concrete = constants.%F.ce9] { -// CHECK:STDOUT: %U.patt.loc16_8.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc16_8.2 (constants.%U.patt.e01)] -// CHECK:STDOUT: %u.patt: @F.2.%U.loc16_8.1 (%U.8b3) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.2.%U.loc16_8.1 (%U.8b3) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.2.%tuple.type.loc16 (%tuple.type.765) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%tuple.type.loc16 (%tuple.type.765) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %U.patt.loc16_8.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc16_8.2 (constants.%U.patt.250)] +// CHECK:STDOUT: %u.patt: @F.2.%pattern_type.loc16_18 (%pattern_type.7dc) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.2.%pattern_type.loc16_18 (%pattern_type.7dc) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type.loc16_24 (%pattern_type.340) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type.loc16_24 (%pattern_type.340) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y] @@ -300,21 +309,25 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.1(@A.%T.loc5_13.1: type, @A.%Self.1: @A.%A.type (%A.type.75a), %U.loc6_8.2: type) { // CHECK:STDOUT: %U.loc6_8.1: type = bind_symbolic_name U, 2 [symbolic = %U.loc6_8.1 (constants.%U.2cb)] -// CHECK:STDOUT: %U.patt.loc6_8.2: type = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_8.2 (constants.%U.patt.b3a)] +// CHECK:STDOUT: %U.patt.loc6_8.2: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_8.2 (constants.%U.patt.41c)] +// CHECK:STDOUT: %pattern_type.loc6_18: type = pattern_type %U.loc6_8.1 [symbolic = %pattern_type.loc6_18 (constants.%pattern_type.20f)] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] // CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T)> [symbolic = %A.type (constants.%A.type.75a)] // CHECK:STDOUT: %Self: @F.1.%A.type (%A.type.75a) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.753)] // CHECK:STDOUT: %tuple.type.loc6_38.1: type = tuple_type (type, %A.type, type) [symbolic = %tuple.type.loc6_38.1 (constants.%tuple.type.e59)] // CHECK:STDOUT: %Self.as_type.loc6_38.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_38.1 (constants.%Self.as_type)] // CHECK:STDOUT: %tuple.type.loc6_38.2: type = tuple_type (%T, %Self.as_type.loc6_38.1, %U.loc6_8.1) [symbolic = %tuple.type.loc6_38.2 (constants.%tuple.type.bd2)] +// CHECK:STDOUT: %pattern_type.loc6_24: type = pattern_type %tuple.type.loc6_38.2 [symbolic = %pattern_type.loc6_24 (constants.%pattern_type.44c)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @F.1.%U.loc6_8.1 (%U.2cb)) -> @F.1.%tuple.type.loc6_38.2 (%tuple.type.bd2); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(%U.loc16_8.2: type) { // CHECK:STDOUT: %U.loc16_8.1: type = bind_symbolic_name U, 0 [symbolic = %U.loc16_8.1 (constants.%U.8b3)] -// CHECK:STDOUT: %U.patt.loc16_8.2: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc16_8.2 (constants.%U.patt.e01)] +// CHECK:STDOUT: %U.patt.loc16_8.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc16_8.2 (constants.%U.patt.250)] +// CHECK:STDOUT: %pattern_type.loc16_18: type = pattern_type %U.loc16_8.1 [symbolic = %pattern_type.loc16_18 (constants.%pattern_type.7dc)] // CHECK:STDOUT: %tuple.type.loc16: type = tuple_type (constants.%X, constants.%Y, %U.loc16_8.1) [symbolic = %tuple.type.loc16 (constants.%tuple.type.765)] +// CHECK:STDOUT: %pattern_type.loc16_24: type = pattern_type %tuple.type.loc16 [symbolic = %pattern_type.loc16_24 (constants.%pattern_type.340)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_24: = require_complete_type %tuple.type.loc16 [symbolic = %require_complete.loc16_24 (constants.%require_complete.816)] @@ -370,7 +383,7 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGeneric(%T.loc25_16.1: %A.type.91f) { // CHECK:STDOUT: %T.loc25_16.2: %A.type.91f = bind_symbolic_name T, 0 [symbolic = %T.loc25_16.2 (constants.%T.9c2)] -// CHECK:STDOUT: %T.patt.loc25_16.2: %A.type.91f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_16.2 (constants.%T.patt.e81)] +// CHECK:STDOUT: %T.patt.loc25_16.2: %pattern_type.817 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_16.2 (constants.%T.patt.33a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc26_4.2: type = facet_access_type %T.loc25_16.2 [symbolic = %T.as_type.loc26_4.2 (constants.%T.as_type)] @@ -418,18 +431,20 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.8b3) { // CHECK:STDOUT: %T.loc5_13.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%T.8b3, constants.%Self.753, constants.%U.2cb) { // CHECK:STDOUT: %U.loc6_8.1 => constants.%U.2cb -// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.b3a +// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.41c +// CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.20f // CHECK:STDOUT: %T => constants.%T.8b3 // CHECK:STDOUT: %A.type => constants.%A.type.75a // CHECK:STDOUT: %Self => constants.%Self.753 // CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.e59 // CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%Self.as_type // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.bd2 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.44c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(@F.1.%T) {} @@ -438,7 +453,7 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%X) { // CHECK:STDOUT: %T.loc5_13.2 => constants.%X -// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %A.type => constants.%A.type.91f @@ -451,25 +466,31 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%U.8b3) { // CHECK:STDOUT: %U.loc16_8.1 => constants.%U.8b3 -// CHECK:STDOUT: %U.patt.loc16_8.2 => constants.%U.patt.e01 +// CHECK:STDOUT: %U.patt.loc16_8.2 => constants.%U.patt.250 +// CHECK:STDOUT: %pattern_type.loc16_18 => constants.%pattern_type.7dc // CHECK:STDOUT: %tuple.type.loc16 => constants.%tuple.type.765 +// CHECK:STDOUT: %pattern_type.loc16_24 => constants.%pattern_type.340 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%X, constants.%A.facet.552, constants.%U.8b3) { // CHECK:STDOUT: %U.loc6_8.1 => constants.%U.8b3 -// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.b3a +// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.41c +// CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.7dc // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.91f // CHECK:STDOUT: %Self => constants.%A.facet.552 // CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.a0c // CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%Y // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.765 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.340 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%Z) { // CHECK:STDOUT: %U.loc16_8.1 => constants.%Z -// CHECK:STDOUT: %U.patt.loc16_8.2 => constants.%U.patt.e01 +// CHECK:STDOUT: %U.patt.loc16_8.2 => constants.%U.patt.250 +// CHECK:STDOUT: %pattern_type.loc16_18 => constants.%pattern_type.8f9 // CHECK:STDOUT: %tuple.type.loc16 => constants.%tuple.type.f6b +// CHECK:STDOUT: %pattern_type.loc16_24 => constants.%pattern_type.ef1 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc16_24 => constants.%complete_type.a64 @@ -479,25 +500,27 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%T.9c2) { // CHECK:STDOUT: %T.loc25_16.2 => constants.%T.9c2 -// CHECK:STDOUT: %T.patt.loc25_16.2 => constants.%T.patt.e81 +// CHECK:STDOUT: %T.patt.loc25_16.2 => constants.%T.patt.33a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%X, constants.%A.facet.11f, constants.%Z) { // CHECK:STDOUT: %U.loc6_8.1 => constants.%Z -// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.b3a +// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.41c +// CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.8f9 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.91f // CHECK:STDOUT: %Self => constants.%A.facet.11f // CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.a0c // CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%T.as_type // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.e28 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.f25 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%X, @CallGeneric.%A.facet, constants.%Z) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%A.facet.552) { // CHECK:STDOUT: %T.loc25_16.2 => constants.%A.facet.552 -// CHECK:STDOUT: %T.patt.loc25_16.2 => constants.%T.patt.e81 +// CHECK:STDOUT: %T.patt.loc25_16.2 => constants.%T.patt.33a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc26_4.2 => constants.%Y @@ -512,30 +535,35 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%X, constants.%A.facet.552, constants.%Z) { // CHECK:STDOUT: %U.loc6_8.1 => constants.%Z -// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.b3a +// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.41c +// CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.8f9 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.91f // CHECK:STDOUT: %Self => constants.%A.facet.552 // CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.a0c // CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%Y // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.f6b +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.ef1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- generic_method_more_params.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %A.type.495: type = generic_interface_type @A [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %A.generic: %A.type.495 = struct_value () [concrete] // CHECK:STDOUT: %A.type.75a: type = facet_type <@A, @A(%T.8b3)> [symbolic] // CHECK:STDOUT: %Self.753: %A.type.75a = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %U.2cb: type = bind_symbolic_name U, 2 [symbolic] -// CHECK:STDOUT: %U.patt.b3a: type = symbolic_binding_pattern U, 2 [symbolic] +// CHECK:STDOUT: %U.patt.41c: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic] +// CHECK:STDOUT: %pattern_type.20f: type = pattern_type %U.2cb [symbolic] // CHECK:STDOUT: %tuple.type.e59: type = tuple_type (type, %A.type.75a, type) [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.753 [symbolic] // CHECK:STDOUT: %tuple.type.bd2: type = tuple_type (%T.8b3, %Self.as_type, %U.2cb) [symbolic] +// CHECK:STDOUT: %pattern_type.44c: type = pattern_type %tuple.type.bd2 [symbolic] // CHECK:STDOUT: %F.type.17a: type = fn_type @F.1, @A(%T.8b3) [symbolic] // CHECK:STDOUT: %F.0d8: %F.type.17a = struct_value () [symbolic] // CHECK:STDOUT: %A.assoc_type.ed3: type = assoc_entity_type @A, @A(%T.8b3) [symbolic] @@ -547,11 +575,11 @@ fn CallIndirect() { // CHECK:STDOUT: %Y2: type = class_type @Y2 [concrete] // CHECK:STDOUT: %Z: type = class_type @Z [concrete] // CHECK:STDOUT: %V1: type = bind_symbolic_name V1, 0 [symbolic] -// CHECK:STDOUT: %V1.patt: type = symbolic_binding_pattern V1, 0 [symbolic] +// CHECK:STDOUT: %V1.patt: %pattern_type.98f = symbolic_binding_pattern V1, 0 [symbolic] // CHECK:STDOUT: %V2: type = bind_symbolic_name V2, 1 [symbolic] -// CHECK:STDOUT: %V2.patt: type = symbolic_binding_pattern V2, 1 [symbolic] +// CHECK:STDOUT: %V2.patt: %pattern_type.98f = symbolic_binding_pattern V2, 1 [symbolic] // CHECK:STDOUT: %W: type = bind_symbolic_name W, 2 [symbolic] -// CHECK:STDOUT: %W.patt: type = symbolic_binding_pattern W, 2 [symbolic] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 2 [symbolic] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.30b: type = tuple_type (%V1, %V2) [symbolic] // CHECK:STDOUT: %A.type.f21: type = facet_type <@A, @A(%W)> [symbolic] @@ -563,9 +591,11 @@ fn CallIndirect() { // CHECK:STDOUT: %require_complete.796: = require_complete_type %A.type.f21 [symbolic] // CHECK:STDOUT: %A.impl_witness.f15: = impl_witness file.%A.impl_witness_table, @impl(%V1, %V2, %W) [symbolic] // CHECK:STDOUT: %U.753: type = bind_symbolic_name U, 3 [symbolic] -// CHECK:STDOUT: %U.patt.cfd: type = symbolic_binding_pattern U, 3 [symbolic] +// CHECK:STDOUT: %U.patt.ceb: %pattern_type.98f = symbolic_binding_pattern U, 3 [symbolic] +// CHECK:STDOUT: %pattern_type.549: type = pattern_type %U.753 [symbolic] // CHECK:STDOUT: %tuple.type.11f: type = tuple_type (type, %tuple.type.24b, type) [concrete] // CHECK:STDOUT: %tuple.type.8ae: type = tuple_type (%W, %tuple.type.30b, %U.753) [symbolic] +// CHECK:STDOUT: %pattern_type.d4a: type = pattern_type %tuple.type.8ae [symbolic] // CHECK:STDOUT: %F.type.b3e: type = fn_type @F.2, @impl(%V1, %V2, %W) [symbolic] // CHECK:STDOUT: %F.d79: %F.type.b3e = struct_value () [symbolic] // CHECK:STDOUT: %A.facet.461: %A.type.f21 = facet_value %tuple.type.30b, (%A.impl_witness.f15) [symbolic] @@ -592,11 +622,14 @@ fn CallIndirect() { // CHECK:STDOUT: %F.93b: %F.type.bf7 = struct_value () [concrete] // CHECK:STDOUT: %A.facet.414: %A.type.91f = facet_value %tuple.type.a46, (%A.impl_witness.8ac) [concrete] // CHECK:STDOUT: %.406: type = fn_type_with_self_type %F.type.13d, %A.facet.414 [concrete] +// CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %Z [concrete] // CHECK:STDOUT: %tuple.type.415: type = tuple_type (%X, %tuple.type.a46, %Z) [concrete] +// CHECK:STDOUT: %pattern_type.0b2: type = pattern_type %tuple.type.415 [concrete] // CHECK:STDOUT: %F.specific_fn.79b: = specific_function %F.93b, @F.2(%Y1, %Y2, %X, %Z) [concrete] // CHECK:STDOUT: %Z.val: %Z = struct_value () [concrete] // CHECK:STDOUT: %T.9c2: %A.type.91f = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e81: %A.type.91f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.817: type = pattern_type %A.type.91f [concrete] +// CHECK:STDOUT: %T.patt.33a: %pattern_type.817 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %CallGeneric.type: type = fn_type @CallGeneric [concrete] // CHECK:STDOUT: %CallGeneric: %CallGeneric.type = struct_value () [concrete] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T.9c2 [symbolic] @@ -606,6 +639,7 @@ fn CallIndirect() { // CHECK:STDOUT: %impl.elem0: %.ffa = impl_witness_access %A.lookup_impl_witness, element0 [symbolic] // CHECK:STDOUT: %tuple.type.a0c: type = tuple_type (type, %A.type.91f, type) [concrete] // CHECK:STDOUT: %tuple.type.e28: type = tuple_type (%X, %T.as_type, %Z) [symbolic] +// CHECK:STDOUT: %pattern_type.f25: type = pattern_type %tuple.type.e28 [symbolic] // CHECK:STDOUT: %specific_impl_fn: = specific_impl_function %impl.elem0, @F.1(%X, %A.facet.11f, %Z) [symbolic] // CHECK:STDOUT: %require_complete.500: = require_complete_type %tuple.type.e28 [symbolic] // CHECK:STDOUT: %CallIndirect.type: type = fn_type @CallIndirect [concrete] @@ -635,7 +669,7 @@ fn CallIndirect() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type.495 = interface_decl @A [concrete = constants.%A.generic] { -// CHECK:STDOUT: %T.patt.loc5_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc5_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc5_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.2 (constants.%T.8b3)] // CHECK:STDOUT: } @@ -644,9 +678,9 @@ fn CallIndirect() { // CHECK:STDOUT: %Y2.decl: type = class_decl @Y2 [concrete = constants.%Y2] {} {} // CHECK:STDOUT: %Z.decl: type = class_decl @Z [concrete = constants.%Z] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %V1.patt.loc14_14.1: type = symbolic_binding_pattern V1, 0 [symbolic = %V1.patt.loc14_14.2 (constants.%V1.patt)] -// CHECK:STDOUT: %V2.patt.loc14_25.1: type = symbolic_binding_pattern V2, 1 [symbolic = %V2.patt.loc14_25.2 (constants.%V2.patt)] -// CHECK:STDOUT: %W.patt.loc14_36.1: type = symbolic_binding_pattern W, 2 [symbolic = %W.patt.loc14_36.2 (constants.%W.patt)] +// CHECK:STDOUT: %V1.patt.loc14_14.1: %pattern_type.98f = symbolic_binding_pattern V1, 0 [symbolic = %V1.patt.loc14_14.2 (constants.%V1.patt)] +// CHECK:STDOUT: %V2.patt.loc14_25.1: %pattern_type.98f = symbolic_binding_pattern V2, 1 [symbolic = %V2.patt.loc14_25.2 (constants.%V2.patt)] +// CHECK:STDOUT: %W.patt.loc14_36.1: %pattern_type.98f = symbolic_binding_pattern W, 2 [symbolic = %W.patt.loc14_36.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %V1.ref: type = name_ref V1, %V1.loc14_14.1 [symbolic = %V1.loc14_14.2 (constants.%V1)] // CHECK:STDOUT: %V2.ref: type = name_ref V2, %V2.loc14_25.1 [symbolic = %V2.loc14_25.2 (constants.%V2)] @@ -663,7 +697,7 @@ fn CallIndirect() { // CHECK:STDOUT: %A.impl_witness: = impl_witness %A.impl_witness_table, @impl(constants.%V1, constants.%V2, constants.%W) [symbolic = @impl.%A.impl_witness (constants.%A.impl_witness.f15)] // CHECK:STDOUT: %Call.decl: %Call.type = fn_decl @Call [concrete = constants.%Call] {} {} // CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [concrete = constants.%CallGeneric] { -// CHECK:STDOUT: %T.patt.loc27_16.1: %A.type.91f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_16.2 (constants.%T.patt.e81)] +// CHECK:STDOUT: %T.patt.loc27_16.1: %pattern_type.817 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_16.2 (constants.%T.patt.33a)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc27: type = splice_block %A.type [concrete = constants.%A.type.91f] { // CHECK:STDOUT: %A.ref: %A.type.495 = name_ref A, file.%A.decl [concrete = constants.%A.generic] @@ -677,7 +711,7 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @A(%T.loc5_13.1: type) { // CHECK:STDOUT: %T.loc5_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_13.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc5_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc5_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T.loc5_13.2)> [symbolic = %A.type (constants.%A.type.75a)] @@ -690,11 +724,11 @@ fn CallIndirect() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @A.%A.type (%A.type.75a) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.753)] // CHECK:STDOUT: %F.decl: @A.%F.type (%F.type.17a) = fn_decl @F.1 [symbolic = @A.%F (constants.%F.0d8)] { -// CHECK:STDOUT: %U.patt.loc6_8.1: type = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_8.2 (constants.%U.patt.b3a)] -// CHECK:STDOUT: %u.patt: @F.1.%U.loc6_8.1 (%U.2cb) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.1.%U.loc6_8.1 (%U.2cb) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%tuple.type.loc6_38.2 (%tuple.type.bd2) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%tuple.type.loc6_38.2 (%tuple.type.bd2) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %U.patt.loc6_8.1: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_8.2 (constants.%U.patt.41c)] +// CHECK:STDOUT: %u.patt: @F.1.%pattern_type.loc6_18 (%pattern_type.20f) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.1.%pattern_type.loc6_18 (%pattern_type.20f) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type.loc6_24 (%pattern_type.44c) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type.loc6_24 (%pattern_type.44c) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @A.%T.loc5_13.1 [symbolic = %T (constants.%T.8b3)] // CHECK:STDOUT: %.loc6_31: @F.1.%A.type (%A.type.75a) = specific_constant @A.%Self.1, @A(constants.%T.8b3) [symbolic = %Self (constants.%Self.753)] @@ -723,11 +757,11 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%V1.loc14_14.1: type, %V2.loc14_25.1: type, %W.loc14_36.1: type) { // CHECK:STDOUT: %V1.loc14_14.2: type = bind_symbolic_name V1, 0 [symbolic = %V1.loc14_14.2 (constants.%V1)] -// CHECK:STDOUT: %V1.patt.loc14_14.2: type = symbolic_binding_pattern V1, 0 [symbolic = %V1.patt.loc14_14.2 (constants.%V1.patt)] +// CHECK:STDOUT: %V1.patt.loc14_14.2: %pattern_type.98f = symbolic_binding_pattern V1, 0 [symbolic = %V1.patt.loc14_14.2 (constants.%V1.patt)] // CHECK:STDOUT: %V2.loc14_25.2: type = bind_symbolic_name V2, 1 [symbolic = %V2.loc14_25.2 (constants.%V2)] -// CHECK:STDOUT: %V2.patt.loc14_25.2: type = symbolic_binding_pattern V2, 1 [symbolic = %V2.patt.loc14_25.2 (constants.%V2.patt)] +// CHECK:STDOUT: %V2.patt.loc14_25.2: %pattern_type.98f = symbolic_binding_pattern V2, 1 [symbolic = %V2.patt.loc14_25.2 (constants.%V2.patt)] // CHECK:STDOUT: %W.loc14_36.2: type = bind_symbolic_name W, 2 [symbolic = %W.loc14_36.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc14_36.2: type = symbolic_binding_pattern W, 2 [symbolic = %W.patt.loc14_36.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc14_36.2: %pattern_type.98f = symbolic_binding_pattern W, 2 [symbolic = %W.patt.loc14_36.2 (constants.%W.patt)] // CHECK:STDOUT: %tuple.type: type = tuple_type (%V1.loc14_14.2, %V2.loc14_25.2) [symbolic = %tuple.type (constants.%tuple.type.30b)] // CHECK:STDOUT: %A.type.loc14_61.2: type = facet_type <@A, @A(%W.loc14_36.2)> [symbolic = %A.type.loc14_61.2 (constants.%A.type.f21)] // CHECK:STDOUT: %require_complete: = require_complete_type %A.type.loc14_61.2 [symbolic = %require_complete (constants.%require_complete.796)] @@ -739,11 +773,11 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: impl: %.loc14_53.2 as %A.type.loc14_61.1 { // CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.b3e) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.d79)] { -// CHECK:STDOUT: %U.patt.loc17_8.1: type = symbolic_binding_pattern U, 3 [symbolic = %U.patt.loc17_8.2 (constants.%U.patt.cfd)] -// CHECK:STDOUT: %u.patt: @F.2.%U.loc17_8.1 (%U.753) = binding_pattern u -// CHECK:STDOUT: %u.param_patt: @F.2.%U.loc17_8.1 (%U.753) = value_param_pattern %u.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.2.%tuple.type.loc17_42.2 (%tuple.type.8ae) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%tuple.type.loc17_42.2 (%tuple.type.8ae) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %U.patt.loc17_8.1: %pattern_type.98f = symbolic_binding_pattern U, 3 [symbolic = %U.patt.loc17_8.2 (constants.%U.patt.ceb)] +// CHECK:STDOUT: %u.patt: @F.2.%pattern_type.loc17_18 (%pattern_type.549) = binding_pattern u +// CHECK:STDOUT: %u.param_patt: @F.2.%pattern_type.loc17_18 (%pattern_type.549) = value_param_pattern %u.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type.loc17_24 (%pattern_type.d4a) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type.loc17_24 (%pattern_type.d4a) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %W.ref: type = name_ref W, @impl.%W.loc14_36.1 [symbolic = %W (constants.%W)] // CHECK:STDOUT: %V1.ref: type = name_ref V1, @impl.%V1.loc14_14.1 [symbolic = %V1 (constants.%V1)] @@ -808,25 +842,29 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.1(@A.%T.loc5_13.1: type, @A.%Self.1: @A.%A.type (%A.type.75a), %U.loc6_8.2: type) { // CHECK:STDOUT: %U.loc6_8.1: type = bind_symbolic_name U, 2 [symbolic = %U.loc6_8.1 (constants.%U.2cb)] -// CHECK:STDOUT: %U.patt.loc6_8.2: type = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_8.2 (constants.%U.patt.b3a)] +// CHECK:STDOUT: %U.patt.loc6_8.2: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc6_8.2 (constants.%U.patt.41c)] +// CHECK:STDOUT: %pattern_type.loc6_18: type = pattern_type %U.loc6_8.1 [symbolic = %pattern_type.loc6_18 (constants.%pattern_type.20f)] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T.8b3)] // CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T)> [symbolic = %A.type (constants.%A.type.75a)] // CHECK:STDOUT: %Self: @F.1.%A.type (%A.type.75a) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.753)] // CHECK:STDOUT: %tuple.type.loc6_38.1: type = tuple_type (type, %A.type, type) [symbolic = %tuple.type.loc6_38.1 (constants.%tuple.type.e59)] // CHECK:STDOUT: %Self.as_type.loc6_38.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_38.1 (constants.%Self.as_type)] // CHECK:STDOUT: %tuple.type.loc6_38.2: type = tuple_type (%T, %Self.as_type.loc6_38.1, %U.loc6_8.1) [symbolic = %tuple.type.loc6_38.2 (constants.%tuple.type.bd2)] +// CHECK:STDOUT: %pattern_type.loc6_24: type = pattern_type %tuple.type.loc6_38.2 [symbolic = %pattern_type.loc6_24 (constants.%pattern_type.44c)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%u.param: @F.1.%U.loc6_8.1 (%U.2cb)) -> @F.1.%tuple.type.loc6_38.2 (%tuple.type.bd2); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(@impl.%V1.loc14_14.1: type, @impl.%V2.loc14_25.1: type, @impl.%W.loc14_36.1: type, %U.loc17_8.2: type) { // CHECK:STDOUT: %U.loc17_8.1: type = bind_symbolic_name U, 3 [symbolic = %U.loc17_8.1 (constants.%U.753)] -// CHECK:STDOUT: %U.patt.loc17_8.2: type = symbolic_binding_pattern U, 3 [symbolic = %U.patt.loc17_8.2 (constants.%U.patt.cfd)] +// CHECK:STDOUT: %U.patt.loc17_8.2: %pattern_type.98f = symbolic_binding_pattern U, 3 [symbolic = %U.patt.loc17_8.2 (constants.%U.patt.ceb)] +// CHECK:STDOUT: %pattern_type.loc17_18: type = pattern_type %U.loc17_8.1 [symbolic = %pattern_type.loc17_18 (constants.%pattern_type.549)] // CHECK:STDOUT: %W: type = bind_symbolic_name W, 2 [symbolic = %W (constants.%W)] // CHECK:STDOUT: %V1: type = bind_symbolic_name V1, 0 [symbolic = %V1 (constants.%V1)] // CHECK:STDOUT: %V2: type = bind_symbolic_name V2, 1 [symbolic = %V2 (constants.%V2)] // CHECK:STDOUT: %tuple.type.loc17_42.1: type = tuple_type (%V1, %V2) [symbolic = %tuple.type.loc17_42.1 (constants.%tuple.type.30b)] // CHECK:STDOUT: %tuple.type.loc17_42.2: type = tuple_type (%W, %tuple.type.loc17_42.1, %U.loc17_8.1) [symbolic = %tuple.type.loc17_42.2 (constants.%tuple.type.8ae)] +// CHECK:STDOUT: %pattern_type.loc17_24: type = pattern_type %tuple.type.loc17_42.2 [symbolic = %pattern_type.loc17_24 (constants.%pattern_type.d4a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17_24: = require_complete_type %tuple.type.loc17_42.2 [symbolic = %require_complete.loc17_24 (constants.%require_complete.d4d)] @@ -907,7 +945,7 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @CallGeneric(%T.loc27_16.1: %A.type.91f) { // CHECK:STDOUT: %T.loc27_16.2: %A.type.91f = bind_symbolic_name T, 0 [symbolic = %T.loc27_16.2 (constants.%T.9c2)] -// CHECK:STDOUT: %T.patt.loc27_16.2: %A.type.91f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_16.2 (constants.%T.patt.e81)] +// CHECK:STDOUT: %T.patt.loc27_16.2: %pattern_type.817 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_16.2 (constants.%T.patt.33a)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc28_4.2: type = facet_access_type %T.loc27_16.2 [symbolic = %T.as_type.loc28_4.2 (constants.%T.as_type)] @@ -958,18 +996,20 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%T.8b3) { // CHECK:STDOUT: %T.loc5_13.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%T.8b3, constants.%Self.753, constants.%U.2cb) { // CHECK:STDOUT: %U.loc6_8.1 => constants.%U.2cb -// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.b3a +// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.41c +// CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.20f // CHECK:STDOUT: %T => constants.%T.8b3 // CHECK:STDOUT: %A.type => constants.%A.type.75a // CHECK:STDOUT: %Self => constants.%Self.753 // CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.e59 // CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%Self.as_type // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.bd2 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.44c // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @A(@F.1.%T) {} @@ -978,7 +1018,7 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%W) { // CHECK:STDOUT: %T.loc5_13.2 => constants.%W -// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %A.type => constants.%A.type.f21 @@ -1012,12 +1052,14 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%V1, constants.%V2, constants.%W, constants.%U.753) { // CHECK:STDOUT: %U.loc17_8.1 => constants.%U.753 -// CHECK:STDOUT: %U.patt.loc17_8.2 => constants.%U.patt.cfd +// CHECK:STDOUT: %U.patt.loc17_8.2 => constants.%U.patt.ceb +// CHECK:STDOUT: %pattern_type.loc17_18 => constants.%pattern_type.549 // CHECK:STDOUT: %W => constants.%W // CHECK:STDOUT: %V1 => constants.%V1 // CHECK:STDOUT: %V2 => constants.%V2 // CHECK:STDOUT: %tuple.type.loc17_42.1 => constants.%tuple.type.30b // CHECK:STDOUT: %tuple.type.loc17_42.2 => constants.%tuple.type.8ae +// CHECK:STDOUT: %pattern_type.loc17_24 => constants.%pattern_type.d4a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17_24 => constants.%require_complete.d4d @@ -1033,13 +1075,15 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%W, constants.%A.facet.461, constants.%U.753) { // CHECK:STDOUT: %U.loc6_8.1 => constants.%U.753 -// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.b3a +// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.41c +// CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.549 // CHECK:STDOUT: %T => constants.%W // CHECK:STDOUT: %A.type => constants.%A.type.f21 // CHECK:STDOUT: %Self => constants.%A.facet.461 // CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.136 // CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%tuple.type.30b // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.8ae +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.d4a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @impl(@F.2.%V1, @F.2.%V2, @F.2.%W) {} @@ -1048,7 +1092,7 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @A(constants.%X) { // CHECK:STDOUT: %T.loc5_13.2 => constants.%X -// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc5_13.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %A.type => constants.%A.type.91f @@ -1078,12 +1122,14 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.2(constants.%Y1, constants.%Y2, constants.%X, constants.%Z) { // CHECK:STDOUT: %U.loc17_8.1 => constants.%Z -// CHECK:STDOUT: %U.patt.loc17_8.2 => constants.%U.patt.cfd +// CHECK:STDOUT: %U.patt.loc17_8.2 => constants.%U.patt.ceb +// CHECK:STDOUT: %pattern_type.loc17_18 => constants.%pattern_type.8f9 // CHECK:STDOUT: %W => constants.%X // CHECK:STDOUT: %V1 => constants.%Y1 // CHECK:STDOUT: %V2 => constants.%Y2 // CHECK:STDOUT: %tuple.type.loc17_42.1 => constants.%tuple.type.a46 // CHECK:STDOUT: %tuple.type.loc17_42.2 => constants.%tuple.type.415 +// CHECK:STDOUT: %pattern_type.loc17_24 => constants.%pattern_type.0b2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc17_24 => constants.%complete_type.aa8 @@ -1099,25 +1145,27 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%T.9c2) { // CHECK:STDOUT: %T.loc27_16.2 => constants.%T.9c2 -// CHECK:STDOUT: %T.patt.loc27_16.2 => constants.%T.patt.e81 +// CHECK:STDOUT: %T.patt.loc27_16.2 => constants.%T.patt.33a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%X, constants.%A.facet.11f, constants.%Z) { // CHECK:STDOUT: %U.loc6_8.1 => constants.%Z -// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.b3a +// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.41c +// CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.8f9 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.91f // CHECK:STDOUT: %Self => constants.%A.facet.11f // CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.a0c // CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%T.as_type // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.e28 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.f25 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%X, @CallGeneric.%A.facet, constants.%Z) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @CallGeneric(constants.%A.facet.414) { // CHECK:STDOUT: %T.loc27_16.2 => constants.%A.facet.414 -// CHECK:STDOUT: %T.patt.loc27_16.2 => constants.%T.patt.e81 +// CHECK:STDOUT: %T.patt.loc27_16.2 => constants.%T.patt.33a // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc28_4.2 => constants.%tuple.type.a46 @@ -1132,13 +1180,15 @@ fn CallIndirect() { // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%X, constants.%A.facet.414, constants.%Z) { // CHECK:STDOUT: %U.loc6_8.1 => constants.%Z -// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.b3a +// CHECK:STDOUT: %U.patt.loc6_8.2 => constants.%U.patt.41c +// CHECK:STDOUT: %pattern_type.loc6_18 => constants.%pattern_type.8f9 // CHECK:STDOUT: %T => constants.%X // CHECK:STDOUT: %A.type => constants.%A.type.91f // CHECK:STDOUT: %Self => constants.%A.facet.414 // CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.a0c // CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%tuple.type.a46 // CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.415 +// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.0b2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- include_files/destroy.carbon diff --git a/toolchain/check/testdata/interface/no_prelude/as_type.carbon b/toolchain/check/testdata/interface/no_prelude/as_type.carbon index 0a5d29e61bd9..de397f0a8efb 100644 --- a/toolchain/check/testdata/interface/no_prelude/as_type.carbon +++ b/toolchain/check/testdata/interface/no_prelude/as_type.carbon @@ -17,6 +17,7 @@ fn F(e: Empty) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete] // CHECK:STDOUT: %Self: %Empty.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Empty.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -28,8 +29,8 @@ fn F(e: Empty) {} // CHECK:STDOUT: } // CHECK:STDOUT: %Empty.decl: type = interface_decl @Empty [concrete = constants.%Empty.type] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %e.patt: %Empty.type = binding_pattern e -// CHECK:STDOUT: %e.param_patt: %Empty.type = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %e.patt: %pattern_type = binding_pattern e +// CHECK:STDOUT: %e.param_patt: %pattern_type = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %Empty.type = value_param call_param0 // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.type] diff --git a/toolchain/check/testdata/interface/no_prelude/assoc_const_in_generic.carbon b/toolchain/check/testdata/interface/no_prelude/assoc_const_in_generic.carbon index 2667bd1ac98e..811f501ac196 100644 --- a/toolchain/check/testdata/interface/no_prelude/assoc_const_in_generic.carbon +++ b/toolchain/check/testdata/interface/no_prelude/assoc_const_in_generic.carbon @@ -27,14 +27,16 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.325: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self.209: %I.type.325 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 2 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 2 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic] +// CHECK:STDOUT: %pattern_type.20f: type = pattern_type %U [symbolic] // CHECK:STDOUT: %F.type.2ae: type = fn_type @F, @I(%T) [symbolic] // CHECK:STDOUT: %F.bb2: %F.type.2ae = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type.1e5: type = assoc_entity_type @I, @I(%T) [symbolic] @@ -64,12 +66,12 @@ fn H() { // CHECK:STDOUT: .H = %H.decl // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt.loc11_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt.loc15_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_6.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc15_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_6.2 (constants.%T)] // CHECK:STDOUT: } @@ -78,7 +80,7 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc11_13.1: type) { // CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc11_13.2)> [symbolic = %I.type (constants.%I.type.325)] @@ -91,9 +93,9 @@ fn H() { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.209)] // CHECK:STDOUT: %F.decl: @I.%F.type (%F.type.2ae) = fn_decl @F [symbolic = @I.%F (constants.%F.bb2)] { -// CHECK:STDOUT: %U.patt.loc12_8.1: type = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc12_8.2 (constants.%U.patt)] -// CHECK:STDOUT: %return.patt: @F.%U.loc12_8.1 (%U) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%U.loc12_8.1 (%U) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %U.patt.loc12_8.1: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc12_8.2 (constants.%U.patt)] +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.20f) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.20f) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc12_8.2 [symbolic = %U.loc12_8.1 (constants.%U)] // CHECK:STDOUT: %U.loc12_8.2: type = bind_symbolic_name U, 2 [symbolic = %U.loc12_8.1 (constants.%U)] @@ -111,14 +113,15 @@ fn H() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(@I.%T.loc11_13.1: type, @I.%Self.1: @I.%I.type (%I.type.325), %U.loc12_8.2: type) { // CHECK:STDOUT: %U.loc12_8.1: type = bind_symbolic_name U, 2 [symbolic = %U.loc12_8.1 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc12_8.2: type = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc12_8.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc12_8.2: %pattern_type.98f = symbolic_binding_pattern U, 2 [symbolic = %U.patt.loc12_8.2 (constants.%U.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %U.loc12_8.1 [symbolic = %pattern_type (constants.%pattern_type.20f)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @F.%U.loc12_8.1 (%U); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc15_6.1: type) { // CHECK:STDOUT: %T.loc15_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc15_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc15_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type.loc19_6.2: type = facet_type <@I, @I(%T.loc15_6.2)> [symbolic = %I.type.loc19_6.2 (constants.%I.type.325)] @@ -164,6 +167,7 @@ fn H() { // CHECK:STDOUT: specific @F(constants.%T, constants.%Self.209, constants.%U) { // CHECK:STDOUT: %U.loc12_8.1 => constants.%U // CHECK:STDOUT: %U.patt.loc12_8.2 => constants.%U.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.20f // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(%T.loc11_13.2) {} diff --git a/toolchain/check/testdata/interface/no_prelude/export_name.carbon b/toolchain/check/testdata/interface/no_prelude/export_name.carbon index a93220b520a9..25f3dfed1788 100644 --- a/toolchain/check/testdata/interface/no_prelude/export_name.carbon +++ b/toolchain/check/testdata/interface/no_prelude/export_name.carbon @@ -89,6 +89,7 @@ fn UseEmpty(i: I) {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %I.type [concrete] // CHECK:STDOUT: %UseEmpty.type: type = fn_type @UseEmpty [concrete] // CHECK:STDOUT: %UseEmpty: %UseEmpty.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -105,8 +106,8 @@ fn UseEmpty(i: I) {} // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %UseEmpty.decl: %UseEmpty.type = fn_decl @UseEmpty [concrete = constants.%UseEmpty] { -// CHECK:STDOUT: %i.patt: %I.type = binding_pattern i -// CHECK:STDOUT: %i.param_patt: %I.type = value_param_pattern %i.patt, call_param0 +// CHECK:STDOUT: %i.patt: %pattern_type = binding_pattern i +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern %i.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: %I.type = value_param call_param0 // CHECK:STDOUT: %I.ref: type = name_ref I, imports.%Main.I [concrete = constants.%I.type] diff --git a/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_alias.carbon b/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_alias.carbon index 5a3f4bbeb9b7..a80b98bfed06 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_alias.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_alias.carbon @@ -86,12 +86,15 @@ interface C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] -// CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %Dest.patt: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.96f: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.96f = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] // CHECK:STDOUT: %Self: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert: %Convert.type = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -103,7 +106,7 @@ interface C { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %Dest.patt.loc3_22.1: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.1: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.loc3_22.1: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] // CHECK:STDOUT: } @@ -111,7 +114,7 @@ interface C { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%Dest.loc3_22.1: type) { // CHECK:STDOUT: %Dest.loc3_22.2: type = bind_symbolic_name Dest, 0 [symbolic = %Dest.loc3_22.2 (constants.%Dest)] -// CHECK:STDOUT: %Dest.patt.loc3_22.2: type = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] +// CHECK:STDOUT: %Dest.patt.loc3_22.2: %pattern_type.98f = symbolic_binding_pattern Dest, 0 [symbolic = %Dest.patt.loc3_22.2 (constants.%Dest.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc3_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -124,10 +127,10 @@ interface C { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type) = fn_decl @Convert [symbolic = @ImplicitAs.%Convert (constants.%Convert)] { -// CHECK:STDOUT: %self.patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.%Dest (%Dest) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.%Dest (%Dest) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.%pattern_type.loc4_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc3_22.1 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param call_param0 @@ -156,6 +159,8 @@ interface C { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc4_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.as_type.loc4_20.1 [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc4_28: type = pattern_type %Dest [symbolic = %pattern_type.loc4_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.%Self.as_type.loc4_20.1 (%Self.as_type)) -> @Convert.%Dest (%Dest); // CHECK:STDOUT: } @@ -170,6 +175,8 @@ interface C { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc4_20.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.%Dest) {} @@ -264,7 +271,8 @@ interface C { // CHECK:STDOUT: %assoc0.25f: %I2.assoc_type = assoc_entity element0, @I2.%T2 [concrete] // CHECK:STDOUT: %J2.type: type = facet_type <@J2> [concrete] // CHECK:STDOUT: %V: %J2.type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %J2.type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.f47: type = pattern_type %J2.type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.f47 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic] // CHECK:STDOUT: %.Self: %I2.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self] @@ -280,6 +288,7 @@ interface C { // CHECK:STDOUT: %I2.lookup_impl_witness.487: = lookup_impl_witness %Self.541, @I2 [symbolic] // CHECK:STDOUT: %I2.facet.758: %I2.type = facet_value %Self.as_type, (%I2.lookup_impl_witness.487) [symbolic] // CHECK:STDOUT: %impl.elem0.7c7: type = impl_witness_access %I2.lookup_impl_witness.487, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.f9d: type = pattern_type %impl.elem0.7c7 [symbolic] // CHECK:STDOUT: %F2.type: type = fn_type @F2 [concrete] // CHECK:STDOUT: %F2: %F2.type = struct_value () [concrete] // CHECK:STDOUT: %J2.assoc_type: type = assoc_entity_type @J2 [concrete] @@ -302,7 +311,7 @@ interface C { // CHECK:STDOUT: %I2.decl: type = interface_decl @I2 [concrete = constants.%I2.type] {} {} // CHECK:STDOUT: %J2.decl.loc9: type = interface_decl @J2 [concrete = constants.%J2.type] {} {} // CHECK:STDOUT: impl_decl @impl [concrete] { -// CHECK:STDOUT: %V.patt.loc11_14.1: %J2.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc11_14.1: %pattern_type.f47 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %V.ref: %J2.type = name_ref V, %V.loc11_14.1 [symbolic = %V.loc11_14.2 (constants.%V)] // CHECK:STDOUT: %V.as_type.loc11_22.1: type = facet_access_type %V.ref [symbolic = %V.as_type.loc11_22.2 (constants.%V.as_type)] @@ -346,8 +355,8 @@ interface C { // CHECK:STDOUT: %T2.ref: %I2.assoc_type = name_ref T2, @T2.%assoc0 [concrete = constants.%assoc0.25f] // CHECK:STDOUT: %U2: %I2.assoc_type = bind_alias U2, @T2.%assoc0 [concrete = constants.%assoc0.25f] // CHECK:STDOUT: %F2.decl: %F2.type = fn_decl @F2 [concrete = constants.%F2] { -// CHECK:STDOUT: %return.patt: @F2.%impl.elem0.loc15_14.1 (%impl.elem0.7c7) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F2.%impl.elem0.loc15_14.1 (%impl.elem0.7c7) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F2.%pattern_type (%pattern_type.f9d) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F2.%pattern_type (%pattern_type.f9d) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.as_type.loc15_14.2: type = facet_access_type constants.%Self.541 [symbolic = %Self.as_type.loc15_14.1 (constants.%Self.as_type)] // CHECK:STDOUT: %.loc15_14.1: type = converted constants.%Self.541, %Self.as_type.loc15_14.2 [symbolic = %Self.as_type.loc15_14.1 (constants.%Self.as_type)] @@ -379,7 +388,7 @@ interface C { // CHECK:STDOUT: // CHECK:STDOUT: generic impl @impl(%V.loc11_14.1: %J2.type) { // CHECK:STDOUT: %V.loc11_14.2: %J2.type = bind_symbolic_name V, 0 [symbolic = %V.loc11_14.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc11_14.2: %J2.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc11_14.2: %pattern_type.f47 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc11_14.2 (constants.%V.patt)] // CHECK:STDOUT: %V.as_type.loc11_22.2: type = facet_access_type %V.loc11_14.2 [symbolic = %V.as_type.loc11_22.2 (constants.%V.as_type)] // CHECK:STDOUT: %I2.impl_witness: = impl_witness file.%I2.impl_witness_table, @impl(%V.loc11_14.2) [symbolic = %I2.impl_witness (constants.%I2.impl_witness.2ab13d.1)] // CHECK:STDOUT: @@ -397,6 +406,7 @@ interface C { // CHECK:STDOUT: %I2.lookup_impl_witness: = lookup_impl_witness %Self, @I2 [symbolic = %I2.lookup_impl_witness (constants.%I2.lookup_impl_witness.487)] // CHECK:STDOUT: %I2.facet.loc15_14.1: %I2.type = facet_value %Self.as_type.loc15_14.1, (%I2.lookup_impl_witness) [symbolic = %I2.facet.loc15_14.1 (constants.%I2.facet.758)] // CHECK:STDOUT: %impl.elem0.loc15_14.1: type = impl_witness_access %I2.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc15_14.1 (constants.%impl.elem0.7c7)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc15_14.1 [symbolic = %pattern_type (constants.%pattern_type.f9d)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @F2.%impl.elem0.loc15_14.1 (%impl.elem0.7c7); // CHECK:STDOUT: } @@ -431,6 +441,7 @@ interface C { // CHECK:STDOUT: %I2.lookup_impl_witness => constants.%I2.lookup_impl_witness.487 // CHECK:STDOUT: %I2.facet.loc15_14.1 => constants.%I2.facet.758 // CHECK:STDOUT: %impl.elem0.loc15_14.1 => constants.%impl.elem0.7c7 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f9d // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_call_method_alias.carbon @@ -439,6 +450,8 @@ interface C { // CHECK:STDOUT: %A.type: type = facet_type <@A> [concrete] // CHECK:STDOUT: %Self.31d: %A.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.31d [symbolic] +// CHECK:STDOUT: %pattern_type.f98: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %A.assoc_type: type = assoc_entity_type @A [concrete] @@ -471,10 +484,10 @@ interface C { // CHECK:STDOUT: interface @A { // CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.31d] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc6_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc6_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type.f98) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type.f98) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%Self.as_type.loc6_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc6_14.1: type = splice_block %.loc6_14.2 [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type)] { @@ -520,6 +533,7 @@ interface C { // CHECK:STDOUT: generic fn @F(@A.%Self: %A.type) { // CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.31d)] // CHECK:STDOUT: %Self.as_type.loc6_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc6_14.1 [symbolic = %pattern_type (constants.%pattern_type.f98)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc6_14.1 (%Self.as_type)) -> type; // CHECK:STDOUT: } @@ -531,6 +545,7 @@ interface C { // CHECK:STDOUT: specific @F(constants.%Self.31d) { // CHECK:STDOUT: %Self => constants.%Self.31d // CHECK:STDOUT: %Self.as_type.loc6_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f98 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%Self.783) {} @@ -541,6 +556,7 @@ interface C { // CHECK:STDOUT: %C.type: type = facet_type <@C> [concrete] // CHECK:STDOUT: %Self: %C.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -575,8 +591,8 @@ interface C { // CHECK:STDOUT: interface @C { // CHECK:STDOUT: %Self: %C.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc6_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc6_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%Self.as_type.loc6_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc6_14.1: type = splice_block %.loc6_14.2 [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type)] { @@ -588,8 +604,8 @@ interface C { // CHECK:STDOUT: } // CHECK:STDOUT: %assoc0: %C.assoc_type = assoc_entity element0, %F.decl [concrete = constants.%assoc0] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %self.patt: @G.%Self.as_type.loc8_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.%Self.as_type.loc8_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @G.%pattern_type (%pattern_type) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @G.%Self.as_type.loc8_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc8_14.1: type = splice_block %.loc8_14.2 [symbolic = %Self.as_type.loc8_14.1 (constants.%Self.as_type)] { @@ -611,6 +627,7 @@ interface C { // CHECK:STDOUT: generic fn @F(@C.%Self: %C.type) { // CHECK:STDOUT: %Self: %C.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc6_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc6_14.1 [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc6_14.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -618,6 +635,7 @@ interface C { // CHECK:STDOUT: generic fn @G(@C.%Self: %C.type) { // CHECK:STDOUT: %Self: %C.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc8_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc8_14.1 [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc8_14.1 [symbolic = %require_complete (constants.%require_complete)] @@ -652,16 +670,19 @@ interface C { // CHECK:STDOUT: specific @F(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc6_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc8_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%C.facet) { // CHECK:STDOUT: %Self => constants.%C.facet // CHECK:STDOUT: %Self.as_type.loc6_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(@G.%C.facet) {} diff --git a/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_binding.carbon b/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_binding.carbon index f06d4d2f2088..99ede372a2aa 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_binding.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_binding.carbon @@ -13,7 +13,7 @@ library "[[@TEST_NAME]]"; interface I { - // CHECK:STDERR: fail_tuple_pattern.carbon:[[@LINE+4]]:7: error: pattern in associated constant declaration must be a single `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] + // CHECK:STDERR: fail_tuple_pattern.carbon:[[@LINE+4]]:7: error: found tuple pattern in associated constant declaration; expected symbolic binding pattern [ExpectedSingleBindingInAssociatedConstant] // CHECK:STDERR: let (T:! type, U:! type); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: @@ -25,7 +25,7 @@ interface I { library "[[@TEST_NAME]]"; interface I { - // CHECK:STDERR: fail_tuple_pattern_with_default.carbon:[[@LINE+4]]:15: error: pattern in associated constant declaration must be a single `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] + // CHECK:STDERR: fail_tuple_pattern_with_default.carbon:[[@LINE+4]]:15: error: found tuple pattern in associated constant declaration; expected symbolic binding pattern [ExpectedSingleBindingInAssociatedConstant] // CHECK:STDERR: default let (T:! type, U:! type) = ({}, {}); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: diff --git a/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_constant.carbon b/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_constant.carbon index 3a9ab24ee186..01d871a91bed 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_constant.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_constant.carbon @@ -11,9 +11,9 @@ // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_constant.carbon interface I { - // CHECK:STDERR: fail_assoc_const_not_constant.carbon:[[@LINE+4]]:7: error: pattern in associated constant declaration must be a single `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] + // CHECK:STDERR: fail_assoc_const_not_constant.carbon:[[@LINE+4]]:7: error: found runtime binding pattern in associated constant declaration; expected a `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] // CHECK:STDERR: let a: {.b: ()}; - // CHECK:STDERR: ^ + // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: let a: {.b: ()}; } diff --git a/toolchain/check/testdata/interface/no_prelude/fail_assoc_fn_invalid_use.carbon b/toolchain/check/testdata/interface/no_prelude/fail_assoc_fn_invalid_use.carbon index 595b2ff1bcaf..5632d73b0615 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_assoc_fn_invalid_use.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_assoc_fn_invalid_use.carbon @@ -30,12 +30,14 @@ fn Use(T:! I) { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.6de: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%F.decl [concrete] // CHECK:STDOUT: %T: %I.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %I.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete] // CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete] // CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic] @@ -53,7 +55,7 @@ fn Use(T:! I) { // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] { -// CHECK:STDOUT: %T.patt.loc8_8.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_8.1: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: %T.loc8_8.1: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] @@ -63,8 +65,8 @@ fn Use(T:! I) { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc5_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type.6de) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type.6de) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] { @@ -85,13 +87,14 @@ fn Use(T:! I) { // CHECK:STDOUT: generic fn @F(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.6de)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc5_14.1 (%Self.as_type)); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Use(%T.loc8_8.1: %I.type) { // CHECK:STDOUT: %T.loc8_8.2: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_8.2: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_8.2: %pattern_type.2b5 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T.as_type.loc13_4.2: type = facet_access_type %T.loc8_8.2 [symbolic = %T.as_type.loc13_4.2 (constants.%T.as_type)] @@ -115,6 +118,7 @@ fn Use(T:! I) { // CHECK:STDOUT: specific @F(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6de // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Use(constants.%T) { diff --git a/toolchain/check/testdata/interface/no_prelude/fail_duplicate.carbon b/toolchain/check/testdata/interface/no_prelude/fail_duplicate.carbon index 85cdd207352c..2f0763167391 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_duplicate.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_duplicate.carbon @@ -124,6 +124,7 @@ interface Class { } // CHECK:STDOUT: %Interface.type.d726c6.2: type = facet_type <@Interface.2> [concrete] // CHECK:STDOUT: %Self.719cbb.2: %Interface.type.d726c6.2 = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.719cbb.2 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Interface.assoc_type: type = assoc_entity_type @Interface.2 [concrete] @@ -149,8 +150,8 @@ interface Class { } // CHECK:STDOUT: interface @Interface.2 { // CHECK:STDOUT: %Self: %Interface.type.d726c6.2 = bind_symbolic_name Self, 0 [symbolic = constants.%Self.719cbb.2] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc14_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc14_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%Self.as_type.loc14_14.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc14_14.1: type = splice_block %.loc14_14.2 [symbolic = %Self.as_type.loc14_14.1 (constants.%Self.as_type)] { @@ -171,6 +172,7 @@ interface Class { } // CHECK:STDOUT: generic fn @F(@Interface.2.%Self: %Interface.type.d726c6.2) { // CHECK:STDOUT: %Self: %Interface.type.d726c6.2 = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.719cbb.2)] // CHECK:STDOUT: %Self.as_type.loc14_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc14_14.1 [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc14_14.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -178,6 +180,7 @@ interface Class { } // CHECK:STDOUT: specific @F(constants.%Self.719cbb.2) { // CHECK:STDOUT: %Self => constants.%Self.719cbb.2 // CHECK:STDOUT: %Self.as_type.loc14_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_name_conflict_with_fn.carbon diff --git a/toolchain/check/testdata/interface/no_prelude/fail_generic_redeclaration.carbon b/toolchain/check/testdata/interface/no_prelude/fail_generic_redeclaration.carbon index 8282f353ac2f..dec91c9959c1 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_generic_redeclaration.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_generic_redeclaration.carbon @@ -29,7 +29,7 @@ interface Generic(T:! type); interface Generic {} interface DifferentParams(T:! type); -// CHECK:STDERR: fail_generic_redeclaration.carbon:[[@LINE+7]]:27: error: type `()` of parameter 1 in redeclaration differs from previous parameter type `type` [RedeclParamDiffersType] +// CHECK:STDERR: fail_generic_redeclaration.carbon:[[@LINE+7]]:27: error: type `` of parameter 1 in redeclaration differs from previous parameter type `` [RedeclParamDiffersType] // CHECK:STDERR: interface DifferentParams(T:! ()) {} // CHECK:STDERR: ^ // CHECK:STDERR: fail_generic_redeclaration.carbon:[[@LINE-4]]:27: note: previous declaration's corresponding parameter here [RedeclParamPrevious] @@ -43,7 +43,8 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: constants { // CHECK:STDOUT: %NotGeneric.type.10e: type = facet_type <@NotGeneric.1> [concrete] // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %NotGeneric.type.93b: type = generic_interface_type @NotGeneric.2 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %NotGeneric.generic: %NotGeneric.type.93b = struct_value () [concrete] @@ -56,7 +57,8 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: %DifferentParams.type.d40e5c.1: type = generic_interface_type @DifferentParams.1 [concrete] // CHECK:STDOUT: %DifferentParams.generic.d33670.1: %DifferentParams.type.d40e5c.1 = struct_value () [concrete] // CHECK:STDOUT: %T.7a6: %empty_tuple.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e60: %empty_tuple.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: %T.patt.c75: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %DifferentParams.type.d40e5c.2: type = generic_interface_type @DifferentParams.2 [concrete] // CHECK:STDOUT: %DifferentParams.generic.d33670.2: %DifferentParams.type.d40e5c.2 = struct_value () [concrete] // CHECK:STDOUT: %DifferentParams.type.12c: type = facet_type <@DifferentParams.2, @DifferentParams.2(%T.7a6)> [symbolic] @@ -71,23 +73,23 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: } // CHECK:STDOUT: %NotGeneric.decl.loc11: type = interface_decl @NotGeneric.1 [concrete = constants.%NotGeneric.type.10e] {} {} // CHECK:STDOUT: %NotGeneric.decl.loc19: %NotGeneric.type.93b = interface_decl @NotGeneric.2 [concrete = constants.%NotGeneric.generic] { -// CHECK:STDOUT: %T.patt.loc19_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_22.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc19_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_22.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc19_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc19_22.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl.loc21: %Generic.type.c21 = interface_decl @Generic.1 [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt.loc21_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_19.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc21_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_19.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc21_19.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_19.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl.loc29: type = interface_decl @Generic.2 [concrete = constants.%Generic.type.c99] {} {} // CHECK:STDOUT: %DifferentParams.decl.loc31: %DifferentParams.type.d40e5c.1 = interface_decl @DifferentParams.1 [concrete = constants.%DifferentParams.generic.d33670.1] { -// CHECK:STDOUT: %T.patt.loc31_27.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_27.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc31_27.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_27.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc31_27.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc31_27.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %DifferentParams.decl.loc39: %DifferentParams.type.d40e5c.2 = interface_decl @DifferentParams.2 [concrete = constants.%DifferentParams.generic.d33670.2] { -// CHECK:STDOUT: %T.patt.loc39_27.1: %empty_tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc39_27.2 (constants.%T.patt.e60)] +// CHECK:STDOUT: %T.patt.loc39_27.1: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc39_27.2 (constants.%T.patt.c75)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc39_32.1: type = splice_block %.loc39_32.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc39_32.2: %empty_tuple.type = tuple_literal () @@ -101,7 +103,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @NotGeneric.2(%T.loc19_22.1: type) { // CHECK:STDOUT: %T.loc19_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc19_22.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc19_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_22.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc19_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_22.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %NotGeneric.type: type = facet_type <@NotGeneric.2, @NotGeneric.2(%T.loc19_22.2)> [symbolic = %NotGeneric.type (constants.%NotGeneric.type.8cb)] @@ -118,7 +120,7 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic.1(%T.loc21_19.1: type) { // CHECK:STDOUT: %T.loc21_19.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc21_19.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc21_19.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_19.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc21_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_19.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } @@ -133,14 +135,14 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @DifferentParams.1(%T.loc31_27.1: type) { // CHECK:STDOUT: %T.loc31_27.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc31_27.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc31_27.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_27.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc31_27.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc31_27.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @DifferentParams.2(%T.loc39_27.1: %empty_tuple.type) { // CHECK:STDOUT: %T.loc39_27.2: %empty_tuple.type = bind_symbolic_name T, 0 [symbolic = %T.loc39_27.2 (constants.%T.7a6)] -// CHECK:STDOUT: %T.patt.loc39_27.2: %empty_tuple.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc39_27.2 (constants.%T.patt.e60)] +// CHECK:STDOUT: %T.patt.loc39_27.2: %pattern_type.cb1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc39_27.2 (constants.%T.patt.c75)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %DifferentParams.type: type = facet_type <@DifferentParams.2, @DifferentParams.2(%T.loc39_27.2)> [symbolic = %DifferentParams.type (constants.%DifferentParams.type.12c)] @@ -157,24 +159,24 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @NotGeneric.2(constants.%T.8b3) { // CHECK:STDOUT: %T.loc19_22.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc19_22.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc19_22.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @NotGeneric.2(%T.loc19_22.2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic.1(constants.%T.8b3) { // CHECK:STDOUT: %T.loc21_19.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc21_19.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc21_19.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DifferentParams.1(constants.%T.8b3) { // CHECK:STDOUT: %T.loc31_27.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc31_27.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc31_27.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DifferentParams.2(constants.%T.7a6) { // CHECK:STDOUT: %T.loc39_27.2 => constants.%T.7a6 -// CHECK:STDOUT: %T.patt.loc39_27.2 => constants.%T.patt.e60 +// CHECK:STDOUT: %T.patt.loc39_27.2 => constants.%T.patt.c75 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @DifferentParams.2(%T.loc39_27.2) {} diff --git a/toolchain/check/testdata/interface/no_prelude/fail_modifiers.carbon b/toolchain/check/testdata/interface/no_prelude/fail_modifiers.carbon index cf97a4dd15aa..208a283ac474 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_modifiers.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_modifiers.carbon @@ -154,6 +154,7 @@ interface I { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -170,8 +171,8 @@ interface I { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc9_22.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc9_22.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%Self.as_type.loc9_22.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc9_22.1: type = splice_block %.loc9_22.2 [symbolic = %Self.as_type.loc9_22.1 (constants.%Self.as_type)] { @@ -192,6 +193,7 @@ interface I { // CHECK:STDOUT: generic fn @F(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc9_22.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_22.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc9_22.1 [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc9_22.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -199,6 +201,7 @@ interface I { // CHECK:STDOUT: specific @F(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc9_22.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_protected_member.carbon @@ -207,6 +210,7 @@ interface I { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -223,8 +227,8 @@ interface I { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc9_24.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc9_24.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @F.%Self.as_type.loc9_24.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc9_24.1: type = splice_block %.loc9_24.2 [symbolic = %Self.as_type.loc9_24.1 (constants.%Self.as_type)] { @@ -245,6 +249,7 @@ interface I { // CHECK:STDOUT: generic fn @F(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc9_24.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_24.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc9_24.1 [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc9_24.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -252,5 +257,6 @@ interface I { // CHECK:STDOUT: specific @F(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc9_24.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/no_prelude/fail_todo_generic_default_fn.carbon b/toolchain/check/testdata/interface/no_prelude/fail_todo_generic_default_fn.carbon index f9195379853d..b0f6624f9572 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_todo_generic_default_fn.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_todo_generic_default_fn.carbon @@ -26,12 +26,14 @@ fn I(T:! type).F[self: Self]() -> Self { return self; } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %I.type.dac: type = generic_interface_type @I [concrete] // CHECK:STDOUT: %I.generic: %I.type.dac = struct_value () [concrete] // CHECK:STDOUT: %I.type.325: type = facet_type <@I, @I(%T)> [symbolic] // CHECK:STDOUT: %Self: %I.type.325 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.4be: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type.2aef59.1: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.bb2dd4.1: %F.type.2aef59.1 = struct_value () [symbolic] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I, @I(%T) [symbolic] @@ -46,15 +48,15 @@ fn I(T:! type).F[self: Self]() -> Self { return self; } // CHECK:STDOUT: .I = %I.decl // CHECK:STDOUT: } // CHECK:STDOUT: %I.decl: %I.type.dac = interface_decl @I [concrete = constants.%I.generic] { -// CHECK:STDOUT: %T.patt.loc11_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc11_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type.2aef59.2 = fn_decl @F.2 [symbolic = constants.%F.bb2dd4.2] { -// CHECK:STDOUT: %self.patt: @F.2.%Self.as_type.loc23_24.2 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.2.%Self.as_type.loc23_24.2 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.2.%Self.as_type.loc23_24.2 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.2.%Self.as_type.loc23_24.2 (%Self.as_type) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.2.%pattern_type (%pattern_type.4be) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.2.%pattern_type (%pattern_type.4be) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.2.%pattern_type (%pattern_type.4be) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.2.%pattern_type (%pattern_type.4be) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc23_6: type = bind_symbolic_name T, 0 [symbolic = @I.%T.loc11_13.2 (constants.%T)] // CHECK:STDOUT: %.loc23_35.1: @F.2.%I.type (%I.type.325) = specific_constant @I.%Self.1, @I(constants.%T) [symbolic = %Self (constants.%Self)] @@ -76,7 +78,7 @@ fn I(T:! type).F[self: Self]() -> Self { return self; } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @I(%T.loc11_13.1: type) { // CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc11_13.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc11_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc11_13.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_13.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc11_13.2)> [symbolic = %I.type (constants.%I.type.325)] @@ -89,10 +91,10 @@ fn I(T:! type).F[self: Self]() -> Self { return self; } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %F.decl: @I.%F.type (%F.type.2aef59.1) = fn_decl @F.1 [symbolic = @I.%F (constants.%F.bb2dd4.1)] { -// CHECK:STDOUT: %self.patt: @F.1.%Self.as_type.loc13_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.1.%Self.as_type.loc13_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.1.%Self.as_type.loc13_14.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.1.%Self.as_type.loc13_14.1 (%Self.as_type) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.1.%pattern_type (%pattern_type.4be) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.1.%pattern_type (%pattern_type.4be) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.1.%pattern_type (%pattern_type.4be) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.1.%pattern_type (%pattern_type.4be) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_25.1: @F.1.%I.type (%I.type.325) = specific_constant @I.%Self.1, @I(constants.%T) [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.ref.loc13_25: @F.1.%I.type (%I.type.325) = name_ref Self, %.loc13_25.1 [symbolic = %Self (constants.%Self)] @@ -123,6 +125,7 @@ fn I(T:! type).F[self: Self]() -> Self { return self; } // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.325)] // CHECK:STDOUT: %Self: @F.1.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc13_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc13_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc13_14.1 [symbolic = %pattern_type (constants.%pattern_type.4be)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.1.%Self.as_type.loc13_14.1 (%Self.as_type)) -> @F.1.%Self.as_type.loc13_14.1 (%Self.as_type); // CHECK:STDOUT: } @@ -132,6 +135,7 @@ fn I(T:! type).F[self: Self]() -> Self { return self; } // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc23_24)> [symbolic = %I.type (constants.%I.type.325)] // CHECK:STDOUT: %Self: @F.2.%I.type (%I.type.325) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc23_24.2: type = facet_access_type %Self [symbolic = %Self.as_type.loc23_24.2 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc23_24.2 [symbolic = %pattern_type (constants.%pattern_type.4be)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Self.as_type.loc23_24.2 [symbolic = %require_complete (constants.%require_complete)] @@ -161,6 +165,7 @@ fn I(T:! type).F[self: Self]() -> Self { return self; } // CHECK:STDOUT: %I.type => constants.%I.type.325 // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc13_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4be // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(@F.1.%T) {} @@ -172,6 +177,7 @@ fn I(T:! type).F[self: Self]() -> Self { return self; } // CHECK:STDOUT: %I.type => constants.%I.type.325 // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc23_24.2 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4be // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(@F.2.%T.loc23_24) {} diff --git a/toolchain/check/testdata/interface/no_prelude/generic.carbon b/toolchain/check/testdata/interface/no_prelude/generic.carbon index 2208593a9b2c..5022df2898ba 100644 --- a/toolchain/check/testdata/interface/no_prelude/generic.carbon +++ b/toolchain/check/testdata/interface/no_prelude/generic.carbon @@ -62,7 +62,8 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Simple.type.3b3: type = generic_interface_type @Simple [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Simple.generic: %Simple.type.3b3 = struct_value () [concrete] @@ -75,6 +76,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: %WithAssocFn.generic: %WithAssocFn.type.509 = struct_value () [concrete] // CHECK:STDOUT: %WithAssocFn.type.ce6: type = facet_type <@WithAssocFn, @WithAssocFn(%T.8b3)> [symbolic] // CHECK:STDOUT: %Self.088: %WithAssocFn.type.ce6 = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %F.type.1af: type = fn_type @F.1, @WithAssocFn(%T.8b3) [symbolic] // CHECK:STDOUT: %F.b7d: %F.type.1af = struct_value () [symbolic] // CHECK:STDOUT: %WithAssocFn.assoc_type.b2f: type = assoc_entity_type @WithAssocFn, @WithAssocFn(%T.8b3) [symbolic] @@ -95,11 +97,13 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: %WithAssocFn.facet: %WithAssocFn.type.683 = facet_value %C, (%WithAssocFn.impl_witness) [concrete] // CHECK:STDOUT: %X.val: %X = struct_value () [concrete] // CHECK:STDOUT: %N: %T.8b3 = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt: %T.8b3 = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T.8b3 [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.7dc = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %WithImplicitArgs.type: type = generic_interface_type @WithImplicitArgs [concrete] // CHECK:STDOUT: %WithImplicitArgs.generic: %WithImplicitArgs.type = struct_value () [concrete] // CHECK:STDOUT: %T.692: %Simple.type.51f = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.6ae: %Simple.type.51f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.353: type = pattern_type %Simple.type.51f [concrete] +// CHECK:STDOUT: %T.patt.2d5: %pattern_type.353 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Receive.type: type = fn_type @Receive [concrete] // CHECK:STDOUT: %Receive: %Receive.type = struct_value () [concrete] // CHECK:STDOUT: %Pass.type: type = fn_type @Pass [concrete] @@ -118,27 +122,27 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: .Pass = %Pass.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Simple.decl: %Simple.type.3b3 = interface_decl @Simple [concrete = constants.%Simple.generic] { -// CHECK:STDOUT: %T.patt.loc4_18.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_18.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_18.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_18.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %WithAssocFn.decl: %WithAssocFn.type.509 = interface_decl @WithAssocFn [concrete = constants.%WithAssocFn.generic] { -// CHECK:STDOUT: %T.patt.loc8_23.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_23.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc8_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_23.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_23.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_23.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %WithImplicitArgs.decl: %WithImplicitArgs.type = interface_decl @WithImplicitArgs [concrete = constants.%WithImplicitArgs.generic] { -// CHECK:STDOUT: %T.patt.loc22_28.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_28.2 (constants.%T.patt.e01)] -// CHECK:STDOUT: %N.patt.loc22_38.1: @WithImplicitArgs.%T.loc22_28.2 (%T.8b3) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc22_38.2 (constants.%N.patt)] +// CHECK:STDOUT: %T.patt.loc22_28.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_28.2 (constants.%T.patt.250)] +// CHECK:STDOUT: %N.patt.loc22_38.1: @WithImplicitArgs.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc22_38.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc22_28.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc22_28.2 (constants.%T.8b3)] // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc22_28.1 [symbolic = %T.loc22_28.2 (constants.%T.8b3)] // CHECK:STDOUT: %N.loc22_38.1: @WithImplicitArgs.%T.loc22_28.2 (%T.8b3) = bind_symbolic_name N, 1 [symbolic = %N.loc22_38.2 (constants.%N)] // CHECK:STDOUT: } // CHECK:STDOUT: %Receive.decl: %Receive.type = fn_decl @Receive [concrete = constants.%Receive] { -// CHECK:STDOUT: %T.patt.loc24_12.1: %Simple.type.51f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_12.2 (constants.%T.patt.6ae)] +// CHECK:STDOUT: %T.patt.loc24_12.1: %pattern_type.353 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_12.2 (constants.%T.patt.2d5)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc24: type = splice_block %Simple.type [concrete = constants.%Simple.type.51f] { // CHECK:STDOUT: %Simple.ref: %Simple.type.3b3 = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.generic] @@ -148,7 +152,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: %T.loc24_12.1: %Simple.type.51f = bind_symbolic_name T, 0 [symbolic = %T.loc24_12.2 (constants.%T.692)] // CHECK:STDOUT: } // CHECK:STDOUT: %Pass.decl: %Pass.type = fn_decl @Pass [concrete = constants.%Pass] { -// CHECK:STDOUT: %T.patt.loc25_9.1: %Simple.type.51f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_9.2 (constants.%T.patt.6ae)] +// CHECK:STDOUT: %T.patt.loc25_9.1: %pattern_type.353 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_9.2 (constants.%T.patt.2d5)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc25: type = splice_block %Simple.type [concrete = constants.%Simple.type.51f] { // CHECK:STDOUT: %Simple.ref: %Simple.type.3b3 = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.generic] @@ -161,7 +165,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Simple(%T.loc4_18.1: type) { // CHECK:STDOUT: %T.loc4_18.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_18.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc4_18.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_18.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(%T.loc4_18.2)> [symbolic = %Simple.type (constants.%Simple.type.d08)] @@ -178,7 +182,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @WithAssocFn(%T.loc8_23.1: type) { // CHECK:STDOUT: %T.loc8_23.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_23.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc8_23.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_23.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc8_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_23.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %WithAssocFn.type: type = facet_type <@WithAssocFn, @WithAssocFn(%T.loc8_23.2)> [symbolic = %WithAssocFn.type (constants.%WithAssocFn.type.ce6)] @@ -191,8 +195,8 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @WithAssocFn.%WithAssocFn.type (%WithAssocFn.type.ce6) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.088)] // CHECK:STDOUT: %F.decl: @WithAssocFn.%F.type (%F.type.1af) = fn_decl @F.1 [symbolic = @WithAssocFn.%F (constants.%F.b7d)] { -// CHECK:STDOUT: %return.patt: %X = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %X = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.019 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.019 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %return.param: ref %X = out_param call_param0 @@ -210,9 +214,10 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @WithImplicitArgs(%T.loc22_28.1: type, %N.loc22_38.1: @WithImplicitArgs.%T.loc22_28.2 (%T.8b3)) { // CHECK:STDOUT: %T.loc22_28.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc22_28.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc22_28.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_28.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc22_28.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc22_28.2 (constants.%T.patt.250)] // CHECK:STDOUT: %N.loc22_38.2: @WithImplicitArgs.%T.loc22_28.2 (%T.8b3) = bind_symbolic_name N, 1 [symbolic = %N.loc22_38.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc22_38.2: @WithImplicitArgs.%T.loc22_28.2 (%T.8b3) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc22_38.2 (constants.%N.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc22_28.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %N.patt.loc22_38.2: @WithImplicitArgs.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc22_38.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } @@ -224,8 +229,8 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.90b: %Self.ref as %WithAssocFn.type { // CHECK:STDOUT: %F.decl: %F.type.005 = fn_decl @F.2 [concrete = constants.%F.317] { -// CHECK:STDOUT: %return.patt: %X = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %X = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.019 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.019 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %return.param: ref %X = out_param call_param0 @@ -290,7 +295,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Receive(%T.loc24_12.1: %Simple.type.51f) { // CHECK:STDOUT: %T.loc24_12.2: %Simple.type.51f = bind_symbolic_name T, 0 [symbolic = %T.loc24_12.2 (constants.%T.692)] -// CHECK:STDOUT: %T.patt.loc24_12.2: %Simple.type.51f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_12.2 (constants.%T.patt.6ae)] +// CHECK:STDOUT: %T.patt.loc24_12.2: %pattern_type.353 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc24_12.2 (constants.%T.patt.2d5)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -302,7 +307,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Pass(%T.loc25_9.1: %Simple.type.51f) { // CHECK:STDOUT: %T.loc25_9.2: %Simple.type.51f = bind_symbolic_name T, 0 [symbolic = %T.loc25_9.2 (constants.%T.692)] -// CHECK:STDOUT: %T.patt.loc25_9.2: %Simple.type.51f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_9.2 (constants.%T.patt.6ae)] +// CHECK:STDOUT: %T.patt.loc25_9.2: %pattern_type.353 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc25_9.2 (constants.%T.patt.2d5)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Receive.specific_fn.loc26_3.2: = specific_function constants.%Receive, @Receive(%T.loc25_9.2) [symbolic = %Receive.specific_fn.loc26_3.2 (constants.%Receive.specific_fn)] @@ -319,14 +324,14 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple(constants.%T.8b3) { // CHECK:STDOUT: %T.loc4_18.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple(%T.loc4_18.2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @WithAssocFn(constants.%T.8b3) { // CHECK:STDOUT: %T.loc8_23.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc8_23.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc8_23.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F.1(constants.%T.8b3, constants.%Self.088) {} @@ -335,7 +340,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Simple(constants.%C) { // CHECK:STDOUT: %T.loc4_18.2 => constants.%C -// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_18.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Simple.type => constants.%Simple.type.51f @@ -344,7 +349,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: specific @WithAssocFn(constants.%C) { // CHECK:STDOUT: %T.loc8_23.2 => constants.%C -// CHECK:STDOUT: %T.patt.loc8_23.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc8_23.2 => constants.%T.patt.250 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %WithAssocFn.type => constants.%WithAssocFn.type.683 @@ -359,21 +364,22 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: specific @WithImplicitArgs(constants.%T.8b3, constants.%N) { // CHECK:STDOUT: %T.loc22_28.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc22_28.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc22_28.2 => constants.%T.patt.250 // CHECK:STDOUT: %N.loc22_38.2 => constants.%N +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: %N.patt.loc22_38.2 => constants.%N.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Receive(constants.%T.692) { // CHECK:STDOUT: %T.loc24_12.2 => constants.%T.692 -// CHECK:STDOUT: %T.patt.loc24_12.2 => constants.%T.patt.6ae +// CHECK:STDOUT: %T.patt.loc24_12.2 => constants.%T.patt.2d5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Pass(constants.%T.692) { // CHECK:STDOUT: %T.loc25_9.2 => constants.%T.692 -// CHECK:STDOUT: %T.patt.loc25_9.2 => constants.%T.patt.6ae +// CHECK:STDOUT: %T.patt.loc25_9.2 => constants.%T.patt.2d5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Receive(@Pass.%T.loc25_9.2) {} @@ -382,7 +388,8 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T.8b3: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.e01: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt.250: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Generic.type.c21: type = generic_interface_type @Generic [concrete] // CHECK:STDOUT: %Generic.generic: %Generic.type.c21 = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.91c: type = facet_type <@Generic, @Generic(%T.8b3)> [symbolic] @@ -393,12 +400,14 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: %B: type = class_type @B [concrete] // CHECK:STDOUT: %Generic.type.c7c: type = facet_type <@Generic, @Generic(%A)> [concrete] // CHECK:STDOUT: %T.a53: %Generic.type.c7c = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.3e0: %Generic.type.c7c = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.6ea: type = pattern_type %Generic.type.c7c [concrete] +// CHECK:STDOUT: %T.patt.649: %pattern_type.6ea = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Generic.type.4ce: type = facet_type <@Generic, @Generic(%B)> [concrete] // CHECK:STDOUT: %T.bae: %Generic.type.4ce = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt.53a: %Generic.type.4ce = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.f4a: type = pattern_type %Generic.type.4ce [concrete] +// CHECK:STDOUT: %T.patt.832: %pattern_type.f4a = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -412,14 +421,14 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Generic.decl: %Generic.type.c21 = interface_decl @Generic [concrete = constants.%Generic.generic] { -// CHECK:STDOUT: %T.patt.loc4_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_19.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt.250)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_19.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_19.2 (constants.%T.8b3)] // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc9_6.1: %Generic.type.c7c = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.3e0)] +// CHECK:STDOUT: %T.patt.loc9_6.1: %pattern_type.6ea = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.649)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9: type = splice_block %Generic.type [concrete = constants.%Generic.type.c7c] { // CHECK:STDOUT: %Generic.ref: %Generic.type.c21 = name_ref Generic, file.%Generic.decl [concrete = constants.%Generic.generic] @@ -429,7 +438,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: %T.loc9_6.1: %Generic.type.c7c = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T.a53)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt.loc10_6.1: %Generic.type.4ce = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_6.2 (constants.%T.patt.53a)] +// CHECK:STDOUT: %T.patt.loc10_6.1: %pattern_type.f4a = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_6.2 (constants.%T.patt.832)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10: type = splice_block %Generic.type [concrete = constants.%Generic.type.4ce] { // CHECK:STDOUT: %Generic.ref: %Generic.type.c21 = name_ref Generic, file.%Generic.decl [concrete = constants.%Generic.generic] @@ -442,7 +451,7 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Generic(%T.loc4_19.1: type) { // CHECK:STDOUT: %T.loc4_19.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_19.2 (constants.%T.8b3)] -// CHECK:STDOUT: %T.patt.loc4_19.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt.e01)] +// CHECK:STDOUT: %T.patt.loc4_19.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt.250)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%T.loc4_19.2)> [symbolic = %Generic.type (constants.%Generic.type.91c)] @@ -477,14 +486,14 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc9_6.1: %Generic.type.c7c) { // CHECK:STDOUT: %T.loc9_6.2: %Generic.type.c7c = bind_symbolic_name T, 0 [symbolic = %T.loc9_6.2 (constants.%T.a53)] -// CHECK:STDOUT: %T.patt.loc9_6.2: %Generic.type.c7c = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.3e0)] +// CHECK:STDOUT: %T.patt.loc9_6.2: %pattern_type.6ea = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc9_6.2 (constants.%T.patt.649)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%T.loc10_6.1: %Generic.type.4ce) { // CHECK:STDOUT: %T.loc10_6.2: %Generic.type.4ce = bind_symbolic_name T, 0 [symbolic = %T.loc10_6.2 (constants.%T.bae)] -// CHECK:STDOUT: %T.patt.loc10_6.2: %Generic.type.4ce = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_6.2 (constants.%T.patt.53a)] +// CHECK:STDOUT: %T.patt.loc10_6.2: %pattern_type.f4a = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_6.2 (constants.%T.patt.832)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -498,28 +507,28 @@ fn G(T:! Generic(B)) { // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%T.8b3) { // CHECK:STDOUT: %T.loc4_19.2 => constants.%T.8b3 -// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(%T.loc4_19.2) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%A) { // CHECK:STDOUT: %T.loc4_19.2 => constants.%A -// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @F(constants.%T.a53) { // CHECK:STDOUT: %T.loc9_6.2 => constants.%T.a53 -// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.3e0 +// CHECK:STDOUT: %T.patt.loc9_6.2 => constants.%T.patt.649 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Generic(constants.%B) { // CHECK:STDOUT: %T.loc4_19.2 => constants.%B -// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt.e01 +// CHECK:STDOUT: %T.patt.loc4_19.2 => constants.%T.patt.250 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G(constants.%T.bae) { // CHECK:STDOUT: %T.loc10_6.2 => constants.%T.bae -// CHECK:STDOUT: %T.patt.loc10_6.2 => constants.%T.patt.53a +// CHECK:STDOUT: %T.patt.loc10_6.2 => constants.%T.patt.832 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/no_prelude/generic_binding_after_assoc_const.carbon b/toolchain/check/testdata/interface/no_prelude/generic_binding_after_assoc_const.carbon index a62f3a39be39..daaec4bc1d1c 100644 --- a/toolchain/check/testdata/interface/no_prelude/generic_binding_after_assoc_const.carbon +++ b/toolchain/check/testdata/interface/no_prelude/generic_binding_after_assoc_const.carbon @@ -22,7 +22,8 @@ interface I { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 1 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 1 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] @@ -43,7 +44,7 @@ interface I { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %T.patt.loc12_8.1: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc12_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_8.1: %pattern_type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc12_8.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc12_8.2: type = bind_symbolic_name T, 1 [symbolic = %T.loc12_8.1 (constants.%T)] // CHECK:STDOUT: } @@ -52,7 +53,7 @@ interface I { // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.%U [concrete = constants.%assoc1] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %T.patt.loc16_8.1: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc16_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_8.1: %pattern_type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc16_8.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc16_8.2: type = bind_symbolic_name T, 1 [symbolic = %T.loc16_8.1 (constants.%T)] // CHECK:STDOUT: } @@ -72,14 +73,14 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(@I.%Self: %I.type, %T.loc12_8.2: type) { // CHECK:STDOUT: %T.loc12_8.1: type = bind_symbolic_name T, 1 [symbolic = %T.loc12_8.1 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc12_8.2: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc12_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc12_8.2: %pattern_type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc12_8.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(@I.%Self: %I.type, %T.loc16_8.2: type) { // CHECK:STDOUT: %T.loc16_8.1: type = bind_symbolic_name T, 1 [symbolic = %T.loc16_8.1 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc16_8.2: type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc16_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc16_8.2: %pattern_type = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc16_8.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interface/no_prelude/generic_import.carbon b/toolchain/check/testdata/interface/no_prelude/generic_import.carbon index b249c07b57da..600c1acad5f0 100644 --- a/toolchain/check/testdata/interface/no_prelude/generic_import.carbon +++ b/toolchain/check/testdata/interface/no_prelude/generic_import.carbon @@ -31,7 +31,8 @@ impl C as AddWith(C) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %AddWith.type.b35: type = generic_interface_type @AddWith [concrete] // CHECK:STDOUT: %AddWith.generic: %AddWith.type.b35 = struct_value () [concrete] // CHECK:STDOUT: %AddWith.type.bc7: type = facet_type <@AddWith, @AddWith(%T)> [symbolic] @@ -47,7 +48,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: .AddWith = %AddWith.decl // CHECK:STDOUT: } // CHECK:STDOUT: %AddWith.decl: %AddWith.type.b35 = interface_decl @AddWith [concrete = constants.%AddWith.generic] { -// CHECK:STDOUT: %T.patt.loc4_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_19.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_19.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_19.2 (constants.%T)] // CHECK:STDOUT: } @@ -55,7 +56,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @AddWith(%T.loc4_19.1: type) { // CHECK:STDOUT: %T.loc4_19.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_19.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_19.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_19.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T.loc4_19.2)> [symbolic = %AddWith.type (constants.%AddWith.type.bc7)] @@ -101,7 +102,8 @@ impl C as AddWith(C) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %AddWith.type.bc7: type = facet_type <@AddWith, @AddWith(%T)> [symbolic] // CHECK:STDOUT: %Self.deb: %AddWith.type.bc7 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type.fbc: type = fn_type @F.1, @AddWith(%T) [symbolic] // CHECK:STDOUT: %F.be3: %F.type.fbc = struct_value () [symbolic] // CHECK:STDOUT: %AddWith.assoc_type.36e: type = assoc_entity_type @AddWith, @AddWith(%T) [symbolic] @@ -121,11 +123,11 @@ impl C as AddWith(C) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Main.AddWith: %AddWith.type.b35 = import_ref Main//a, AddWith, loaded [concrete = constants.%AddWith.generic] // CHECK:STDOUT: %Main.import_ref.5ab3ec.1: type = import_ref Main//a, loc4_19, loaded [symbolic = @AddWith.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.476 = import_ref Main//a, inst26 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.476 = import_ref Main//a, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.c77 = import_ref Main//a, loc5_9, unloaded // CHECK:STDOUT: %Main.F: @AddWith.%F.type (%F.type.fbc) = import_ref Main//a, F, loaded [symbolic = @AddWith.%F (constants.%F.be3)] // CHECK:STDOUT: %Main.import_ref.5ab3ec.2: type = import_ref Main//a, loc4_19, loaded [symbolic = @AddWith.%T (constants.%T)] -// CHECK:STDOUT: %Main.import_ref.5a4: @AddWith.%AddWith.type (%AddWith.type.bc7) = import_ref Main//a, inst26 [no loc], loaded [symbolic = @AddWith.%Self (constants.%Self.deb)] +// CHECK:STDOUT: %Main.import_ref.5a4: @AddWith.%AddWith.type (%AddWith.type.bc7) = import_ref Main//a, inst27 [no loc], loaded [symbolic = @AddWith.%Self (constants.%Self.deb)] // CHECK:STDOUT: %Main.import_ref.0c5 = import_ref Main//a, loc5_9, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: @@ -148,7 +150,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @AddWith(imports.%Main.import_ref.5ab3ec.1: type) [from "a.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T)> [symbolic = %AddWith.type (constants.%AddWith.type.bc7)] diff --git a/toolchain/check/testdata/interface/no_prelude/generic_vs_params.carbon b/toolchain/check/testdata/interface/no_prelude/generic_vs_params.carbon index 714221832423..1ee8ecf6922e 100644 --- a/toolchain/check/testdata/interface/no_prelude/generic_vs_params.carbon +++ b/toolchain/check/testdata/interface/no_prelude/generic_vs_params.carbon @@ -78,7 +78,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: %NotGenericButParams.type.014: type = facet_type <@NotGenericButParams> [concrete] // CHECK:STDOUT: %Self.43b: %NotGenericButParams.type.014 = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %GenericAndParams.type.cde: type = generic_interface_type @GenericAndParams.1 [concrete] // CHECK:STDOUT: %GenericAndParams.generic.827: %GenericAndParams.type.cde = struct_value () [concrete] // CHECK:STDOUT: %GenericAndParams.type.73e: type = facet_type <@GenericAndParams.1, @GenericAndParams.1(%T)> [symbolic] @@ -89,7 +90,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: %GenericNoParams.type.b79: type = facet_type <@GenericNoParams, @GenericNoParams(%T)> [symbolic] // CHECK:STDOUT: %Self.0f6: %GenericNoParams.type.b79 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 1 [symbolic] -// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 1 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 1 [symbolic] // CHECK:STDOUT: %GenericAndParams.type.597: type = generic_interface_type @GenericAndParams.2, @C(%T) [symbolic] // CHECK:STDOUT: %GenericAndParams.generic.2ec: %GenericAndParams.type.597 = struct_value () [symbolic] // CHECK:STDOUT: %GenericAndParams.type.d96: type = facet_type <@GenericAndParams.2, @GenericAndParams.2(%T, %U)> [symbolic] @@ -124,12 +125,12 @@ interface Bar[T:! type] {} // CHECK:STDOUT: %NotGenericNoParams.decl: type = interface_decl @NotGenericNoParams [concrete = constants.%NotGenericNoParams.type] {} {} // CHECK:STDOUT: %NotGenericButParams.decl: %NotGenericButParams.type.f26 = interface_decl @NotGenericButParams [concrete = constants.%NotGenericButParams.generic] {} {} // CHECK:STDOUT: %GenericAndParams.decl: %GenericAndParams.type.cde = interface_decl @GenericAndParams.1 [concrete = constants.%GenericAndParams.generic.827] { -// CHECK:STDOUT: %T.patt.loc6_28.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_28.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_28.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc6_28.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_28.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %T.patt.loc8_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_9.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_9.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_9.2 (constants.%T)] // CHECK:STDOUT: } @@ -197,7 +198,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericAndParams.1(%T.loc6_28.1: type) { // CHECK:STDOUT: %T.loc6_28.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc6_28.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc6_28.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_28.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc6_28.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc6_28.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.1, @GenericAndParams.1(%T.loc6_28.2)> [symbolic = %GenericAndParams.type (constants.%GenericAndParams.type.73e)] @@ -229,7 +230,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericAndParams.2(@C.%T.loc8_9.1: type, %U.loc10_30.1: type) { // CHECK:STDOUT: %U.loc10_30.2: type = bind_symbolic_name U, 1 [symbolic = %U.loc10_30.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc10_30.2: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_30.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc10_30.2: %pattern_type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_30.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] @@ -272,7 +273,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%T.loc8_9.1: type) { // CHECK:STDOUT: %T.loc8_9.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_9.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_9.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_9.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %GenericNoParams.type: type = facet_type <@GenericNoParams, @GenericNoParams(%T.loc8_9.2)> [symbolic = %GenericNoParams.type (constants.%GenericNoParams.type.b79)] @@ -282,7 +283,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: class { // CHECK:STDOUT: %GenericNoParams.decl: type = interface_decl @GenericNoParams [symbolic = @C.%GenericNoParams.type (constants.%GenericNoParams.type.b79)] {} {} // CHECK:STDOUT: %GenericAndParams.decl: @C.%GenericAndParams.type (%GenericAndParams.type.597) = interface_decl @GenericAndParams.2 [symbolic = @C.%GenericAndParams.generic (constants.%GenericAndParams.generic.2ec)] { -// CHECK:STDOUT: %U.patt.loc10_30.1: type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_30.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc10_30.1: %pattern_type = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc10_30.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %U.loc10_30.1: type = bind_symbolic_name U, 1 [symbolic = %U.loc10_30.2 (constants.%U)] // CHECK:STDOUT: } @@ -445,7 +446,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Bar.type.982: type = generic_interface_type @Bar [concrete] // CHECK:STDOUT: %Bar.generic: %Bar.type.982 = struct_value () [concrete] // CHECK:STDOUT: %Bar.type.7ed: type = facet_type <@Bar, @Bar(%T)> [symbolic] @@ -457,7 +459,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: .Bar = %Bar.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type.982 = interface_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %T.patt.loc8_15.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_15.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } @@ -465,7 +467,7 @@ interface Bar[T:! type] {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar(%T.loc8_15.1: type) { // CHECK:STDOUT: %T.loc8_15.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_15.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Bar.type: type = facet_type <@Bar, @Bar(%T.loc8_15.2)> [symbolic = %Bar.type (constants.%Bar.type.7ed)] diff --git a/toolchain/check/testdata/interface/no_prelude/import.carbon b/toolchain/check/testdata/interface/no_prelude/import.carbon index 22a8737ad2b8..fc82657af3a8 100644 --- a/toolchain/check/testdata/interface/no_prelude/import.carbon +++ b/toolchain/check/testdata/interface/no_prelude/import.carbon @@ -68,6 +68,7 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %F.eb5: %F.type.505 = struct_value () [concrete] // CHECK:STDOUT: %assoc1.c80: %ForwardDeclared.assoc_type = assoc_entity element1, @ForwardDeclared.%F.decl [concrete] // CHECK:STDOUT: %struct_type.f: type = struct_type {.f: %ForwardDeclared.type} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.f [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -81,8 +82,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %Basic.decl: type = interface_decl @Basic [concrete = constants.%Basic.type] {} {} // CHECK:STDOUT: %ForwardDeclared.decl: type = interface_decl @ForwardDeclared [concrete = constants.%ForwardDeclared.type] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f_ref.patt: %struct_type.f = binding_pattern f_ref -// CHECK:STDOUT: %.loc20_1: %struct_type.f = var_pattern %f_ref.patt +// CHECK:STDOUT: %f_ref.patt: %pattern_type = binding_pattern f_ref +// CHECK:STDOUT: %.loc20_1: %pattern_type = var_pattern %f_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f_ref.var: ref %struct_type.f = var f_ref // CHECK:STDOUT: %.loc20_32: type = splice_block %struct_type.f [concrete = constants.%struct_type.f] { @@ -158,12 +159,15 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete] +// CHECK:STDOUT: %pattern_type.6c3: type = pattern_type %Empty.type [concrete] // CHECK:STDOUT: %UseEmpty.type: type = fn_type @UseEmpty [concrete] // CHECK:STDOUT: %UseEmpty: %UseEmpty.type = struct_value () [concrete] // CHECK:STDOUT: %Basic.type: type = facet_type <@Basic> [concrete] +// CHECK:STDOUT: %pattern_type.d8e: type = pattern_type %Basic.type [concrete] // CHECK:STDOUT: %UseBasic.type: type = fn_type @UseBasic [concrete] // CHECK:STDOUT: %UseBasic: %UseBasic.type = struct_value () [concrete] // CHECK:STDOUT: %ForwardDeclared.type: type = facet_type <@ForwardDeclared> [concrete] +// CHECK:STDOUT: %pattern_type.fe1: type = pattern_type %ForwardDeclared.type [concrete] // CHECK:STDOUT: %UseForwardDeclared.type: type = fn_type @UseForwardDeclared [concrete] // CHECK:STDOUT: %UseForwardDeclared: %UseForwardDeclared.type = struct_value () [concrete] // CHECK:STDOUT: %Basic.assoc_type: type = assoc_entity_type @Basic [concrete] @@ -173,6 +177,7 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %assoc0.d40: %ForwardDeclared.assoc_type = assoc_entity element0, imports.%Main.import_ref.69a [concrete] // CHECK:STDOUT: %assoc1.e3d: %ForwardDeclared.assoc_type = assoc_entity element1, imports.%Main.import_ref.1cc [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %ForwardDeclared.type [concrete] +// CHECK:STDOUT: %pattern_type.97e: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %struct_type.f: type = struct_type {.f: %ForwardDeclared.type} [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -211,24 +216,24 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %UseEmpty.decl: %UseEmpty.type = fn_decl @UseEmpty [concrete = constants.%UseEmpty] { -// CHECK:STDOUT: %e.patt: %Empty.type = binding_pattern e -// CHECK:STDOUT: %e.param_patt: %Empty.type = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %e.patt: %pattern_type.6c3 = binding_pattern e +// CHECK:STDOUT: %e.param_patt: %pattern_type.6c3 = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %Empty.type = value_param call_param0 // CHECK:STDOUT: %Empty.ref: type = name_ref Empty, imports.%Main.Empty [concrete = constants.%Empty.type] // CHECK:STDOUT: %e: %Empty.type = bind_name e, %e.param // CHECK:STDOUT: } // CHECK:STDOUT: %UseBasic.decl: %UseBasic.type = fn_decl @UseBasic [concrete = constants.%UseBasic] { -// CHECK:STDOUT: %e.patt: %Basic.type = binding_pattern e -// CHECK:STDOUT: %e.param_patt: %Basic.type = value_param_pattern %e.patt, call_param0 +// CHECK:STDOUT: %e.patt: %pattern_type.d8e = binding_pattern e +// CHECK:STDOUT: %e.param_patt: %pattern_type.d8e = value_param_pattern %e.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %e.param: %Basic.type = value_param call_param0 // CHECK:STDOUT: %Basic.ref: type = name_ref Basic, imports.%Main.Basic [concrete = constants.%Basic.type] // CHECK:STDOUT: %e: %Basic.type = bind_name e, %e.param // CHECK:STDOUT: } // CHECK:STDOUT: %UseForwardDeclared.decl: %UseForwardDeclared.type = fn_decl @UseForwardDeclared [concrete = constants.%UseForwardDeclared] { -// CHECK:STDOUT: %f.patt: %ForwardDeclared.type = binding_pattern f -// CHECK:STDOUT: %f.param_patt: %ForwardDeclared.type = value_param_pattern %f.patt, call_param0 +// CHECK:STDOUT: %f.patt: %pattern_type.fe1 = binding_pattern f +// CHECK:STDOUT: %f.param_patt: %pattern_type.fe1 = value_param_pattern %f.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %f.param: %ForwardDeclared.type = value_param call_param0 // CHECK:STDOUT: %ForwardDeclared.ref: type = name_ref ForwardDeclared, imports.%Main.ForwardDeclared [concrete = constants.%ForwardDeclared.type] @@ -247,8 +252,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: %F.ref.loc14: %ForwardDeclared.assoc_type = name_ref F, imports.%Main.import_ref.339 [concrete = constants.%assoc1.e3d] // CHECK:STDOUT: %UseForwardDeclaredF: %ForwardDeclared.assoc_type = bind_alias UseForwardDeclaredF, imports.%Main.import_ref.339 [concrete = constants.%assoc1.e3d] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %ptr = binding_pattern f -// CHECK:STDOUT: %.loc16_1: %ptr = var_pattern %f.patt +// CHECK:STDOUT: %f.patt: %pattern_type.97e = binding_pattern f +// CHECK:STDOUT: %.loc16_1: %pattern_type.97e = var_pattern %f.patt // CHECK:STDOUT: } // CHECK:STDOUT: %f.var: ref %ptr = var f // CHECK:STDOUT: %.loc16_23: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/interface/no_prelude/import_access.carbon b/toolchain/check/testdata/interface/no_prelude/import_access.carbon index 313889a51eab..341593a2cedf 100644 --- a/toolchain/check/testdata/interface/no_prelude/import_access.carbon +++ b/toolchain/check/testdata/interface/no_prelude/import_access.carbon @@ -203,6 +203,7 @@ private interface Redecl {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Def.type: type = facet_type <@Def> [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Def.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -220,8 +221,8 @@ private interface Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.patt: %Def.type = binding_pattern i -// CHECK:STDOUT: %i.param_patt: %Def.type = value_param_pattern %i.patt, call_param0 +// CHECK:STDOUT: %i.patt: %pattern_type = binding_pattern i +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern %i.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: %Def.type = value_param call_param0 // CHECK:STDOUT: %Def.ref: type = name_ref Def, imports.%Test.Def [concrete = constants.%Def.type] @@ -310,6 +311,7 @@ private interface Redecl {} // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %ForwardWithDef.type: type = facet_type <@ForwardWithDef> [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ForwardWithDef.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -327,8 +329,8 @@ private interface Redecl {} // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %i.patt: %ForwardWithDef.type = binding_pattern i -// CHECK:STDOUT: %i.param_patt: %ForwardWithDef.type = value_param_pattern %i.patt, call_param0 +// CHECK:STDOUT: %i.patt: %pattern_type = binding_pattern i +// CHECK:STDOUT: %i.param_patt: %pattern_type = value_param_pattern %i.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %i.param: %ForwardWithDef.type = value_param call_param0 // CHECK:STDOUT: %ForwardWithDef.ref: type = name_ref ForwardWithDef, imports.%Test.ForwardWithDef [concrete = constants.%ForwardWithDef.type] diff --git a/toolchain/check/testdata/interface/no_prelude/local.carbon b/toolchain/check/testdata/interface/no_prelude/local.carbon index d44e0ef776db..a6c9b0569fd9 100644 --- a/toolchain/check/testdata/interface/no_prelude/local.carbon +++ b/toolchain/check/testdata/interface/no_prelude/local.carbon @@ -27,11 +27,13 @@ fn F() { // CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.744: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %G.type.bff: type = fn_type @G.1 [concrete] // CHECK:STDOUT: %G.f0a: %G.type.bff = struct_value () [concrete] // CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete] // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%G.decl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness @F.%I.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %G.type.c84: type = fn_type @G.2 [concrete] // CHECK:STDOUT: %G.5a2: %G.type.c84 = struct_value () [concrete] // CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_tuple.type, (%I.impl_witness) [concrete] @@ -49,8 +51,8 @@ fn F() { // CHECK:STDOUT: interface @I { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %G.decl: %G.type.bff = fn_decl @G.1 [concrete = constants.%G.f0a] { -// CHECK:STDOUT: %self.patt: @G.1.%Self.as_type.loc13_16.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @G.1.%Self.as_type.loc13_16.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: @G.1.%pattern_type (%pattern_type.744) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @G.1.%pattern_type (%pattern_type.744) = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: @G.1.%Self.as_type.loc13_16.1 (%Self.as_type) = value_param call_param0 // CHECK:STDOUT: %.loc13_16.1: type = splice_block %.loc13_16.2 [symbolic = %Self.as_type.loc13_16.1 (constants.%Self.as_type)] { @@ -70,8 +72,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %.loc15_9.2 as %I.ref { // CHECK:STDOUT: %G.decl: %G.type.c84 = fn_decl @G.2 [concrete = constants.%G.5a2] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%.loc15_9.2 [concrete = constants.%empty_tuple.type] @@ -107,6 +109,7 @@ fn F() { // CHECK:STDOUT: generic fn @G.1(@I.%Self: %I.type) { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc13_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc13_16.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc13_16.1 [symbolic = %pattern_type (constants.%pattern_type.744)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @G.1.%Self.as_type.loc13_16.1 (%Self.as_type)); // CHECK:STDOUT: } @@ -119,10 +122,12 @@ fn F() { // CHECK:STDOUT: specific @G.1(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc13_16.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.744 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @G.1(constants.%I.facet) { // CHECK:STDOUT: %Self => constants.%I.facet // CHECK:STDOUT: %Self.as_type.loc13_16.1 => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/no_prelude/self.carbon b/toolchain/check/testdata/interface/no_prelude/self.carbon index eae60eb4627d..857fa4ea6e39 100644 --- a/toolchain/check/testdata/interface/no_prelude/self.carbon +++ b/toolchain/check/testdata/interface/no_prelude/self.carbon @@ -18,6 +18,7 @@ interface UseSelf { // CHECK:STDOUT: %UseSelf.type: type = facet_type <@UseSelf> [concrete] // CHECK:STDOUT: %Self: %UseSelf.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %UseSelf.assoc_type: type = assoc_entity_type @UseSelf [concrete] @@ -34,10 +35,10 @@ interface UseSelf { // CHECK:STDOUT: interface @UseSelf { // CHECK:STDOUT: %Self: %UseSelf.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: @F.%Self.as_type.loc12_14.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @F.%Self.as_type.loc12_14.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @F.%Self.as_type.loc12_14.1 (%Self.as_type) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%Self.as_type.loc12_14.1 (%Self.as_type) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @F.%pattern_type (%pattern_type) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref.loc12_25: %UseSelf.type = name_ref Self, @UseSelf.%Self [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc12_25: type = facet_access_type %Self.ref.loc12_25 [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type)] @@ -63,6 +64,7 @@ interface UseSelf { // CHECK:STDOUT: generic fn @F(@UseSelf.%Self: %UseSelf.type) { // CHECK:STDOUT: %Self: %UseSelf.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc12_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc12_14.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc12_14.1 [symbolic = %pattern_type (constants.%pattern_type)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @F.%Self.as_type.loc12_14.1 (%Self.as_type)) -> @F.%Self.as_type.loc12_14.1 (%Self.as_type); // CHECK:STDOUT: } @@ -70,5 +72,6 @@ interface UseSelf { // CHECK:STDOUT: specific @F(constants.%Self) { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc12_14.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/no_prelude/syntactic_merge.carbon b/toolchain/check/testdata/interface/no_prelude/syntactic_merge.carbon index ecba9d623cc7..f439a4ae922c 100644 --- a/toolchain/check/testdata/interface/no_prelude/syntactic_merge.carbon +++ b/toolchain/check/testdata/interface/no_prelude/syntactic_merge.carbon @@ -193,7 +193,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.538: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type.538 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.7d0: type = facet_type <@Foo, @Foo(%a)> [symbolic] @@ -215,25 +216,25 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.538 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc7_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc8: %Foo.type.538 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc7_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc8: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc8: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc10: %Bar.type.982 = interface_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt.loc10_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc10_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc10: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc10_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc10_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl.loc11: %Bar.type.982 = interface_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt.loc10_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc10_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref.loc11: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc11: %C = bind_symbolic_name a, 0 [symbolic = %a.loc10_15.2 (constants.%a)] @@ -242,7 +243,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc7_15.1: %C) { // CHECK:STDOUT: %a.loc7_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc7_15.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -259,7 +260,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar(%a.loc10_15.1: %C) { // CHECK:STDOUT: %a.loc10_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc10_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc10_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc10_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc10_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Bar.type: type = facet_type <@Bar, @Bar(%a.loc10_15.2)> [symbolic = %Bar.type (constants.%Bar.type.6a9)] @@ -304,7 +305,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.538: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type.538 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.7d0: type = facet_type <@Foo, @Foo(%a)> [symbolic] @@ -318,13 +320,13 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.538 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc6_21.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_21.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_21.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_21.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6_21.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_21.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.538 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc6_21.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_21.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_21.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_21.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_21.2 (constants.%a)] @@ -333,7 +335,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc6_21.1: %C) { // CHECK:STDOUT: %a.loc6_21.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_21.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6_21.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_21.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_21.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_21.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc6_21.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -371,7 +373,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.5380b8.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.ec3175.1: %Foo.type.5380b8.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.5380b8.2: type = generic_interface_type @Foo.2 [concrete] @@ -387,13 +390,13 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.5380b8.1 = interface_decl @Foo.1 [concrete = constants.%Foo.generic.ec3175.1] { -// CHECK:STDOUT: %a.patt.loc6_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc14: %Foo.type.5380b8.2 = interface_decl @Foo.2 [concrete = constants.%Foo.generic.ec3175.2] { -// CHECK:STDOUT: %a.patt.loc14_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc14_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc14_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc14_15.2 (constants.%a)] @@ -402,14 +405,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(%a.loc6_15.1: %C) { // CHECK:STDOUT: %a.loc6_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.2(%a.loc14_15.1: %C) { // CHECK:STDOUT: %a.loc14_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc14_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc14_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc14_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc14_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.2, @Foo.2(%a.loc14_15.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -452,7 +455,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.538: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type.538 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.7d0: type = facet_type <@Foo, @Foo(%a)> [symbolic] @@ -466,13 +470,13 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.538 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc6_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.538 = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc6_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc7: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] @@ -481,7 +485,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc6_15.1: %C) { // CHECK:STDOUT: %a.loc6_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc6_15.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -519,7 +523,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %Bar.type: type = generic_interface_type @Bar [concrete] @@ -537,13 +542,13 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc7_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type = interface_decl @Bar [concrete = constants.%Bar.generic] { -// CHECK:STDOUT: %a.patt.loc8_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc8_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc8_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc8_15.2 (constants.%a)] @@ -552,14 +557,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc7_15.1: %C) { // CHECK:STDOUT: %a.loc7_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar(%a.loc8_15.1: %C) { // CHECK:STDOUT: %a.loc8_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc8_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc8_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc8_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc8_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } @@ -590,7 +595,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.5380b8.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.ec3175.1: %Foo.type.5380b8.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.5380b8.2: type = generic_interface_type @Foo.2 [concrete] @@ -626,13 +632,13 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %default.import.loc2_24.1 = import // CHECK:STDOUT: %default.import.loc2_24.2 = import // CHECK:STDOUT: %Foo.decl: %Foo.type.5380b8.2 = interface_decl @Foo.2 [concrete = constants.%Foo.generic.ec3175.2] { -// CHECK:STDOUT: %a.patt.loc12_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc12_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc12_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc12_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %a.loc12_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc12_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Bar.decl: %Bar.type.982aac.2 = interface_decl @Bar.2 [concrete = constants.%Bar.generic.4bda5e.2] { -// CHECK:STDOUT: %a.patt.loc21_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc21_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc21_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc21_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%C] // CHECK:STDOUT: %a.loc21_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc21_15.2 (constants.%a)] @@ -641,14 +647,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(imports.%Main.import_ref.f97b44.1: %C) [from "two_file.carbon"] { // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic = %a (constants.%a)] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.2(%a.loc12_15.1: %C) { // CHECK:STDOUT: %a.loc12_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc12_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc12_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc12_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc12_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc12_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.2, @Foo.2(%a.loc12_15.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -665,14 +671,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar.1(imports.%Main.import_ref.f97b44.2: %C) [from "two_file.carbon"] { // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic = %a (constants.%a)] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Bar.2(%a.loc21_15.1: %C) { // CHECK:STDOUT: %a.loc21_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc21_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc21_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc21_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc21_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc21_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Bar.type: type = facet_type <@Bar.2, @Bar.2(%a.loc21_15.2)> [symbolic = %Bar.type (constants.%Bar.type.6a9)] @@ -725,11 +731,12 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.5380b8.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.ec3175.1: %Foo.type.5380b8.1 = struct_value () [concrete] // CHECK:STDOUT: %b: %C = bind_symbolic_name b, 0 [symbolic] -// CHECK:STDOUT: %b.patt: %C = symbolic_binding_pattern b, 0 [symbolic] +// CHECK:STDOUT: %b.patt: %pattern_type = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %Foo.type.5380b8.2: type = generic_interface_type @Foo.2 [concrete] // CHECK:STDOUT: %Foo.generic.ec3175.2: %Foo.type.5380b8.2 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.7d0: type = facet_type <@Foo.2, @Foo.2(%b)> [symbolic] @@ -746,13 +753,13 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.5380b8.1 = interface_decl @Foo.1 [concrete = constants.%Foo.generic.ec3175.1] { -// CHECK:STDOUT: %a.patt.loc7_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.5380b8.2 = interface_decl @Foo.2 [concrete = constants.%Foo.generic.ec3175.2] { -// CHECK:STDOUT: %b.patt.loc15_15.1: %C = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_15.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc15_15.1: %pattern_type = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_15.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %b.loc15_15.1: %C = bind_symbolic_name b, 0 [symbolic = %b.loc15_15.2 (constants.%b)] @@ -761,14 +768,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(%a.loc7_15.1: %C) { // CHECK:STDOUT: %a.loc7_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.2(%b.loc15_15.1: %C) { // CHECK:STDOUT: %b.loc15_15.2: %C = bind_symbolic_name b, 0 [symbolic = %b.loc15_15.2 (constants.%b)] -// CHECK:STDOUT: %b.patt.loc15_15.2: %C = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_15.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc15_15.2: %pattern_type = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc15_15.2 (constants.%b.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.2, @Foo.2(%b.loc15_15.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -811,7 +818,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.5380b8.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.ec3175.1: %Foo.type.5380b8.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.5380b8.2: type = generic_interface_type @Foo.2 [concrete] @@ -830,13 +838,13 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.5380b8.1 = interface_decl @Foo.1 [concrete = constants.%Foo.generic.ec3175.1] { -// CHECK:STDOUT: %a.patt.loc7_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.5380b8.2 = interface_decl @Foo.2 [concrete = constants.%Foo.generic.ec3175.2] { -// CHECK:STDOUT: %a.patt.loc15_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc15_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_15.2 (constants.%a)] @@ -845,14 +853,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(%a.loc7_15.1: %C) { // CHECK:STDOUT: %a.loc7_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.2(%a.loc15_15.1: %C) { // CHECK:STDOUT: %a.loc15_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc15_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.2, @Foo.2(%a.loc15_15.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -895,7 +903,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.5380b8.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.ec3175.1: %Foo.type.5380b8.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.5380b8.2: type = generic_interface_type @Foo.2 [concrete] @@ -914,13 +923,13 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.5380b8.1 = interface_decl @Foo.1 [concrete = constants.%Foo.generic.ec3175.1] { -// CHECK:STDOUT: %a.patt.loc7_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc7_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc15: %Foo.type.5380b8.2 = interface_decl @Foo.2 [concrete = constants.%Foo.generic.ec3175.2] { -// CHECK:STDOUT: %a.patt.loc15_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc15_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_15.2 (constants.%a)] @@ -929,14 +938,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(%a.loc7_15.1: %C) { // CHECK:STDOUT: %a.loc7_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc7_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc7_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc7_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.2(%a.loc15_15.1: %C) { // CHECK:STDOUT: %a.loc15_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc15_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc15_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc15_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc15_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.2, @Foo.2(%a.loc15_15.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -979,7 +988,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type: type = generic_interface_type @Foo [concrete] // CHECK:STDOUT: %Foo.generic: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -991,7 +1001,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl: %Foo.type = interface_decl @Foo [concrete = constants.%Foo.generic] { -// CHECK:STDOUT: %a.patt.loc6_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.loc6_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] @@ -1000,7 +1010,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo(%a.loc6_15.1: %C) { // CHECK:STDOUT: %a.loc6_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } @@ -1026,7 +1036,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.5380b8.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.ec3175.1: %Foo.type.5380b8.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.5380b8.2: type = generic_interface_type @Foo.2 [concrete] @@ -1054,7 +1065,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %D: type = bind_alias D, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type.5380b8.2 = interface_decl @Foo.2 [concrete = constants.%Foo.generic.ec3175.2] { -// CHECK:STDOUT: %a.patt.loc17_15.1: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc17_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc17_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc17_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D [concrete = constants.%C] // CHECK:STDOUT: %a.loc17_15.1: %C = bind_symbolic_name a, 0 [symbolic = %a.loc17_15.2 (constants.%a)] @@ -1063,14 +1074,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(imports.%Main.import_ref.f97: %C) [from "alias_two_file.carbon"] { // CHECK:STDOUT: %a: %C = bind_symbolic_name a, 0 [symbolic = %a (constants.%a)] -// CHECK:STDOUT: %a.patt: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.2(%a.loc17_15.1: %C) { // CHECK:STDOUT: %a.loc17_15.2: %C = bind_symbolic_name a, 0 [symbolic = %a.loc17_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc17_15.2: %C = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc17_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc17_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc17_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.2, @Foo.2(%a.loc17_15.2)> [symbolic = %Foo.type (constants.%Foo.type.7d0)] @@ -1112,7 +1123,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %const: type = const_type %C [concrete] // CHECK:STDOUT: %a: %const = bind_symbolic_name a, 0 [symbolic] -// CHECK:STDOUT: %a.patt: %const = symbolic_binding_pattern a, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %const [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [symbolic] // CHECK:STDOUT: %Foo.type.5380b8.1: type = generic_interface_type @Foo.1 [concrete] // CHECK:STDOUT: %Foo.generic.ec3175.1: %Foo.type.5380b8.1 = struct_value () [concrete] // CHECK:STDOUT: %Foo.type.5380b8.2: type = generic_interface_type @Foo.2 [concrete] @@ -1128,7 +1140,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl.loc6: %Foo.type.5380b8.1 = interface_decl @Foo.1 [concrete = constants.%Foo.generic.ec3175.1] { -// CHECK:STDOUT: %a.patt.loc6_15.1: %const = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6: type = splice_block %const [concrete = constants.%const] { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -1137,7 +1149,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %a.loc6_15.1: %const = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl.loc18: %Foo.type.5380b8.2 = interface_decl @Foo.2 [concrete = constants.%Foo.generic.ec3175.2] { -// CHECK:STDOUT: %a.patt.loc18_15.1: %const = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc18_15.1: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_15.2 (constants.%a.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc18: type = splice_block %const.loc18_19 [concrete = constants.%const] { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -1150,14 +1162,14 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.1(%a.loc6_15.1: %const) { // CHECK:STDOUT: %a.loc6_15.2: %const = bind_symbolic_name a, 0 [symbolic = %a.loc6_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc6_15.2: %const = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc6_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc6_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: interface; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Foo.2(%a.loc18_15.1: %const) { // CHECK:STDOUT: %a.loc18_15.2: %const = bind_symbolic_name a, 0 [symbolic = %a.loc18_15.2 (constants.%a)] -// CHECK:STDOUT: %a.patt.loc18_15.2: %const = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_15.2 (constants.%a.patt)] +// CHECK:STDOUT: %a.patt.loc18_15.2: %pattern_type = symbolic_binding_pattern a, 0 [symbolic = %a.patt.loc18_15.2 (constants.%a.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.2, @Foo.2(%a.loc18_15.2)> [symbolic = %Foo.type (constants.%Foo.type.924)] diff --git a/toolchain/check/testdata/interface/todo_define_not_default.carbon b/toolchain/check/testdata/interface/todo_define_not_default.carbon index 1380d1424be2..9aa16fa7d763 100644 --- a/toolchain/check/testdata/interface/todo_define_not_default.carbon +++ b/toolchain/check/testdata/interface/todo_define_not_default.carbon @@ -30,6 +30,7 @@ interface I { // CHECK:STDOUT: %assoc0.82e: %I.assoc_type = assoc_entity element0, @I.%F.decl [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.%G.decl [concrete] @@ -75,12 +76,12 @@ interface I { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %F.decl [concrete = constants.%assoc0.82e] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %i32 = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc14_27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc14_27: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/interop/cpp/function_decl.carbon b/toolchain/check/testdata/interop/cpp/function_decl.carbon index c68ae1c29db7..dc4867097bd8 100644 --- a/toolchain/check/testdata/interop/cpp/function_decl.carbon +++ b/toolchain/check/testdata/interop/cpp/function_decl.carbon @@ -226,6 +226,7 @@ fn F() { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Carbon_foo.type: type = fn_type @Carbon_foo [concrete] // CHECK:STDOUT: %Carbon_foo: %Carbon_foo.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -258,8 +259,8 @@ fn F() { // CHECK:STDOUT: import Cpp "int_return_function_decl.h" // CHECK:STDOUT: } // CHECK:STDOUT: %Carbon_foo.decl: %Carbon_foo.type = fn_decl @Carbon_foo [concrete = constants.%Carbon_foo] { -// CHECK:STDOUT: %val.patt: %i32 = binding_pattern val -// CHECK:STDOUT: %val.param_patt: %i32 = value_param_pattern %val.patt, call_param0 +// CHECK:STDOUT: %val.patt: %pattern_type.7ce = binding_pattern val +// CHECK:STDOUT: %val.param_patt: %pattern_type.7ce = value_param_pattern %val.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %val.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %i32 [concrete = constants.%i32] { @@ -808,6 +809,7 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -852,8 +854,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc7_3.1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc7_3.1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -882,6 +884,7 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -927,8 +930,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc7_3.1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc7_3.1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/interop/cpp/no_prelude/class.carbon b/toolchain/check/testdata/interop/cpp/no_prelude/class.carbon index b2f06e97c461..f53a91eeabc3 100644 --- a/toolchain/check/testdata/interop/cpp/no_prelude/class.carbon +++ b/toolchain/check/testdata/interop/cpp/no_prelude/class.carbon @@ -345,6 +345,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -365,8 +366,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "class_definition.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { @@ -398,6 +399,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -418,8 +420,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "class_declaration_and_definition.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { @@ -561,6 +563,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -581,8 +584,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "class_public_member_function.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.f68 = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { @@ -623,6 +626,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -655,7 +659,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc18_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc18_26: type = name_ref Bar, %Bar.decl [concrete = constants.%Bar] @@ -679,6 +683,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -699,8 +704,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "class_public_static_data_member.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.f68 = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [concrete = constants.%ptr.f68] { @@ -727,7 +732,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %foo_bar.patt: %ptr.f68 = binding_pattern foo_bar +// CHECK:STDOUT: %foo_bar.patt: %pattern_type = binding_pattern foo_bar // CHECK:STDOUT: } // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar // CHECK:STDOUT: %.loc18_30: ref %Bar = deref %bar.ref @@ -836,11 +841,13 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar1 [concrete] +// CHECK:STDOUT: %pattern_type.3cc: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF1.type: type = fn_type @MyF1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %MyF1: %MyF1.type = struct_value () [concrete] // CHECK:STDOUT: %Bar2: type = class_type @Bar2 [concrete] // CHECK:STDOUT: %ptr.eca: type = ptr_type %Bar2 [concrete] +// CHECK:STDOUT: %pattern_type.92a: type = pattern_type %ptr.eca [concrete] // CHECK:STDOUT: %MyF2.type: type = fn_type @MyF2 [concrete] // CHECK:STDOUT: %MyF2: %MyF2.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -863,8 +870,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "class_inheritance_pointers.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF1.decl: %MyF1.type = fn_decl @MyF1 [concrete = constants.%MyF1] { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.f68 = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type.3cc = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type.3cc = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { @@ -878,8 +885,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %bar: %ptr.f68 = bind_name bar, %bar.param // CHECK:STDOUT: } // CHECK:STDOUT: %MyF2.decl: %MyF2.type = fn_decl @MyF2 [concrete = constants.%MyF2] { -// CHECK:STDOUT: %bar.patt: %ptr.eca = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.eca = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type.92a = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type.92a = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.eca = value_param call_param0 // CHECK:STDOUT: %.loc15_23: type = splice_block %ptr [concrete = constants.%ptr.eca] { diff --git a/toolchain/check/testdata/interop/cpp/no_prelude/struct.carbon b/toolchain/check/testdata/interop/cpp/no_prelude/struct.carbon index 5e6b90224ff5..5f79fb3699fa 100644 --- a/toolchain/check/testdata/interop/cpp/no_prelude/struct.carbon +++ b/toolchain/check/testdata/interop/cpp/no_prelude/struct.carbon @@ -335,6 +335,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -355,8 +356,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "struct_definition.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { @@ -388,6 +389,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -408,8 +410,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "struct_declaration_and_definition.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { @@ -551,6 +553,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -571,8 +574,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "struct_public_member_function.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.f68 = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { @@ -613,6 +616,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -645,7 +649,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc18_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc18_26: type = name_ref Bar, %Bar.decl [concrete = constants.%Bar] @@ -669,6 +673,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -689,8 +694,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "struct_public_static_data_member.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.f68 = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [concrete = constants.%ptr.f68] { @@ -717,7 +722,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %foo_bar.patt: %ptr.f68 = binding_pattern foo_bar +// CHECK:STDOUT: %foo_bar.patt: %pattern_type = binding_pattern foo_bar // CHECK:STDOUT: } // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar // CHECK:STDOUT: %.loc18_30: ref %Bar = deref %bar.ref @@ -826,11 +831,13 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar1 [concrete] +// CHECK:STDOUT: %pattern_type.3cc: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF1.type: type = fn_type @MyF1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %MyF1: %MyF1.type = struct_value () [concrete] // CHECK:STDOUT: %Bar2: type = class_type @Bar2 [concrete] // CHECK:STDOUT: %ptr.eca: type = ptr_type %Bar2 [concrete] +// CHECK:STDOUT: %pattern_type.92a: type = pattern_type %ptr.eca [concrete] // CHECK:STDOUT: %MyF2.type: type = fn_type @MyF2 [concrete] // CHECK:STDOUT: %MyF2: %MyF2.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -853,8 +860,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "struct_inheritance_pointers.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF1.decl: %MyF1.type = fn_decl @MyF1 [concrete = constants.%MyF1] { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.f68 = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type.3cc = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type.3cc = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { @@ -868,8 +875,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %bar: %ptr.f68 = bind_name bar, %bar.param // CHECK:STDOUT: } // CHECK:STDOUT: %MyF2.decl: %MyF2.type = fn_decl @MyF2 [concrete = constants.%MyF2] { -// CHECK:STDOUT: %bar.patt: %ptr.eca = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.eca = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type.92a = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type.92a = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.eca = value_param call_param0 // CHECK:STDOUT: %.loc15_23: type = splice_block %ptr [concrete = constants.%ptr.eca] { diff --git a/toolchain/check/testdata/interop/cpp/no_prelude/union.carbon b/toolchain/check/testdata/interop/cpp/no_prelude/union.carbon index 9ff86f48f34e..210a0b4d439c 100644 --- a/toolchain/check/testdata/interop/cpp/no_prelude/union.carbon +++ b/toolchain/check/testdata/interop/cpp/no_prelude/union.carbon @@ -256,6 +256,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -276,8 +277,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "union_definition.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { @@ -309,6 +310,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -329,8 +331,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "union_declaration_and_definition.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { @@ -472,6 +474,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -492,8 +495,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "union_public_member_function.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.f68 = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { @@ -534,6 +537,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -566,7 +570,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc18_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref.loc18_26: type = name_ref Bar, %Bar.decl [concrete = constants.%Bar] @@ -590,6 +594,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -610,8 +615,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: import Cpp "union_public_static_data_member.h" // CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.patt: %ptr.f68 = binding_pattern bar -// CHECK:STDOUT: %bar.param_patt: %ptr.f68 = value_param_pattern %bar.patt, call_param0 +// CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar +// CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 // CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [concrete = constants.%ptr.f68] { @@ -638,7 +643,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %foo_bar.patt: %ptr.f68 = binding_pattern foo_bar +// CHECK:STDOUT: %foo_bar.patt: %pattern_type = binding_pattern foo_bar // CHECK:STDOUT: } // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar // CHECK:STDOUT: %.loc18_30: ref %Bar = deref %bar.ref diff --git a/toolchain/check/testdata/ir/duplicate_name_same_line.carbon b/toolchain/check/testdata/ir/duplicate_name_same_line.carbon index 87087718b20e..43675e42d8cb 100644 --- a/toolchain/check/testdata/ir/duplicate_name_same_line.carbon +++ b/toolchain/check/testdata/ir/duplicate_name_same_line.carbon @@ -18,6 +18,7 @@ fn A() { if (true) { var n: i32 = 1; } if (true) { var n: i32 = 2; } } // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -62,8 +63,8 @@ fn A() { if (true) { var n: i32 = 1; } if (true) { var n: i32 = 2; } } // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc11_18: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt.loc11_26: %i32 = binding_pattern n -// CHECK:STDOUT: %.loc11_22.1: %i32 = var_pattern %n.patt.loc11_26 +// CHECK:STDOUT: %n.patt.loc11_26: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %.loc11_22.1: %pattern_type.7ce = var_pattern %n.patt.loc11_26 // CHECK:STDOUT: } // CHECK:STDOUT: %n.var.loc11_22: ref %i32 = var n // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -87,8 +88,8 @@ fn A() { if (true) { var n: i32 = 1; } if (true) { var n: i32 = 2; } } // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc11_48: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt.loc11_56: %i32 = binding_pattern n -// CHECK:STDOUT: %.loc11_52.1: %i32 = var_pattern %n.patt.loc11_56 +// CHECK:STDOUT: %n.patt.loc11_56: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %.loc11_52.1: %pattern_type.7ce = var_pattern %n.patt.loc11_56 // CHECK:STDOUT: } // CHECK:STDOUT: %n.var.loc11_52: ref %i32 = var n // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] diff --git a/toolchain/check/testdata/let/compile_time_bindings.carbon b/toolchain/check/testdata/let/compile_time_bindings.carbon index 0aa62a88f4c2..dd24f96e013d 100644 --- a/toolchain/check/testdata/let/compile_time_bindings.carbon +++ b/toolchain/check/testdata/let/compile_time_bindings.carbon @@ -161,6 +161,7 @@ impl i32 as Empty { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -186,8 +187,8 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc5_14.2: type = converted %.loc5_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -195,7 +196,7 @@ impl i32 as Empty { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_17.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc10_12.1: type = splice_block %.loc10_12.3 [concrete = constants.%empty_tuple.type] { @@ -226,6 +227,7 @@ impl i32 as Empty { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -251,7 +253,7 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_17.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc9_12.1: type = splice_block %.loc9_12.3 [concrete = constants.%empty_tuple.type] { @@ -262,8 +264,8 @@ impl i32 as Empty { // CHECK:STDOUT: %.loc9_17.2: %empty_tuple.type = converted %.loc9_17.1, %empty_tuple [concrete = constants.%empty_tuple] // CHECK:STDOUT: %x: %empty_tuple.type = bind_name x, %.loc9_17.2 // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc10_14.2: type = converted %.loc10_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -291,19 +293,23 @@ impl i32 as Empty { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %tuple.type.9fb: type = tuple_type (%empty_tuple.type) [concrete] // CHECK:STDOUT: %b: %tuple.type.9fb = bind_symbolic_name b, 0 [symbolic] -// CHECK:STDOUT: %b.patt: %tuple.type.9fb = symbolic_binding_pattern b, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.559: type = pattern_type %tuple.type.9fb [concrete] +// CHECK:STDOUT: %b.patt: %pattern_type.559 = symbolic_binding_pattern b, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.2d5: type = tuple_type (%empty_tuple.type, %empty_tuple.type, %empty_tuple.type) [concrete] +// CHECK:STDOUT: %pattern_type.8c1: type = pattern_type %tuple.type.2d5 [concrete] // CHECK:STDOUT: %tuple.7e4: %tuple.type.2d5 = tuple_value (%empty_tuple, %empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type.bcd: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] // CHECK:STDOUT: %c: %tuple.type.bcd = bind_symbolic_name c, 1 [symbolic] -// CHECK:STDOUT: %c.patt: %tuple.type.bcd = symbolic_binding_pattern c, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type.bcd [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.5b8 = symbolic_binding_pattern c, 1 [symbolic] // CHECK:STDOUT: %tuple.d8f: %tuple.type.bcd = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: %tuple.elem0.af8: %empty_tuple.type = tuple_access %b, element0 [symbolic] // CHECK:STDOUT: %tuple.f41: %tuple.type.9fb = tuple_value (%empty_tuple) [concrete] @@ -329,7 +335,7 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %.loc9_17.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc9_12.1: type = splice_block %.loc9_12.3 [concrete = constants.%empty_tuple.type] { @@ -340,7 +346,7 @@ impl i32 as Empty { // CHECK:STDOUT: %.loc9_17.2: %empty_tuple.type = converted %.loc9_17.1, %empty_tuple.loc9 [concrete = constants.%empty_tuple] // CHECK:STDOUT: %a: %empty_tuple.type = bind_name a, %.loc9_17.2 // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %b.patt.loc10_8.1: %tuple.type.9fb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc10_8.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc10_8.1: %pattern_type.559 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc10_8.2 (constants.%b.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_16.1: type = splice_block %.loc10_16.4 [concrete = constants.%tuple.type.9fb] { // CHECK:STDOUT: %.loc10_14: %empty_tuple.type = tuple_literal () @@ -351,7 +357,7 @@ impl i32 as Empty { // CHECK:STDOUT: %b.loc10_8.2: %tuple.type.9fb = bind_symbolic_name b, 0 [symbolic = %b.loc10_8.1 (constants.%b)] // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %tuple.type.2d5 = binding_pattern d +// CHECK:STDOUT: %d.patt: %pattern_type.8c1 = binding_pattern d // CHECK:STDOUT: } // CHECK:STDOUT: %.loc22_28: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc22_32: %empty_tuple.type = tuple_literal () @@ -389,11 +395,11 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%b.loc10_8.2: %tuple.type.9fb) { // CHECK:STDOUT: %b.loc10_8.1: %tuple.type.9fb = bind_symbolic_name b, 0 [symbolic = %b.loc10_8.1 (constants.%b)] -// CHECK:STDOUT: %b.patt.loc10_8.2: %tuple.type.9fb = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc10_8.2 (constants.%b.patt)] +// CHECK:STDOUT: %b.patt.loc10_8.2: %pattern_type.559 = symbolic_binding_pattern b, 0 [symbolic = %b.patt.loc10_8.2 (constants.%b.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %c.loc11_9.2: %tuple.type.bcd = bind_symbolic_name c, 1 [symbolic = %c.loc11_9.2 (constants.%c)] -// CHECK:STDOUT: %c.patt.loc11_9.2: %tuple.type.bcd = symbolic_binding_pattern c, 1 [symbolic = %c.patt.loc11_9.2 (constants.%c.patt)] +// CHECK:STDOUT: %c.patt.loc11_9.2: %pattern_type.5b8 = symbolic_binding_pattern c, 1 [symbolic = %c.patt.loc11_9.2 (constants.%c.patt)] // CHECK:STDOUT: %tuple.elem0.loc14_21.3: %empty_tuple.type = tuple_access %b.loc10_8.1, element0 [symbolic = %tuple.elem0.loc14_21.3 (constants.%tuple.elem0.af8)] // CHECK:STDOUT: %tuple.elem0.loc15_24.3: %empty_tuple.type = tuple_access %c.loc11_9.2, element0 [symbolic = %tuple.elem0.loc15_24.3 (constants.%tuple.elem0.eaf)] // CHECK:STDOUT: %tuple.elem1.loc15_24.3: %empty_tuple.type = tuple_access %c.loc11_9.2, element1 [symbolic = %tuple.elem1.loc15_24.3 (constants.%tuple.elem1)] @@ -401,7 +407,7 @@ impl i32 as Empty { // CHECK:STDOUT: fn() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt.loc11_9.1: %tuple.type.bcd = symbolic_binding_pattern c, 1 [symbolic = %c.patt.loc11_9.2 (constants.%c.patt)] +// CHECK:STDOUT: %c.patt.loc11_9.1: %pattern_type.5b8 = symbolic_binding_pattern c, 1 [symbolic = %c.patt.loc11_9.2 (constants.%c.patt)] // CHECK:STDOUT: } // CHECK:STDOUT: %.loc11_26: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc11_30: %empty_tuple.type = tuple_literal () @@ -422,8 +428,8 @@ impl i32 as Empty { // CHECK:STDOUT: %.loc11_31.4: %tuple.type.bcd = converted %.loc11_31.1, %tuple [concrete = constants.%tuple.d8f] // CHECK:STDOUT: %c.loc11_9.1: %tuple.type.bcd = bind_symbolic_name c, 1, %.loc11_31.4 [symbolic = %c.loc11_9.2 (constants.%c)] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a1.patt: %empty_tuple.type = binding_pattern a1 -// CHECK:STDOUT: %.loc13_5.1: %empty_tuple.type = var_pattern %a1.patt +// CHECK:STDOUT: %a1.patt: %pattern_type.cb1 = binding_pattern a1 +// CHECK:STDOUT: %.loc13_5.1: %pattern_type.cb1 = var_pattern %a1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a1.var: ref %empty_tuple.type = var a1 // CHECK:STDOUT: %a.ref: %empty_tuple.type = name_ref a, @C.%a @@ -436,8 +442,8 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %a1: ref %empty_tuple.type = bind_name a1, %a1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b1.patt: %tuple.type.9fb = binding_pattern b1 -// CHECK:STDOUT: %.loc14_5.1: %tuple.type.9fb = var_pattern %b1.patt +// CHECK:STDOUT: %b1.patt: %pattern_type.559 = binding_pattern b1 +// CHECK:STDOUT: %.loc14_5.1: %pattern_type.559 = var_pattern %b1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b1.var: ref %tuple.type.9fb = var b1 // CHECK:STDOUT: %b.ref: %tuple.type.9fb = name_ref b, %b.loc10_8.2 [symbolic = %b.loc10_8.1 (constants.%b)] @@ -456,8 +462,8 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %b1: ref %tuple.type.9fb = bind_name b1, %b1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %tuple.type.bcd = binding_pattern c1 -// CHECK:STDOUT: %.loc15_5.1: %tuple.type.bcd = var_pattern %c1.patt +// CHECK:STDOUT: %c1.patt: %pattern_type.5b8 = binding_pattern c1 +// CHECK:STDOUT: %.loc15_5.1: %pattern_type.5b8 = var_pattern %c1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %tuple.type.bcd = var c1 // CHECK:STDOUT: %c.ref: %tuple.type.bcd = name_ref c, %c.loc11_9.1 [symbolic = %c.loc11_9.2 (constants.%c)] @@ -482,8 +488,8 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %c1: ref %tuple.type.bcd = bind_name c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d1.patt: %tuple.type.2d5 = binding_pattern d1 -// CHECK:STDOUT: %.loc16_5.1: %tuple.type.2d5 = var_pattern %d1.patt +// CHECK:STDOUT: %d1.patt: %pattern_type.8c1 = binding_pattern d1 +// CHECK:STDOUT: %.loc16_5.1: %pattern_type.8c1 = var_pattern %d1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d1.var: ref %tuple.type.2d5 = var d1 // CHECK:STDOUT: %d.ref: %tuple.type.2d5 = name_ref d, @C.%d @@ -527,6 +533,7 @@ impl i32 as Empty { // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -551,8 +558,8 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc5_14.2: type = converted %.loc5_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -560,7 +567,7 @@ impl i32 as Empty { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] @@ -569,12 +576,12 @@ impl i32 as Empty { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: .x = .inst31.loc14_7 +// CHECK:STDOUT: .x = .inst32.loc14_7 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %empty_tuple.type { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %x.ref: %empty_tuple.type = name_ref x, .inst31.loc14_7 +// CHECK:STDOUT: %x.ref: %empty_tuple.type = name_ref x, .inst32.loc14_7 // CHECK:STDOUT: return %x.ref // CHECK:STDOUT: } // CHECK:STDOUT: @@ -583,10 +590,11 @@ impl i32 as Empty { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Zero: %i32 = bind_symbolic_name Zero, 0 [symbolic] -// CHECK:STDOUT: %Zero.patt: %i32 = symbolic_binding_pattern Zero, 0 [symbolic] +// CHECK:STDOUT: %Zero.patt: %pattern_type.7ce = symbolic_binding_pattern Zero, 0 [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -618,8 +626,8 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc4: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc4: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -631,7 +639,7 @@ impl i32 as Empty { // CHECK:STDOUT: fn @F() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Zero.patt: %i32 = symbolic_binding_pattern Zero, 0 [symbolic = constants.%Zero.patt] +// CHECK:STDOUT: %Zero.patt: %pattern_type.7ce = symbolic_binding_pattern Zero, 0 [symbolic = constants.%Zero.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] // CHECK:STDOUT: %.loc5_14: type = splice_block %i32.loc5 [concrete = constants.%i32] { @@ -655,11 +663,12 @@ impl i32 as Empty { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %Zero: %i32 = bind_symbolic_name Zero, 0 [symbolic] -// CHECK:STDOUT: %Zero.patt: %i32 = symbolic_binding_pattern Zero, 0 [symbolic] +// CHECK:STDOUT: %Zero.patt: %pattern_type.7ce = symbolic_binding_pattern Zero, 0 [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -695,8 +704,8 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc4: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc4: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -712,7 +721,7 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Zero.patt: %i32 = symbolic_binding_pattern Zero, 0 [symbolic = constants.%Zero.patt] +// CHECK:STDOUT: %Zero.patt: %pattern_type.7ce = symbolic_binding_pattern Zero, 0 [symbolic = constants.%Zero.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] // CHECK:STDOUT: %.loc6_16: type = splice_block %i32.loc6 [concrete = constants.%i32] { @@ -755,6 +764,7 @@ impl i32 as Empty { // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %Self, @I [symbolic] // CHECK:STDOUT: %I.facet: %I.type = facet_value %Self.as_type, (%I.lookup_impl_witness) [symbolic] // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic] +// CHECK:STDOUT: %pattern_type.ca5: type = pattern_type %impl.elem0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.%F.decl [concrete] @@ -785,8 +795,8 @@ impl i32 as Empty { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: @F.%impl.elem0.loc6_13.1 (%impl.elem0) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @F.%impl.elem0.loc6_13.1 (%impl.elem0) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: @F.%pattern_type (%pattern_type.ca5) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @F.%pattern_type (%pattern_type.ca5) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %impl.elem0.loc6_13.2: type = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_13.1 (constants.%impl.elem0)] // CHECK:STDOUT: %T.ref: type = name_ref T, %impl.elem0.loc6_13.2 [symbolic = %impl.elem0.loc6_13.1 (constants.%impl.elem0)] @@ -812,6 +822,7 @@ impl i32 as Empty { // CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %I.lookup_impl_witness: = lookup_impl_witness %Self, @I [symbolic = %I.lookup_impl_witness (constants.%I.lookup_impl_witness)] // CHECK:STDOUT: %impl.elem0.loc6_13.1: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_13.1 (constants.%impl.elem0)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc6_13.1 [symbolic = %pattern_type (constants.%pattern_type.ca5)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @F.%impl.elem0.loc6_13.1 (%impl.elem0); // CHECK:STDOUT: } @@ -824,12 +835,14 @@ impl i32 as Empty { // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.lookup_impl_witness // CHECK:STDOUT: %impl.elem0.loc6_13.1 => constants.%impl.elem0 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ca5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_return_in_class.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %I: type = class_type @I [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -857,7 +870,7 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: class @I { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: type = binding_pattern T +// CHECK:STDOUT: %T.patt: %pattern_type.98f = binding_pattern T // CHECK:STDOUT: } // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -885,6 +898,7 @@ impl i32 as Empty { // CHECK:STDOUT: --- fail_return_in_package_scope.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -907,7 +921,7 @@ impl i32 as Empty { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: type = binding_pattern T +// CHECK:STDOUT: %T.patt: %pattern_type.98f = binding_pattern T // CHECK:STDOUT: } // CHECK:STDOUT: %T: type = bind_name T, @__global_init.%i32 // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { @@ -937,6 +951,7 @@ impl i32 as Empty { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Empty.impl_witness: = impl_witness file.%Empty.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -987,7 +1002,7 @@ impl i32 as Empty { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.cfd: %i32.loc6 as %Empty.ref { // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Zero.patt: %i32 = binding_pattern Zero +// CHECK:STDOUT: %Zero.patt: %pattern_type.7ce = binding_pattern Zero // CHECK:STDOUT: } // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] // CHECK:STDOUT: %.loc11_14: type = splice_block %i32.loc11 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/let/convert.carbon b/toolchain/check/testdata/let/convert.carbon index d0a271842af9..e27788afbedd 100644 --- a/toolchain/check/testdata/let/convert.carbon +++ b/toolchain/check/testdata/let/convert.carbon @@ -20,10 +20,12 @@ fn F() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.189: type = tuple_type (%i32, %i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.b5a: type = pattern_type %tuple.type.189 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] @@ -65,8 +67,8 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -78,8 +80,8 @@ fn F() -> i32 { // CHECK:STDOUT: fn @F() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %tuple.type.189 = binding_pattern v -// CHECK:STDOUT: %.loc12_3.1: %tuple.type.189 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.b5a = binding_pattern v +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.b5a = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %tuple.type.189 = var v // CHECK:STDOUT: %int_1.loc12: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -125,7 +127,7 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %tuple.type.189 = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %tuple.type.189 = binding_pattern w +// CHECK:STDOUT: %w.patt: %pattern_type.b5a = binding_pattern w // CHECK:STDOUT: } // CHECK:STDOUT: %v.ref: ref %tuple.type.189 = name_ref v, %v // CHECK:STDOUT: %.loc14_24.1: type = splice_block %.loc14_24.3 [concrete = constants.%tuple.type.189] { diff --git a/toolchain/check/testdata/let/fail_duplicate_decl.carbon b/toolchain/check/testdata/let/fail_duplicate_decl.carbon index 427129eea6e8..7b38041117bd 100644 --- a/toolchain/check/testdata/let/fail_duplicate_decl.carbon +++ b/toolchain/check/testdata/let/fail_duplicate_decl.carbon @@ -27,6 +27,7 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -67,7 +68,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt.loc12: %i32 = binding_pattern a +// CHECK:STDOUT: %a.patt.loc12: %pattern_type.7ce = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc12_10: type = splice_block %i32.loc12 [concrete = constants.%i32] { @@ -83,7 +84,7 @@ fn F() { // CHECK:STDOUT: %.loc12_16.2: %i32 = converted %int_1, %.loc12_16.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %a.loc12: %i32 = bind_name a, %.loc12_16.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt.loc20: %i32 = binding_pattern a +// CHECK:STDOUT: %a.patt.loc20: %pattern_type.7ce = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %.loc20_10: type = splice_block %i32.loc20 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/let/fail_generic.carbon b/toolchain/check/testdata/let/fail_generic.carbon index 2260f349e226..892ea00c717b 100644 --- a/toolchain/check/testdata/let/fail_generic.carbon +++ b/toolchain/check/testdata/let/fail_generic.carbon @@ -34,10 +34,13 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.1: type = pattern_type %T [symbolic] // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0d85.1: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest) [symbolic] @@ -64,10 +67,10 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12_17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12_17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -85,13 +88,13 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: fn @F(%a.param: %i32) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = constants.%T.patt] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = constants.%T.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, %i32.loc13 [symbolic = constants.%T] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %T = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.7dcd0a.1 = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5] // CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = constants.%T] diff --git a/toolchain/check/testdata/let/fail_generic_import.carbon b/toolchain/check/testdata/let/fail_generic_import.carbon index bb77c055683a..8065b738f8f0 100644 --- a/toolchain/check/testdata/let/fail_generic_import.carbon +++ b/toolchain/check/testdata/let/fail_generic_import.carbon @@ -32,6 +32,7 @@ let a: T = 0; // CHECK:STDOUT: --- fail_implicit.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: } @@ -51,7 +52,7 @@ let a: T = 0; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: type = binding_pattern T +// CHECK:STDOUT: %T.patt: %pattern_type.98f = binding_pattern T // CHECK:STDOUT: } // CHECK:STDOUT: %T: type = bind_name T, @__global_init.%i32 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/let/fail_missing_value.carbon b/toolchain/check/testdata/let/fail_missing_value.carbon index 0adc5ee14422..8a04394edb86 100644 --- a/toolchain/check/testdata/let/fail_missing_value.carbon +++ b/toolchain/check/testdata/let/fail_missing_value.carbon @@ -27,6 +27,7 @@ fn F() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -42,12 +43,12 @@ fn F() { // CHECK:STDOUT: file { // CHECK:STDOUT: package: = namespace [concrete] { // CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .n = .inst45.loc15_5 +// CHECK:STDOUT: .n = .inst46.loc15_5 // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } @@ -55,7 +56,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: return // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/let/fail_modifiers.carbon b/toolchain/check/testdata/let/fail_modifiers.carbon index ef55fe770316..29802123f6f0 100644 --- a/toolchain/check/testdata/let/fail_modifiers.carbon +++ b/toolchain/check/testdata/let/fail_modifiers.carbon @@ -89,6 +89,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -127,7 +128,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15_18: type = splice_block %i32.loc15 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -142,7 +143,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %.loc15_24.2: %i32 = converted @__global_init.%int_1.loc15, %.loc15_24.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %b: %i32 = bind_name b, %.loc15_24.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %.loc21_16: type = splice_block %i32.loc21 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -157,7 +158,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %.loc21_22.2: %i32 = converted @__global_init.%int_1.loc21, %.loc21_22.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %c: %i32 = bind_name c, %.loc21_22.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %i32 = binding_pattern d +// CHECK:STDOUT: %d.patt: %pattern_type.7ce = binding_pattern d // CHECK:STDOUT: } // CHECK:STDOUT: %.loc27_14: type = splice_block %i32.loc27 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -172,7 +173,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %.loc27_20.2: %i32 = converted @__global_init.%int_1.loc27, %.loc27_20.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %d: %i32 = bind_name d, %.loc27_20.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %i32 = binding_pattern e +// CHECK:STDOUT: %e.patt: %pattern_type.7ce = binding_pattern e // CHECK:STDOUT: } // CHECK:STDOUT: %.loc33_16: type = splice_block %i32.loc33 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc33: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -187,7 +188,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %.loc33_22.2: %i32 = converted @__global_init.%int_1.loc33, %.loc33_22.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %e: %i32 = bind_name e, %.loc33_22.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %f.patt: %i32 = binding_pattern f +// CHECK:STDOUT: %f.patt: %pattern_type.7ce = binding_pattern f // CHECK:STDOUT: } // CHECK:STDOUT: %.loc46_22: type = splice_block %i32.loc46 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc46: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -202,7 +203,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %.loc46_28.2: %i32 = converted @__global_init.%int_1.loc46, %.loc46_28.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %f: %i32 = bind_name f, %.loc46_28.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %g.patt: %i32 = binding_pattern g +// CHECK:STDOUT: %g.patt: %pattern_type.7ce = binding_pattern g // CHECK:STDOUT: } // CHECK:STDOUT: %.loc59_24: type = splice_block %i32.loc59 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc59: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -217,7 +218,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %.loc59_30.2: %i32 = converted @__global_init.%int_1.loc59, %.loc59_30.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %g: %i32 = bind_name g, %.loc59_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %h.patt: %i32 = binding_pattern h +// CHECK:STDOUT: %h.patt: %pattern_type.7ce = binding_pattern h // CHECK:STDOUT: } // CHECK:STDOUT: %.loc72_26: type = splice_block %i32.loc72 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc72: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -232,7 +233,7 @@ protected protected let i: i32 = 1; // CHECK:STDOUT: %.loc72_32.2: %i32 = converted @__global_init.%int_1.loc72, %.loc72_32.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %h: %i32 = bind_name h, %.loc72_32.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %i32 = binding_pattern i +// CHECK:STDOUT: %i.patt: %pattern_type.7ce = binding_pattern i // CHECK:STDOUT: } // CHECK:STDOUT: %.loc85_28: type = splice_block %i32.loc85 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc85: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] diff --git a/toolchain/check/testdata/let/fail_use_in_init.carbon b/toolchain/check/testdata/let/fail_use_in_init.carbon index 545d084b0c94..b12d014fc0aa 100644 --- a/toolchain/check/testdata/let/fail_use_in_init.carbon +++ b/toolchain/check/testdata/let/fail_use_in_init.carbon @@ -23,6 +23,7 @@ fn F() { // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -45,7 +46,7 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: = name_ref a, [concrete = ] // CHECK:STDOUT: %.loc16: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/let/generic.carbon b/toolchain/check/testdata/let/generic.carbon index 694287ba1731..45953fb07abc 100644 --- a/toolchain/check/testdata/let/generic.carbon +++ b/toolchain/check/testdata/let/generic.carbon @@ -20,10 +20,13 @@ fn F() { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %ptr [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -46,14 +49,14 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = constants.%T.patt] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = constants.%T.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0, %i32 [symbolic = constants.%T] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %.loc13_3: %ptr = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: %pattern_type.afe = binding_pattern p +// CHECK:STDOUT: %.loc13_3: %pattern_type.afe = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr = var p // CHECK:STDOUT: %.loc13_11: type = splice_block %ptr [symbolic = constants.%ptr] { @@ -62,8 +65,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref %ptr = bind_name p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %T = binding_pattern a -// CHECK:STDOUT: %.loc14_3: %T = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7dc = binding_pattern a +// CHECK:STDOUT: %.loc14_3: %pattern_type.7dc = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %T = var a // CHECK:STDOUT: %p.ref: ref %ptr = name_ref p, %p diff --git a/toolchain/check/testdata/let/generic_import.carbon b/toolchain/check/testdata/let/generic_import.carbon index 293eae70508b..1e0a15be9b50 100644 --- a/toolchain/check/testdata/let/generic_import.carbon +++ b/toolchain/check/testdata/let/generic_import.carbon @@ -36,6 +36,7 @@ var b: T = *a; // CHECK:STDOUT: --- fail_implicit.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: } @@ -55,7 +56,7 @@ var b: T = *a; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %T.patt: type = binding_pattern T +// CHECK:STDOUT: %T.patt: %pattern_type.98f = binding_pattern T // CHECK:STDOUT: } // CHECK:STDOUT: %T: type = bind_name T, @__global_init.%i32 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/let/global.carbon b/toolchain/check/testdata/let/global.carbon index d2162a55cef4..4c782eaa2d75 100644 --- a/toolchain/check/testdata/let/global.carbon +++ b/toolchain/check/testdata/let/global.carbon @@ -17,6 +17,7 @@ fn F() -> i32 { return n; } // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -51,7 +52,7 @@ fn F() -> i32 { return n; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %.loc11_8: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -66,8 +67,8 @@ fn F() -> i32 { return n; } // CHECK:STDOUT: %.loc11_14.2: %i32 = converted @__global_init.%int_1, %.loc11_14.1 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: %n: %i32 = bind_name n, %.loc11_14.2 // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/let/local.carbon b/toolchain/check/testdata/let/local.carbon index dbccaab11fff..be9166df22d6 100644 --- a/toolchain/check/testdata/let/local.carbon +++ b/toolchain/check/testdata/let/local.carbon @@ -18,6 +18,7 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -37,10 +38,10 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -58,7 +59,7 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: fn @F(%a.param: %i32) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref: %i32 = name_ref a, %a // CHECK:STDOUT: %.loc12: type = splice_block %i32.loc12 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/let/no_prelude/import.carbon b/toolchain/check/testdata/let/no_prelude/import.carbon index 7c187f758dd3..c6ec64f07d1e 100644 --- a/toolchain/check/testdata/let/no_prelude/import.carbon +++ b/toolchain/check/testdata/let/no_prelude/import.carbon @@ -36,6 +36,7 @@ let b: () = Other.a; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -44,7 +45,7 @@ let b: () = Other.a; // CHECK:STDOUT: .a = %a // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_9.2: %empty_tuple.type = tuple_literal () @@ -65,6 +66,7 @@ let b: () = Other.a; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -79,7 +81,7 @@ let b: () = Other.a; // CHECK:STDOUT: %Implicit.import = import Implicit // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_9.2: %empty_tuple.type = tuple_literal () @@ -98,6 +100,7 @@ let b: () = Other.a; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -106,7 +109,7 @@ let b: () = Other.a; // CHECK:STDOUT: .a = %a // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_9.2: %empty_tuple.type = tuple_literal () @@ -127,6 +130,7 @@ let b: () = Other.a; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -144,7 +148,7 @@ let b: () = Other.a; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_9.2: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/let/no_prelude/import_access.carbon b/toolchain/check/testdata/let/no_prelude/import_access.carbon index 528e6ba17bae..ee168909adb9 100644 --- a/toolchain/check/testdata/let/no_prelude/import_access.carbon +++ b/toolchain/check/testdata/let/no_prelude/import_access.carbon @@ -56,6 +56,7 @@ let v2: () = Test.v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -64,7 +65,7 @@ let v2: () = Test.v; // CHECK:STDOUT: .v [private] = %v // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %empty_tuple.type = binding_pattern v +// CHECK:STDOUT: %v.patt: %pattern_type = binding_pattern v // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_17.2: %empty_tuple.type = tuple_literal () @@ -85,6 +86,7 @@ let v2: () = Test.v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -99,7 +101,7 @@ let v2: () = Test.v; // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %empty_tuple.type = binding_pattern v2 +// CHECK:STDOUT: %v2.patt: %pattern_type = binding_pattern v2 // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc4_10.2: %empty_tuple.type = tuple_literal () @@ -118,6 +120,7 @@ let v2: () = Test.v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -127,7 +130,7 @@ let v2: () = Test.v; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %empty_tuple.type = binding_pattern v2 +// CHECK:STDOUT: %v2.patt: %pattern_type = binding_pattern v2 // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_10.1: type = splice_block %.loc10_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc10_10.2: %empty_tuple.type = tuple_literal () @@ -146,6 +149,7 @@ let v2: () = Test.v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -162,7 +166,7 @@ let v2: () = Test.v; // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %empty_tuple.type = binding_pattern v2 +// CHECK:STDOUT: %v2.patt: %pattern_type = binding_pattern v2 // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_10.1: type = splice_block %.loc10_10.3 [concrete = constants.%empty_tuple.type] { // CHECK:STDOUT: %.loc10_10.2: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/let/shadowed_decl.carbon b/toolchain/check/testdata/let/shadowed_decl.carbon index b2cdf4ec5a1e..e20f2d11ce8e 100644 --- a/toolchain/check/testdata/let/shadowed_decl.carbon +++ b/toolchain/check/testdata/let/shadowed_decl.carbon @@ -19,6 +19,7 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -52,10 +53,10 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %a.patt.loc11: %i32 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %i32 = value_param_pattern %a.patt.loc11, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt.loc11: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt.loc11, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -73,7 +74,7 @@ fn F(a: i32) -> i32 { // CHECK:STDOUT: fn @F(%a.param: %i32) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt.loc12: %i32 = binding_pattern a +// CHECK:STDOUT: %a.patt.loc12: %pattern_type.7ce = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %.loc12_10: type = splice_block %i32.loc12 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/namespace/add_to_import.carbon b/toolchain/check/testdata/namespace/add_to_import.carbon index e3736a4c07d5..f094456d8664 100644 --- a/toolchain/check/testdata/namespace/add_to_import.carbon +++ b/toolchain/check/testdata/namespace/add_to_import.carbon @@ -45,6 +45,7 @@ var a: i32 = NS.A(); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -85,8 +86,8 @@ var a: i32 = NS.A(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -94,8 +95,8 @@ var a: i32 = NS.A(); // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc6_1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc6_1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc6_8: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/namespace/alias.carbon b/toolchain/check/testdata/namespace/alias.carbon index c3d2700dda32..3110796a5271 100644 --- a/toolchain/check/testdata/namespace/alias.carbon +++ b/toolchain/check/testdata/namespace/alias.carbon @@ -25,6 +25,7 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -71,8 +72,8 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: %NS.ref.loc13: = name_ref NS, %NS [concrete = %NS] // CHECK:STDOUT: %ns: = bind_alias ns, %NS [concrete = %NS] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -80,8 +81,8 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -92,8 +93,8 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: %A.ref: %A.type = name_ref A, %A.decl [concrete = constants.%A] // CHECK:STDOUT: %C: %A.type = bind_alias C, %A.decl [concrete = constants.%A] // CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon b/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon index 4605db7dd116..c2860de37db4 100644 --- a/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon +++ b/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon @@ -27,6 +27,7 @@ fn ns.A() -> i32 { return 0; } // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -64,8 +65,8 @@ fn ns.A() -> i32 { return 0; } // CHECK:STDOUT: %NS.ref: = name_ref NS, %NS [concrete = %NS] // CHECK:STDOUT: %ns: = bind_alias ns, %NS [concrete = %NS] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/namespace/fail_params.carbon b/toolchain/check/testdata/namespace/fail_params.carbon index a39f8636b016..013a74ac0ca2 100644 --- a/toolchain/check/testdata/namespace/fail_params.carbon +++ b/toolchain/check/testdata/namespace/fail_params.carbon @@ -47,7 +47,8 @@ fn D(T:! type).F() {} // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type.b25: type = fn_type @F.2 [concrete] // CHECK:STDOUT: %F.c41: %F.type.b25 = struct_value () [concrete] // CHECK:STDOUT: } @@ -98,7 +99,7 @@ fn D(T:! type).F() {} // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F.2(%T.loc40_6.1: type) { // CHECK:STDOUT: %T.loc40_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc40_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/namespace/imported.carbon b/toolchain/check/testdata/namespace/imported.carbon index c5df68067276..19ca8b3751f8 100644 --- a/toolchain/check/testdata/namespace/imported.carbon +++ b/toolchain/check/testdata/namespace/imported.carbon @@ -69,6 +69,7 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] @@ -106,8 +107,8 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -116,8 +117,8 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b -// CHECK:STDOUT: %.loc5_1: %empty_tuple.type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc5_1: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var b // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.3 [concrete = constants.%empty_tuple.type] { @@ -126,8 +127,8 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_tuple.type = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %package_a.patt: %empty_tuple.type = binding_pattern package_a -// CHECK:STDOUT: %.loc7_1: %empty_tuple.type = var_pattern %package_a.patt +// CHECK:STDOUT: %package_a.patt: %pattern_type = binding_pattern package_a +// CHECK:STDOUT: %.loc7_1: %pattern_type = var_pattern %package_a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %package_a.var: ref %empty_tuple.type = var package_a // CHECK:STDOUT: %.loc7_17.1: type = splice_block %.loc7_17.3 [concrete = constants.%empty_tuple.type] { @@ -136,8 +137,8 @@ var package_b: () = package.NS.ChildNS.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %package_a: ref %empty_tuple.type = bind_name package_a, %package_a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %package_b.patt: %empty_tuple.type = binding_pattern package_b -// CHECK:STDOUT: %.loc8_1: %empty_tuple.type = var_pattern %package_b.patt +// CHECK:STDOUT: %package_b.patt: %pattern_type = binding_pattern package_b +// CHECK:STDOUT: %.loc8_1: %pattern_type = var_pattern %package_b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %package_b.var: ref %empty_tuple.type = var package_b // CHECK:STDOUT: %.loc8_17.1: type = splice_block %.loc8_17.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/namespace/imported_indirect.carbon b/toolchain/check/testdata/namespace/imported_indirect.carbon index a334271c4f8e..a732c0d7034f 100644 --- a/toolchain/check/testdata/namespace/imported_indirect.carbon +++ b/toolchain/check/testdata/namespace/imported_indirect.carbon @@ -119,6 +119,7 @@ fn G() { Same.F(); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -146,8 +147,8 @@ fn G() { Same.F(); } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %B: = namespace [concrete] {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %A.ref: = name_ref A, imports.%A [concrete = imports.%A] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Same.C [concrete = constants.%C] @@ -222,6 +223,7 @@ fn G() { Same.F(); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %D.type: type = fn_type @D [concrete] // CHECK:STDOUT: %D: %D.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -255,8 +257,8 @@ fn G() { Same.F(); } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %empty_tuple.type = binding_pattern e -// CHECK:STDOUT: %.loc5_1: %empty_tuple.type = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type = binding_pattern e +// CHECK:STDOUT: %.loc5_1: %pattern_type = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/namespace/merging_with_indirections.carbon b/toolchain/check/testdata/namespace/merging_with_indirections.carbon index 2ea36d0d657e..ec87df8dc023 100644 --- a/toolchain/check/testdata/namespace/merging_with_indirections.carbon +++ b/toolchain/check/testdata/namespace/merging_with_indirections.carbon @@ -84,6 +84,7 @@ fn Run() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %A: type = class_type @A [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %A.val: %A = struct_value () [concrete] @@ -118,8 +119,8 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %A = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %A = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %NS1.ref: = name_ref NS1, imports.%NS1 [concrete = imports.%NS1] // CHECK:STDOUT: %A.ref: type = name_ref A, imports.%Other.A [concrete = constants.%A] @@ -162,6 +163,7 @@ fn Run() { // CHECK:STDOUT: %A: type = class_type @A [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %A [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -213,8 +215,8 @@ fn Run() { // CHECK:STDOUT: %F.call.loc7: init %A = call %F.ref.loc7() to %.loc7_11.1 // CHECK:STDOUT: %.loc7_11.2: ref %A = temporary %.loc7_11.1, %F.call.loc7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %A = binding_pattern a -// CHECK:STDOUT: %.loc10_3: %A = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc10_3: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %A = var a // CHECK:STDOUT: %.loc10_19: type = splice_block %A.ref [concrete = constants.%A] { diff --git a/toolchain/check/testdata/namespace/shadow.carbon b/toolchain/check/testdata/namespace/shadow.carbon index 5a1fd53c8592..d3f0e25ffc6c 100644 --- a/toolchain/check/testdata/namespace/shadow.carbon +++ b/toolchain/check/testdata/namespace/shadow.carbon @@ -37,6 +37,7 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: %A.281: %A.type.0e8 = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -82,8 +83,8 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: .A = // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc18: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -105,8 +106,8 @@ fn N.M.B() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %A.patt: %i32 = binding_pattern A -// CHECK:STDOUT: %.loc22_5.1: %i32 = var_pattern %A.patt +// CHECK:STDOUT: %A.patt: %pattern_type.7ce = binding_pattern A +// CHECK:STDOUT: %.loc22_5.1: %pattern_type.7ce = var_pattern %A.patt // CHECK:STDOUT: } // CHECK:STDOUT: %A.var: ref %i32 = var A // CHECK:STDOUT: %int_0.loc22: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/operators/builtin/and.carbon b/toolchain/check/testdata/operators/builtin/and.carbon index fe14d7e2ba08..ca56e63d83fd 100644 --- a/toolchain/check/testdata/operators/builtin/and.carbon +++ b/toolchain/check/testdata/operators/builtin/and.carbon @@ -32,6 +32,7 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -42,6 +43,7 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %Constant.type: type = fn_type @Constant [concrete] // CHECK:STDOUT: %Constant: %Constant.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %PartialConstant.type: type = fn_type @PartialConstant [concrete] // CHECK:STDOUT: %PartialConstant: %PartialConstant.type = struct_value () [concrete] @@ -66,8 +68,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc11_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -76,8 +78,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc12_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -86,8 +88,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %And.decl: %And.type = fn_decl @And [concrete = constants.%And] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc14_13.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -97,8 +99,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Constant.decl: %Constant.type = fn_decl @Constant [concrete = constants.%Constant] {} {} // CHECK:STDOUT: %PartialConstant.decl: %PartialConstant.type = fn_decl @PartialConstant [concrete = constants.%PartialConstant] { -// CHECK:STDOUT: %x.patt: bool = binding_pattern x -// CHECK:STDOUT: %x.param_patt: bool = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.831 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc25_23.1: type = splice_block %.loc25_23.3 [concrete = bool] { @@ -146,8 +148,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: fn @Constant() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: bool = binding_pattern a -// CHECK:STDOUT: %.loc19_3: bool = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.831 = binding_pattern a +// CHECK:STDOUT: %.loc19_3: %pattern_type.831 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref bool = var a // CHECK:STDOUT: %true.loc19_47: bool = bool_literal true [concrete = constants.%true] @@ -185,8 +187,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc19_7: // CHECK:STDOUT: %a: ref bool = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b -// CHECK:STDOUT: %.loc20_3.1: %empty_tuple.type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.cb1 = binding_pattern b +// CHECK:STDOUT: %.loc20_3.1: %pattern_type.cb1 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var b // CHECK:STDOUT: %.loc20_49.1: %empty_tuple.type = tuple_literal () @@ -226,8 +228,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc20_7: // CHECK:STDOUT: %b: ref %empty_tuple.type = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %empty_tuple.type = binding_pattern c -// CHECK:STDOUT: %.loc21_3.1: %empty_tuple.type = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.cb1 = binding_pattern c +// CHECK:STDOUT: %.loc21_3.1: %pattern_type.cb1 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %empty_tuple.type = var c // CHECK:STDOUT: %.loc21_49.1: %empty_tuple.type = tuple_literal () @@ -267,8 +269,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc21_7: // CHECK:STDOUT: %c: ref %empty_tuple.type = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %empty_tuple.type = binding_pattern d -// CHECK:STDOUT: %.loc22_3.1: %empty_tuple.type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d +// CHECK:STDOUT: %.loc22_3.1: %pattern_type.cb1 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d // CHECK:STDOUT: %.loc22_50.1: %empty_tuple.type = tuple_literal () @@ -313,8 +315,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: fn @PartialConstant(%x.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc26_3.1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc26_3.1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc26_46.1: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/operators/builtin/assignment.carbon b/toolchain/check/testdata/operators/builtin/assignment.carbon index 1d525f008227..e8ffad03dd06 100644 --- a/toolchain/check/testdata/operators/builtin/assignment.carbon +++ b/toolchain/check/testdata/operators/builtin/assignment.carbon @@ -33,6 +33,7 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -52,6 +53,7 @@ fn Main() { // CHECK:STDOUT: %int_9.f88: %i32 = int_value 9 [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -72,9 +74,11 @@ fn Main() { // CHECK:STDOUT: %bound_method.1da: = bound_method %int_4.0c1, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.940: %i32 = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.851: type = pattern_type %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct: %struct_type.a.b.501 = struct_value (%int_1.5d2, %int_2.ef8) [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %Convert.bound.4e6: = bound_method %int_5.64b, %Convert.956 [concrete] // CHECK:STDOUT: %bound_method.a25: = bound_method %int_5.64b, %Convert.specific_fn [concrete] @@ -107,8 +111,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc12_3.1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12.6a3] @@ -134,8 +138,8 @@ fn Main() { // CHECK:STDOUT: %.loc13: init %i32 = converted %int_9, %int.convert_checked.loc13 [concrete = constants.%int_9.f88] // CHECK:STDOUT: assign %a.ref.loc13, %.loc13 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %tuple.type.d07 = binding_pattern b -// CHECK:STDOUT: %.loc15_3.1: %tuple.type.d07 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.511 = binding_pattern b +// CHECK:STDOUT: %.loc15_3.1: %pattern_type.511 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.d07 = var b // CHECK:STDOUT: %int_1.loc15: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -192,8 +196,8 @@ fn Main() { // CHECK:STDOUT: %.loc17: init %i32 = converted %int_4.loc17, %int.convert_checked.loc17 [concrete = constants.%int_4.940] // CHECK:STDOUT: assign %tuple.elem1.loc17, %.loc17 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %struct_type.a.b.501 = binding_pattern c -// CHECK:STDOUT: %.loc19_3.1: %struct_type.a.b.501 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.851 = binding_pattern c +// CHECK:STDOUT: %.loc19_3.1: %pattern_type.851 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %struct_type.a.b.501 = var c // CHECK:STDOUT: %int_1.loc19: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -247,8 +251,8 @@ fn Main() { // CHECK:STDOUT: %.loc21_7: init %i32 = converted %int_4.loc21, %int.convert_checked.loc21 [concrete = constants.%int_4.940] // CHECK:STDOUT: assign %.loc21_4, %.loc21_7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %ptr.235 = binding_pattern p -// CHECK:STDOUT: %.loc23_3: %ptr.235 = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: %pattern_type.fe8 = binding_pattern p +// CHECK:STDOUT: %.loc23_3: %pattern_type.fe8 = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.235 = var p // CHECK:STDOUT: %a.ref.loc23: ref %i32 = name_ref a, %a diff --git a/toolchain/check/testdata/operators/builtin/fail_and_or_not_in_function.carbon b/toolchain/check/testdata/operators/builtin/fail_and_or_not_in_function.carbon index f8907a9f406a..b048f6cd3ed8 100644 --- a/toolchain/check/testdata/operators/builtin/fail_and_or_not_in_function.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_and_or_not_in_function.carbon @@ -81,7 +81,7 @@ var or_val: bool = true or true; // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%b.param: bool) -> type { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %b.ref: bool = name_ref b, .inst27.loc5_6 +// CHECK:STDOUT: %b.ref: bool = name_ref b, .inst28.loc5_6 // CHECK:STDOUT: if %b.ref br !if.expr.then else br !if.expr.else // CHECK:STDOUT: // CHECK:STDOUT: !if.expr.then: @@ -122,7 +122,7 @@ var or_val: bool = true or true; // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%b.param: bool) -> type { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %b.ref: bool = name_ref b, .inst27.loc5_6 +// CHECK:STDOUT: %b.ref: bool = name_ref b, .inst28.loc5_6 // CHECK:STDOUT: if %b.ref br !if.expr.then else br !if.expr.else // CHECK:STDOUT: // CHECK:STDOUT: !if.expr.then: diff --git a/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon b/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon index 8adad9d6570b..3b7ece43bfef 100644 --- a/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_and_or_partial_constant.carbon @@ -50,6 +50,7 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %PartialConstant.type: type = fn_type @PartialConstant [concrete] // CHECK:STDOUT: %PartialConstant: %PartialConstant.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -71,8 +72,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %PartialConstant.decl: %PartialConstant.type = fn_decl @PartialConstant [concrete = constants.%PartialConstant] { -// CHECK:STDOUT: %x.patt: bool = binding_pattern x -// CHECK:STDOUT: %x.param_patt: bool = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.831 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc4_23.1: type = splice_block %.loc4_23.3 [concrete = bool] { @@ -170,6 +171,7 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %KnownValueButNonConstantCondition.type: type = fn_type @KnownValueButNonConstantCondition [concrete] // CHECK:STDOUT: %KnownValueButNonConstantCondition: %KnownValueButNonConstantCondition.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] @@ -191,8 +193,8 @@ fn KnownValueButNonConstantCondition(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %KnownValueButNonConstantCondition.decl: %KnownValueButNonConstantCondition.type = fn_decl @KnownValueButNonConstantCondition [concrete = constants.%KnownValueButNonConstantCondition] { -// CHECK:STDOUT: %x.patt: bool = binding_pattern x -// CHECK:STDOUT: %x.param_patt: bool = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.831 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc4_41.1: type = splice_block %.loc4_41.3 [concrete = bool] { diff --git a/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon b/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon index 9e5708467a21..453b4a7b5fbe 100644 --- a/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_assignment_to_non_assignable.carbon @@ -62,6 +62,7 @@ fn Main() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -125,8 +126,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -169,8 +170,8 @@ fn Main() { // CHECK:STDOUT: %tuple.loc28: %tuple.type.f94 = tuple_value (%int_1.loc28, %int_2.loc28) [concrete = constants.%tuple.ad8] // CHECK:STDOUT: %.loc28_8.2: %tuple.type.f94 = converted %.loc28_8.1, %tuple.loc28 [concrete = constants.%tuple.ad8] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %.loc29_3.1: %i32 = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %.loc29_3.1: %pattern_type.7ce = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var n // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -274,8 +275,8 @@ fn Main() { // CHECK:STDOUT: %.loc49_27: init %i32 = converted %int_3.loc49, %int.convert_checked.loc49_27 [concrete = constants.%int_3.822] // CHECK:STDOUT: assign %.loc49_4, %.loc49_27 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc52_3: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc52_3: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc52_10: type = splice_block %i32.loc52 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon b/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon index bfefb2537a3c..af7340aa2e5a 100644 --- a/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_redundant_compound_access.carbon @@ -29,6 +29,7 @@ fn Main() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -69,8 +70,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -96,8 +97,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc14_3.1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] diff --git a/toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon b/toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon index ad4d3ed38c91..0f5c3521eb5d 100644 --- a/toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon @@ -26,6 +26,7 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -50,8 +51,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: bool = binding_pattern x -// CHECK:STDOUT: %.loc19_3: bool = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.831 = binding_pattern x +// CHECK:STDOUT: %.loc19_3: %pattern_type.831 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref bool = var x // CHECK:STDOUT: %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12] diff --git a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon index 313dd0c386e9..34f1da0f873f 100644 --- a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_assignment.carbon @@ -27,6 +27,7 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -64,8 +65,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc12_3.1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] diff --git a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon index ccef4b3e48cc..cadc37d0148a 100644 --- a/toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon @@ -23,6 +23,7 @@ fn Main() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -46,8 +47,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon b/toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon index 22d6bc5532ac..3b5133bc1570 100644 --- a/toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon +++ b/toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon @@ -21,6 +21,7 @@ fn Main() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -43,8 +44,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/operators/builtin/or.carbon b/toolchain/check/testdata/operators/builtin/or.carbon index 09eec95d59dc..d249f1367093 100644 --- a/toolchain/check/testdata/operators/builtin/or.carbon +++ b/toolchain/check/testdata/operators/builtin/or.carbon @@ -32,6 +32,7 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -42,6 +43,7 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %Constant.type: type = fn_type @Constant [concrete] // CHECK:STDOUT: %Constant: %Constant.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %PartialConstant.type: type = fn_type @PartialConstant [concrete] // CHECK:STDOUT: %PartialConstant: %PartialConstant.type = struct_value () [concrete] @@ -66,8 +68,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc11_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -76,8 +78,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc12_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -86,8 +88,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Or.decl: %Or.type = fn_decl @Or [concrete = constants.%Or] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc14_12.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -97,8 +99,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: } // CHECK:STDOUT: %Constant.decl: %Constant.type = fn_decl @Constant [concrete = constants.%Constant] {} {} // CHECK:STDOUT: %PartialConstant.decl: %PartialConstant.type = fn_decl @PartialConstant [concrete = constants.%PartialConstant] { -// CHECK:STDOUT: %x.patt: bool = binding_pattern x -// CHECK:STDOUT: %x.param_patt: bool = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.831 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.831 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: bool = value_param call_param0 // CHECK:STDOUT: %.loc25_23.1: type = splice_block %.loc25_23.3 [concrete = bool] { @@ -147,8 +149,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: fn @Constant() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: bool = binding_pattern a -// CHECK:STDOUT: %.loc19_3: bool = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.831 = binding_pattern a +// CHECK:STDOUT: %.loc19_3: %pattern_type.831 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref bool = var a // CHECK:STDOUT: %true.loc19_46: bool = bool_literal true [concrete = constants.%true] @@ -187,8 +189,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc19_7: // CHECK:STDOUT: %a: ref bool = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %.loc20_3: bool = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %.loc20_3: %pattern_type.831 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref bool = var b // CHECK:STDOUT: %true.loc20_47: bool = bool_literal true [concrete = constants.%true] @@ -227,8 +229,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc20_7: // CHECK:STDOUT: %b: ref bool = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: bool = binding_pattern c -// CHECK:STDOUT: %.loc21_3: bool = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.831 = binding_pattern c +// CHECK:STDOUT: %.loc21_3: %pattern_type.831 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref bool = var c // CHECK:STDOUT: %true.loc21_47: bool = bool_literal true [concrete = constants.%true] @@ -267,8 +269,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: !.loc21_7: // CHECK:STDOUT: %c: ref bool = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %empty_tuple.type = binding_pattern d -// CHECK:STDOUT: %.loc22_3.1: %empty_tuple.type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d +// CHECK:STDOUT: %.loc22_3.1: %pattern_type.cb1 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d // CHECK:STDOUT: %.loc22_49.1: %empty_tuple.type = tuple_literal () @@ -314,8 +316,8 @@ fn PartialConstant(x: bool) { // CHECK:STDOUT: fn @PartialConstant(%x.param: bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: bool = binding_pattern a -// CHECK:STDOUT: %.loc26_3: bool = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.831 = binding_pattern a +// CHECK:STDOUT: %.loc26_3: %pattern_type.831 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref bool = var a // CHECK:STDOUT: %true.loc26_43: bool = bool_literal true [concrete = constants.%true] diff --git a/toolchain/check/testdata/operators/builtin/unary_op.carbon b/toolchain/check/testdata/operators/builtin/unary_op.carbon index 300f8f8072d1..230594c819ae 100644 --- a/toolchain/check/testdata/operators/builtin/unary_op.carbon +++ b/toolchain/check/testdata/operators/builtin/unary_op.carbon @@ -26,12 +26,14 @@ fn Constant() { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Not.type: type = fn_type @Not [concrete] // CHECK:STDOUT: %Not: %Not.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] // CHECK:STDOUT: %Constant.type: type = fn_type @Constant [concrete] // CHECK:STDOUT: %Constant: %Constant.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -53,10 +55,10 @@ fn Constant() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Not.decl: %Not.type = fn_decl @Not [concrete = constants.%Not] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type.loc11_20: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc11_20.1: type = value_of_initializer %bool.make_type.loc11_20 [concrete = bool] @@ -72,7 +74,7 @@ fn Constant() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_true.patt: bool = binding_pattern not_true +// CHECK:STDOUT: %not_true.patt: %pattern_type.831 = binding_pattern not_true // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15_15.1: type = splice_block %.loc15_15.3 [concrete = bool] { // CHECK:STDOUT: %bool.make_type.loc15: init type = call constants.%Bool() [concrete = bool] @@ -81,7 +83,7 @@ fn Constant() { // CHECK:STDOUT: } // CHECK:STDOUT: %not_true: bool = bind_name not_true, @__global_init.%.loc15 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %not_false.patt: bool = binding_pattern not_false +// CHECK:STDOUT: %not_false.patt: %pattern_type.831 = binding_pattern not_false // CHECK:STDOUT: } // CHECK:STDOUT: %.loc16_16.1: type = splice_block %.loc16_16.3 [concrete = bool] { // CHECK:STDOUT: %bool.make_type.loc16: init type = call constants.%Bool() [concrete = bool] @@ -102,8 +104,8 @@ fn Constant() { // CHECK:STDOUT: fn @Constant() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc19_3.1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a +// CHECK:STDOUT: %.loc19_3.1: %pattern_type.cb1 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc19_43.1: %empty_tuple.type = tuple_literal () @@ -135,8 +137,8 @@ fn Constant() { // CHECK:STDOUT: !.loc19_7: // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %.loc20_3: bool = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %.loc20_3: %pattern_type.831 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref bool = var b // CHECK:STDOUT: %true.loc20: bool = bool_literal true [concrete = constants.%true] diff --git a/toolchain/check/testdata/operators/overloaded/add.carbon b/toolchain/check/testdata/operators/overloaded/add.carbon index 40d5ae82cc90..a1f720ece857 100644 --- a/toolchain/check/testdata/operators/overloaded/add.carbon +++ b/toolchain/check/testdata/operators/overloaded/add.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.545: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Add.impl_witness: = impl_witness file.%Add.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.7a3: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.c84: %Op.type.7a3 = struct_value () [concrete] // CHECK:STDOUT: %Add.facet: %Add.type = facet_value %C, (%Add.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %AddAssign.type: type = facet_type <@AddAssign> [concrete] // CHECK:STDOUT: %Op.type.421: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %AddAssign.impl_witness: = impl_witness file.%AddAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.0b8: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.d8e: %Op.type.0b8 = struct_value () [concrete] // CHECK:STDOUT: %AddAssign.facet: %AddAssign.type = facet_value %C, (%AddAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %AddAssign.impl_witness_table = impl_witness_table (@impl.14c.%Op.decl), @impl.14c [concrete] // CHECK:STDOUT: %AddAssign.impl_witness: = impl_witness %AddAssign.impl_witness_table [concrete = constants.%AddAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.b32: %C.ref as %Add.ref { // CHECK:STDOUT: %Op.decl: %Op.type.7a3 = fn_decl @Op.2 [concrete = constants.%Op.c84] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.14c: %C.ref as %AddAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.0b8 = fn_decl @Op.4 [concrete = constants.%Op.d8e] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/bit_and.carbon b/toolchain/check/testdata/operators/overloaded/bit_and.carbon index 6b4bfb21c7d0..4e1650f0bdb0 100644 --- a/toolchain/check/testdata/operators/overloaded/bit_and.carbon +++ b/toolchain/check/testdata/operators/overloaded/bit_and.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %BitAnd.impl_witness: = impl_witness file.%BitAnd.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.45e: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.c43: %Op.type.45e = struct_value () [concrete] // CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value %C, (%BitAnd.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %BitAndAssign.type: type = facet_type <@BitAndAssign> [concrete] // CHECK:STDOUT: %Op.type.93f: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %BitAndAssign.impl_witness: = impl_witness file.%BitAndAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.969: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.747: %Op.type.969 = struct_value () [concrete] // CHECK:STDOUT: %BitAndAssign.facet: %BitAndAssign.type = facet_value %C, (%BitAndAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %BitAndAssign.impl_witness_table = impl_witness_table (@impl.4ac.%Op.decl), @impl.4ac [concrete] // CHECK:STDOUT: %BitAndAssign.impl_witness: = impl_witness %BitAndAssign.impl_witness_table [concrete = constants.%BitAndAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c1a: %C.ref as %BitAnd.ref { // CHECK:STDOUT: %Op.decl: %Op.type.45e = fn_decl @Op.2 [concrete = constants.%Op.c43] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.4ac: %C.ref as %BitAndAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.969 = fn_decl @Op.4 [concrete = constants.%Op.747] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/bit_complement.carbon b/toolchain/check/testdata/operators/overloaded/bit_complement.carbon index 6ecc33c9e41a..df6e9a87723b 100644 --- a/toolchain/check/testdata/operators/overloaded/bit_complement.carbon +++ b/toolchain/check/testdata/operators/overloaded/bit_complement.carbon @@ -33,6 +33,7 @@ fn TestOp(a: C) -> C { // CHECK:STDOUT: %BitComplement.type: type = facet_type <@BitComplement> [concrete] // CHECK:STDOUT: %Op.type.f25: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %BitComplement.impl_witness: = impl_witness file.%BitComplement.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.544: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.bf2: %Op.type.544 = struct_value () [concrete] // CHECK:STDOUT: %BitComplement.facet: %BitComplement.type = facet_value %C, (%BitComplement.impl_witness) [concrete] @@ -67,10 +68,10 @@ fn TestOp(a: C) -> C { // CHECK:STDOUT: %BitComplement.impl_witness_table = impl_witness_table (@impl.5a3.%Op.decl), @impl.5a3 [concrete] // CHECK:STDOUT: %BitComplement.impl_witness: = impl_witness %BitComplement.impl_witness_table [concrete = constants.%BitComplement.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc23_20: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -83,10 +84,10 @@ fn TestOp(a: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.5a3: %C.ref as %BitComplement.ref { // CHECK:STDOUT: %Op.decl: %Op.type.544 = fn_decl @Op.2 [concrete = constants.%Op.bf2] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_23: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 diff --git a/toolchain/check/testdata/operators/overloaded/bit_or.carbon b/toolchain/check/testdata/operators/overloaded/bit_or.carbon index 885d22c4f4d6..746888a29c3c 100644 --- a/toolchain/check/testdata/operators/overloaded/bit_or.carbon +++ b/toolchain/check/testdata/operators/overloaded/bit_or.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.9bb: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %BitOr.impl_witness: = impl_witness file.%BitOr.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.951: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.59a: %Op.type.951 = struct_value () [concrete] // CHECK:STDOUT: %BitOr.facet: %BitOr.type = facet_value %C, (%BitOr.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %BitOrAssign.type: type = facet_type <@BitOrAssign> [concrete] // CHECK:STDOUT: %Op.type.099: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %BitOrAssign.impl_witness: = impl_witness file.%BitOrAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.8ba: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.b27: %Op.type.8ba = struct_value () [concrete] // CHECK:STDOUT: %BitOrAssign.facet: %BitOrAssign.type = facet_value %C, (%BitOrAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %BitOrAssign.impl_witness_table = impl_witness_table (@impl.04f.%Op.decl), @impl.04f [concrete] // CHECK:STDOUT: %BitOrAssign.impl_witness: = impl_witness %BitOrAssign.impl_witness_table [concrete = constants.%BitOrAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.8f6: %C.ref as %BitOr.ref { // CHECK:STDOUT: %Op.decl: %Op.type.951 = fn_decl @Op.2 [concrete = constants.%Op.59a] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.04f: %C.ref as %BitOrAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.8ba = fn_decl @Op.4 [concrete = constants.%Op.b27] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/bit_xor.carbon b/toolchain/check/testdata/operators/overloaded/bit_xor.carbon index af8b6d20c8e2..123b6d1f1f87 100644 --- a/toolchain/check/testdata/operators/overloaded/bit_xor.carbon +++ b/toolchain/check/testdata/operators/overloaded/bit_xor.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.e96: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %BitXor.impl_witness: = impl_witness file.%BitXor.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.672: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.442: %Op.type.672 = struct_value () [concrete] // CHECK:STDOUT: %BitXor.facet: %BitXor.type = facet_value %C, (%BitXor.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %BitXorAssign.type: type = facet_type <@BitXorAssign> [concrete] // CHECK:STDOUT: %Op.type.58d: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %BitXorAssign.impl_witness: = impl_witness file.%BitXorAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.8ab: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.67d: %Op.type.8ab = struct_value () [concrete] // CHECK:STDOUT: %BitXorAssign.facet: %BitXorAssign.type = facet_value %C, (%BitXorAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %BitXorAssign.impl_witness_table = impl_witness_table (@impl.9ba.%Op.decl), @impl.9ba [concrete] // CHECK:STDOUT: %BitXorAssign.impl_witness: = impl_witness %BitXorAssign.impl_witness_table [concrete = constants.%BitXorAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.2e5: %C.ref as %BitXor.ref { // CHECK:STDOUT: %Op.decl: %Op.type.672 = fn_decl @Op.2 [concrete = constants.%Op.442] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.9ba: %C.ref as %BitXorAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.8ab = fn_decl @Op.4 [concrete = constants.%Op.67d] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/dec.carbon b/toolchain/check/testdata/operators/overloaded/dec.carbon index 7a21315efc8a..db142e73d0a8 100644 --- a/toolchain/check/testdata/operators/overloaded/dec.carbon +++ b/toolchain/check/testdata/operators/overloaded/dec.carbon @@ -32,13 +32,16 @@ fn TestOp() { // CHECK:STDOUT: %Dec.type: type = facet_type <@Dec> [concrete] // CHECK:STDOUT: %Op.type.633: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %Dec.impl_witness: = impl_witness file.%Dec.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.9e0: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.cf9: %Op.type.9e0 = struct_value () [concrete] // CHECK:STDOUT: %Dec.facet: %Dec.type = facet_value %C, (%Dec.impl_witness) [concrete] // CHECK:STDOUT: %TestOp.type: type = fn_type @TestOp [concrete] // CHECK:STDOUT: %TestOp: %TestOp.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.859: type = fn_type_with_self_type %Op.type.633, %Dec.facet [concrete] // CHECK:STDOUT: } @@ -72,9 +75,9 @@ fn TestOp() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.7f9: %C.ref as %Dec.ref { // CHECK:STDOUT: %Op.decl: %Op.type.9e0 = fn_decl @Op.2 [concrete = constants.%Op.cf9] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc18_9: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc18_9: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc18_21: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -104,8 +107,8 @@ fn TestOp() { // CHECK:STDOUT: fn @TestOp() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc22_3.1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc22_3.1: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc22_15.1: %empty_struct_type = struct_literal () diff --git a/toolchain/check/testdata/operators/overloaded/div.carbon b/toolchain/check/testdata/operators/overloaded/div.carbon index bc46e69a95e0..ddcbcbdd60ad 100644 --- a/toolchain/check/testdata/operators/overloaded/div.carbon +++ b/toolchain/check/testdata/operators/overloaded/div.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.784: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Div.impl_witness: = impl_witness file.%Div.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.750: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.21e: %Op.type.750 = struct_value () [concrete] // CHECK:STDOUT: %Div.facet: %Div.type = facet_value %C, (%Div.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %DivAssign.type: type = facet_type <@DivAssign> [concrete] // CHECK:STDOUT: %Op.type.b95: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %DivAssign.impl_witness: = impl_witness file.%DivAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.b04: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.27c: %Op.type.b04 = struct_value () [concrete] // CHECK:STDOUT: %DivAssign.facet: %DivAssign.type = facet_value %C, (%DivAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %DivAssign.impl_witness_table = impl_witness_table (@impl.73d.%Op.decl), @impl.73d [concrete] // CHECK:STDOUT: %DivAssign.impl_witness: = impl_witness %DivAssign.impl_witness_table [concrete = constants.%DivAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.534: %C.ref as %Div.ref { // CHECK:STDOUT: %Op.decl: %Op.type.750 = fn_decl @Op.2 [concrete = constants.%Op.21e] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.73d: %C.ref as %DivAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.b04 = fn_decl @Op.4 [concrete = constants.%Op.27c] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/eq.carbon b/toolchain/check/testdata/operators/overloaded/eq.carbon index 76bd6aa507c4..b0d1f7880c7a 100644 --- a/toolchain/check/testdata/operators/overloaded/eq.carbon +++ b/toolchain/check/testdata/operators/overloaded/eq.carbon @@ -91,8 +91,10 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Eq.type: type = facet_type <@Eq> [concrete] // CHECK:STDOUT: %Equal.type.79c: type = fn_type @Equal.1 [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %NotEqual.type.e6c: type = fn_type @NotEqual.1 [concrete] // CHECK:STDOUT: %Eq.impl_witness: = impl_witness file.%Eq.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %Equal.type.b4a: type = fn_type @Equal.2 [concrete] @@ -135,12 +137,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %Eq.impl_witness_table = impl_witness_table (@impl.100.%Equal.decl, @impl.100.%NotEqual.decl), @impl.100 [concrete] // CHECK:STDOUT: %Eq.impl_witness: = impl_witness %Eq.impl_witness_table [concrete = constants.%Eq.impl_witness] // CHECK:STDOUT: %TestEqual.decl: %TestEqual.type = fn_decl @TestEqual [concrete = constants.%TestEqual] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc11_29.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -155,12 +157,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestNotEqual.decl: %TestNotEqual.type = fn_decl @TestNotEqual [concrete = constants.%TestNotEqual] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc15_32.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -178,12 +180,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.100: %C.ref as %Eq.ref { // CHECK:STDOUT: %Equal.decl: %Equal.type.b4a = fn_decl @Equal.2 [concrete = constants.%Equal.f96] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc7_34.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -198,12 +200,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %NotEqual.decl: %NotEqual.type.a7d = fn_decl @NotEqual.2 [concrete = constants.%NotEqual.c3f] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc8_37.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -268,8 +270,10 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %TestEqual.type: type = fn_type @TestEqual [concrete] // CHECK:STDOUT: %TestEqual: %TestEqual.type = struct_value () [concrete] // CHECK:STDOUT: %TestNotEqual.type: type = fn_type @TestNotEqual [concrete] @@ -295,12 +299,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %TestEqual.decl: %TestEqual.type = fn_decl @TestEqual [concrete = constants.%TestEqual] { -// CHECK:STDOUT: %a.patt: %D = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %D = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.510 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.510 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc6_29.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -315,12 +319,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestNotEqual.decl: %TestNotEqual.type = fn_decl @TestNotEqual [concrete = constants.%TestNotEqual] { -// CHECK:STDOUT: %a.patt: %D = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %D = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.510 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.510 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc14_32.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -368,7 +372,9 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %Eq.type: type = facet_type <@Eq> [concrete] // CHECK:STDOUT: %Equal.type.79c: type = fn_type @Equal.1 [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Eq.impl_witness: = impl_witness file.%Eq.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %Equal.type.b4a: type = fn_type @Equal.2 [concrete] @@ -376,6 +382,7 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %NotEqual.type.a7d: type = fn_type @NotEqual.2 [concrete] // CHECK:STDOUT: %NotEqual.c3f: %NotEqual.type.a7d = struct_value () [concrete] // CHECK:STDOUT: %Eq.facet: %Eq.type = facet_value %C, (%Eq.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %TestRhsBad.type: type = fn_type @TestRhsBad [concrete] // CHECK:STDOUT: %TestRhsBad: %TestRhsBad.type = struct_value () [concrete] // CHECK:STDOUT: %.b8f: type = fn_type_with_self_type %Equal.type.79c, %Eq.facet [concrete] @@ -413,12 +420,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %Eq.impl_witness_table = impl_witness_table (@impl.100.%Equal.decl, @impl.100.%NotEqual.decl), @impl.100 [concrete] // CHECK:STDOUT: %Eq.impl_witness: = impl_witness %Eq.impl_witness_table [concrete = constants.%Eq.impl_witness] // CHECK:STDOUT: %TestRhsBad.decl: %TestRhsBad.type = fn_decl @TestRhsBad [concrete = constants.%TestRhsBad] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc12_30.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -433,12 +440,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestLhsBad.decl: %TestLhsBad.type = fn_decl @TestLhsBad [concrete = constants.%TestLhsBad] { -// CHECK:STDOUT: %a.patt: %D = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %D = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.510 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.510 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc26_30.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -456,12 +463,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.100: %C.ref as %Eq.ref { // CHECK:STDOUT: %Equal.decl: %Equal.type.b4a = fn_decl @Equal.2 [concrete = constants.%Equal.f96] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc8_34.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -476,12 +483,12 @@ fn TestLhsBad(a: D, b: C) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %NotEqual.decl: %NotEqual.type.a7d = fn_decl @NotEqual.2 [concrete = constants.%NotEqual.c3f] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc9_37.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon b/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon index 425d24ef2e45..cb620d05081b 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon @@ -50,14 +50,17 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete] // CHECK:STDOUT: %Op.type.e3a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %Inc.impl_witness: = impl_witness file.%Inc.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.73a: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.0c9: %Op.type.73a = struct_value () [concrete] // CHECK:STDOUT: %Inc.facet: %Inc.type = facet_value %C, (%Inc.impl_witness) [concrete] // CHECK:STDOUT: %AddAssign.type: type = facet_type <@AddAssign> [concrete] // CHECK:STDOUT: %Op.type.421: type = fn_type @Op.3 [concrete] // CHECK:STDOUT: %AddAssign.impl_witness: = impl_witness file.%AddAssign.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.0b8: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.d8e: %Op.type.0b8 = struct_value () [concrete] // CHECK:STDOUT: %AddAssign.facet: %AddAssign.type = facet_value %C, (%AddAssign.impl_witness) [concrete] @@ -104,18 +107,18 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: %AddAssign.impl_witness_table = impl_witness_table (@impl.14c.%Op.decl), @impl.14c [concrete] // CHECK:STDOUT: %AddAssign.impl_witness: = impl_witness %AddAssign.impl_witness_table [concrete = constants.%AddAssign.impl_witness] // CHECK:STDOUT: %TestIncNonRef.decl: %TestIncNonRef.type = fn_decl @TestIncNonRef [concrete = constants.%TestIncNonRef] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a: %C = bind_name a, %a.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAddAssignNonRef.decl: %TestAddAssignNonRef.type = fn_decl @TestAddAssignNonRef [concrete = constants.%TestAddAssignNonRef] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc33_27: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -128,9 +131,9 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c51: %C.ref as %Inc.ref { // CHECK:STDOUT: %Op.decl: %Op.type.73a = fn_decl @Op.2 [concrete = constants.%Op.0c9] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc16_9: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc16_9: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc16_21: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -148,11 +151,11 @@ fn TestAddAssignNonRef(a: C, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.14c: %C.ref as %AddAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.0b8 = fn_decl @Op.4 [concrete = constants.%Op.d8e] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc19_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc19_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc19_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon b/toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon index ffdf12409ab4..7ce1811541f1 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon @@ -37,6 +37,7 @@ fn G(n: i32) { // CHECK:STDOUT: %Op.type.545: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Add.impl_witness_table = impl_witness_table (imports.%Core.import_ref.344), @impl.2c2 [concrete] @@ -66,8 +67,8 @@ fn G(n: i32) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc22: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon b/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon index f7372c5902a2..43bbedb77310 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon @@ -48,6 +48,7 @@ fn TestRef(b: C) { // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %TestUnary.type: type = fn_type @TestUnary [concrete] // CHECK:STDOUT: %TestUnary: %TestUnary.type = struct_value () [concrete] // CHECK:STDOUT: %TestBinary.type: type = fn_type @TestBinary [concrete] @@ -79,10 +80,10 @@ fn TestRef(b: C) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %TestUnary.decl: %TestUnary.type = fn_decl @TestUnary [concrete = constants.%TestUnary] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc15_23: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -92,12 +93,12 @@ fn TestRef(b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestBinary.decl: %TestBinary.type = fn_decl @TestBinary [concrete = constants.%TestBinary] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc23_30: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -110,8 +111,8 @@ fn TestRef(b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestRef.decl: %TestRef.type = fn_decl @TestRef [concrete = constants.%TestRef] { -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %C = value_param call_param0 // CHECK:STDOUT: %C.ref.loc31: type = name_ref C, file.%C.decl [concrete = constants.%C] @@ -144,8 +145,8 @@ fn TestRef(b: C) { // CHECK:STDOUT: fn @TestRef(%b.param: %C) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %.loc32_3.1: %C = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %.loc32_3.1: %pattern_type.c48 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C = var a // CHECK:STDOUT: %.loc32_15.1: %empty_struct_type = struct_literal () diff --git a/toolchain/check/testdata/operators/overloaded/fail_no_impl_for_arg.carbon b/toolchain/check/testdata/operators/overloaded/fail_no_impl_for_arg.carbon index 7e10d827b87a..393ec074a1ae 100644 --- a/toolchain/check/testdata/operators/overloaded/fail_no_impl_for_arg.carbon +++ b/toolchain/check/testdata/operators/overloaded/fail_no_impl_for_arg.carbon @@ -60,16 +60,20 @@ fn TestAssign(b: D) { // CHECK:STDOUT: %Op.type.545: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Add.impl_witness: = impl_witness file.%Add.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.7a3: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.c84: %Op.type.7a3 = struct_value () [concrete] // CHECK:STDOUT: %Add.facet: %Add.type = facet_value %C, (%Add.impl_witness) [concrete] // CHECK:STDOUT: %AddAssign.type: type = facet_type <@AddAssign> [concrete] // CHECK:STDOUT: %Op.type.421: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %AddAssign.impl_witness: = impl_witness file.%AddAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.0b8: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.d8e: %Op.type.0b8 = struct_value () [concrete] // CHECK:STDOUT: %AddAssign.facet: %AddAssign.type = facet_value %C, (%AddAssign.impl_witness) [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %Test.type: type = fn_type @Test [concrete] // CHECK:STDOUT: %Test: %Test.type = struct_value () [concrete] // CHECK:STDOUT: %.de4: type = fn_type_with_self_type %Op.type.545, %Add.facet [concrete] @@ -117,12 +121,12 @@ fn TestAssign(b: D) { // CHECK:STDOUT: %AddAssign.impl_witness_table = impl_witness_table (@impl.14c.%Op.decl), @impl.14c [concrete] // CHECK:STDOUT: %AddAssign.impl_witness: = impl_witness %AddAssign.impl_witness_table [concrete = constants.%AddAssign.impl_witness] // CHECK:STDOUT: %Test.decl: %Test.type = fn_decl @Test [concrete = constants.%Test] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc23_24: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -135,8 +139,8 @@ fn TestAssign(b: D) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %b.param: %D = value_param call_param0 // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] @@ -146,12 +150,12 @@ fn TestAssign(b: D) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.b32: %C.ref as %Add.ref { // CHECK:STDOUT: %Op.decl: %Op.type.7a3 = fn_decl @Op.2 [concrete = constants.%Op.c84] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc17_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -172,11 +176,11 @@ fn TestAssign(b: D) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.14c: %C.ref as %AddAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.0b8 = fn_decl @Op.4 [concrete = constants.%Op.d8e] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc20_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc20_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc20_21: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -232,8 +236,8 @@ fn TestAssign(b: D) { // CHECK:STDOUT: fn @TestAssign(%b.param: %D) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %.loc38_3.1: %C = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %.loc38_3.1: %pattern_type.c48 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %C = var a // CHECK:STDOUT: %.loc38_15.1: %empty_struct_type = struct_literal () diff --git a/toolchain/check/testdata/operators/overloaded/implicit_as.carbon b/toolchain/check/testdata/operators/overloaded/implicit_as.carbon index eb57da94f525..76c23c231565 100644 --- a/toolchain/check/testdata/operators/overloaded/implicit_as.carbon +++ b/toolchain/check/testdata/operators/overloaded/implicit_as.carbon @@ -45,9 +45,12 @@ fn Test() { // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %ImplicitAs.type.ac8: type = facet_type <@ImplicitAs, @ImplicitAs(%X)> [concrete] // CHECK:STDOUT: %Convert.type.665: type = fn_type @Convert.1, @ImplicitAs(%X) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.aa3: = impl_witness file.%ImplicitAs.impl_witness_table.loc15 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %Convert.type.853: type = fn_type @Convert.2 [concrete] // CHECK:STDOUT: %Convert.08a: %Convert.type.853 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.d80: %ImplicitAs.type.ac8 = facet_value %i32, (%ImplicitAs.impl_witness.aa3) [concrete] @@ -62,7 +65,8 @@ fn Test() { // CHECK:STDOUT: %Sink_X.type: type = fn_type @Sink_X [concrete] // CHECK:STDOUT: %Sink_X: %Sink_X.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dcd0a.2: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Source.type: type = fn_type @Source [concrete] // CHECK:STDOUT: %Source: %Source.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.4ae: = require_complete_type %T [symbolic] @@ -117,8 +121,8 @@ fn Test() { // CHECK:STDOUT: %ImplicitAs.impl_witness_table.loc19 = impl_witness_table (@impl.c94.%Convert.decl), @impl.c94 [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.loc19: = impl_witness %ImplicitAs.impl_witness_table.loc19 [concrete = constants.%ImplicitAs.impl_witness.b30] // CHECK:STDOUT: %Sink_i32.decl: %Sink_i32.type = fn_decl @Sink_i32 [concrete = constants.%Sink_i32] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc25: type = splice_block %i32 [concrete = constants.%i32] { @@ -128,17 +132,17 @@ fn Test() { // CHECK:STDOUT: %n: %i32 = bind_name n, %n.param // CHECK:STDOUT: } // CHECK:STDOUT: %Sink_X.decl: %Sink_X.type = fn_decl @Sink_X [concrete = constants.%Sink_X] { -// CHECK:STDOUT: %x.patt: %X = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %X = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.019 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.019 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %X = value_param call_param0 // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %x: %X = bind_name x, %x.param // CHECK:STDOUT: } // CHECK:STDOUT: %Source.decl: %Source.type = fn_decl @Source [concrete = constants.%Source] { -// CHECK:STDOUT: %T.patt.loc27_11.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_11.2 (constants.%T.patt)] -// CHECK:STDOUT: %return.patt: @Source.%T.loc27_11.2 (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Source.%T.loc27_11.2 (%T) = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc27_11.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %return.patt: @Source.%pattern_type (%pattern_type.7dcd0a.2) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Source.%pattern_type (%pattern_type.7dcd0a.2) = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref.loc27_24: type = name_ref T, %T.loc27_11.1 [symbolic = %T.loc27_11.2 (constants.%T)] // CHECK:STDOUT: %T.loc27_11.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc27_11.2 (constants.%T)] @@ -150,10 +154,10 @@ fn Test() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.8f9: %i32 as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.853 = fn_decl @Convert.2 [concrete = constants.%Convert.08a] { -// CHECK:STDOUT: %self.patt: %i32 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %i32 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %X = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %X = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.7ce = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.7ce = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.019 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.019 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X] // CHECK:STDOUT: %self.param: %i32 = value_param call_param0 @@ -174,10 +178,10 @@ fn Test() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c94: %X.ref as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.8a1 = fn_decl @Convert.3 [concrete = constants.%Convert.c7a] { -// CHECK:STDOUT: %self.patt: %X = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %X = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.019 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.019 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -233,7 +237,8 @@ fn Test() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Source(%T.loc27_11.1: type) { // CHECK:STDOUT: %T.loc27_11.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc27_11.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc27_11.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc27_11.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc27_11.2 (constants.%T.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc27_11.2 [symbolic = %pattern_type (constants.%pattern_type.7dcd0a.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %T.loc27_11.2 [symbolic = %require_complete (constants.%require_complete.4ae)] @@ -289,6 +294,7 @@ fn Test() { // CHECK:STDOUT: specific @Source(constants.%T) { // CHECK:STDOUT: %T.loc27_11.2 => constants.%T // CHECK:STDOUT: %T.patt.loc27_11.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dcd0a.2 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.4ae @@ -300,6 +306,7 @@ fn Test() { // CHECK:STDOUT: specific @Source(constants.%X) { // CHECK:STDOUT: %T.loc27_11.2 => constants.%X // CHECK:STDOUT: %T.patt.loc27_11.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.019 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.54b @@ -309,6 +316,7 @@ fn Test() { // CHECK:STDOUT: specific @Source(constants.%i32) { // CHECK:STDOUT: %T.loc27_11.2 => constants.%i32 // CHECK:STDOUT: %T.patt.loc27_11.2 => constants.%T.patt +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7ce // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%complete_type.f8a diff --git a/toolchain/check/testdata/operators/overloaded/inc.carbon b/toolchain/check/testdata/operators/overloaded/inc.carbon index ddc2f30d9511..d3a1cc8bbb20 100644 --- a/toolchain/check/testdata/operators/overloaded/inc.carbon +++ b/toolchain/check/testdata/operators/overloaded/inc.carbon @@ -32,13 +32,16 @@ fn TestOp() { // CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete] // CHECK:STDOUT: %Op.type.e3a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %Inc.impl_witness: = impl_witness file.%Inc.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.73a: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.0c9: %Op.type.73a = struct_value () [concrete] // CHECK:STDOUT: %Inc.facet: %Inc.type = facet_value %C, (%Inc.impl_witness) [concrete] // CHECK:STDOUT: %TestOp.type: type = fn_type @TestOp [concrete] // CHECK:STDOUT: %TestOp: %TestOp.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %.bc7: type = fn_type_with_self_type %Op.type.e3a, %Inc.facet [concrete] // CHECK:STDOUT: } @@ -72,9 +75,9 @@ fn TestOp() { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c51: %C.ref as %Inc.ref { // CHECK:STDOUT: %Op.decl: %Op.type.73a = fn_decl @Op.2 [concrete = constants.%Op.0c9] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc18_9: auto = addr_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc18_9: %pattern_type.f6d = addr_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc18_21: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -104,8 +107,8 @@ fn TestOp() { // CHECK:STDOUT: fn @TestOp() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc22_3.1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc22_3.1: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc22_15.1: %empty_struct_type = struct_literal () diff --git a/toolchain/check/testdata/operators/overloaded/index.carbon b/toolchain/check/testdata/operators/overloaded/index.carbon index cafaea9d7d40..96ca495cea3f 100644 --- a/toolchain/check/testdata/operators/overloaded/index.carbon +++ b/toolchain/check/testdata/operators/overloaded/index.carbon @@ -90,6 +90,9 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith.type.e80: type = facet_type <@IndexWith, @IndexWith(%SubscriptType.8ee, %ElementType.e6b)> [concrete] // CHECK:STDOUT: %At.type.b3f: type = fn_type @At.1, @IndexWith(%SubscriptType.8ee, %ElementType.e6b) [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness file.%IndexWith.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %pattern_type.df7: type = pattern_type %SubscriptType.8ee [concrete] +// CHECK:STDOUT: %pattern_type.c39: type = pattern_type %ElementType.e6b [concrete] // CHECK:STDOUT: %At.type.178: type = fn_type @At.2 [concrete] // CHECK:STDOUT: %At.d43: %At.type.178 = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.e80 = facet_value %C, (%IndexWith.impl_witness) [concrete] @@ -133,7 +136,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith.impl_witness_table = impl_witness_table (@impl.%At.decl), @impl [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness %IndexWith.impl_witness_table [concrete = constants.%IndexWith.impl_witness] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %SubscriptType.8ee = binding_pattern s +// CHECK:STDOUT: %s.patt: %pattern_type.df7 = binding_pattern s // CHECK:STDOUT: } // CHECK:STDOUT: %SubscriptType.ref: type = name_ref SubscriptType, %SubscriptType.decl [concrete = constants.%SubscriptType.8ee] // CHECK:STDOUT: %.loc14_25.1: ref %SubscriptType.8ee = temporary_storage @@ -142,7 +145,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %.loc14_25.4: ref %SubscriptType.8ee = converted @__global_init.%.loc14, %.loc14_25.3 // CHECK:STDOUT: %s: ref %SubscriptType.8ee = bind_name s, %.loc14_25.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc15_13.1: ref %C = temporary_storage @@ -151,7 +154,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %.loc15_13.4: ref %C = converted @__global_init.%.loc15, %.loc15_13.3 // CHECK:STDOUT: %c: ref %C = bind_name c, %.loc15_13.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %ElementType.e6b = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.c39 = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %ElementType.ref: type = name_ref ElementType, %ElementType.decl [concrete = constants.%ElementType.e6b] // CHECK:STDOUT: %.loc16: ref %ElementType.e6b = temporary @__global_init.%.loc16_25, @__global_init.%At.call @@ -160,12 +163,12 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %C.ref as %IndexWith.type { // CHECK:STDOUT: %At.decl: %At.type.178 = fn_decl @At.2 [concrete = constants.%At.d43] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %subscript.patt: %SubscriptType.8ee = binding_pattern subscript -// CHECK:STDOUT: %subscript.param_patt: %SubscriptType.8ee = value_param_pattern %subscript.patt, call_param1 -// CHECK:STDOUT: %return.patt: %ElementType.e6b = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ElementType.e6b = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %subscript.patt: %pattern_type.df7 = binding_pattern subscript +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.df7 = value_param_pattern %subscript.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c39 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c39 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %ElementType.ref: type = name_ref ElementType, file.%ElementType.decl [concrete = constants.%ElementType.e6b] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -247,6 +250,8 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith.type.917: type = facet_type <@IndexWith, @IndexWith(%i32, %i32)> [concrete] // CHECK:STDOUT: %At.type.d77: type = fn_type @At.1, @IndexWith(%i32, %i32) [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness file.%IndexWith.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %At.type.9ac: type = fn_type @At.2 [concrete] // CHECK:STDOUT: %At.642: %At.type.9ac = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.917 = facet_value %tuple.type.d07, (%IndexWith.impl_witness) [concrete] @@ -312,7 +317,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith.impl_witness_table = impl_witness_table (@impl.18b.%At.decl), @impl.18b [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness %IndexWith.impl_witness_table [concrete = constants.%IndexWith.impl_witness] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %tuple.type.d07 = binding_pattern s +// CHECK:STDOUT: %s.patt: %pattern_type.511 = binding_pattern s // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_17.1: type = splice_block %.loc10_17.3 [concrete = constants.%tuple.type.d07] { // CHECK:STDOUT: %int_32.loc10_9: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -340,7 +345,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %.loc10_26.5: %tuple.type.d07 = converted @__global_init.%.loc10, %tuple [concrete = constants.%tuple] // CHECK:STDOUT: %s: %tuple.type.d07 = bind_name s, %.loc10_26.5 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %i32 = binding_pattern e +// CHECK:STDOUT: %e.patt: %pattern_type.7ce = binding_pattern e // CHECK:STDOUT: } // CHECK:STDOUT: %.loc11_8: type = splice_block %i32.loc11 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -353,12 +358,12 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.18b: %.loc4_15.2 as %IndexWith.type { // CHECK:STDOUT: %At.decl: %At.type.9ac = fn_decl @At.2 [concrete = constants.%At.642] { -// CHECK:STDOUT: %self.patt: %tuple.type.d07 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %tuple.type.d07 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %subscript.patt: %i32 = binding_pattern subscript -// CHECK:STDOUT: %subscript.param_patt: %i32 = value_param_pattern %subscript.patt, call_param1 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.511 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.511 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %subscript.patt: %pattern_type.7ce = binding_pattern subscript +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.7ce = value_param_pattern %subscript.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc5_40: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc5_40: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -421,6 +426,9 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith.type.e80: type = facet_type <@IndexWith, @IndexWith(%SubscriptType.8ee, %ElementType.e6b)> [concrete] // CHECK:STDOUT: %At.type.b3f: type = fn_type @At.1, @IndexWith(%SubscriptType.8ee, %ElementType.e6b) [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness file.%IndexWith.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] +// CHECK:STDOUT: %pattern_type.df7: type = pattern_type %SubscriptType.8ee [concrete] +// CHECK:STDOUT: %pattern_type.c39: type = pattern_type %ElementType.e6b [concrete] // CHECK:STDOUT: %At.type.178: type = fn_type @At.2 [concrete] // CHECK:STDOUT: %At.d43: %At.type.178 = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.facet: %IndexWith.type.e80 = facet_value %C, (%IndexWith.impl_witness) [concrete] @@ -464,7 +472,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %IndexWith.impl_witness_table = impl_witness_table (@impl.%At.decl), @impl [concrete] // CHECK:STDOUT: %IndexWith.impl_witness: = impl_witness %IndexWith.impl_witness_table [concrete = constants.%IndexWith.impl_witness] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc14_13.1: ref %C = temporary_storage @@ -473,7 +481,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %.loc14_13.4: ref %C = converted @__global_init.%.loc14, %.loc14_13.3 // CHECK:STDOUT: %c: ref %C = bind_name c, %.loc14_13.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %ElementType.e6b = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.c39 = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %ElementType.ref: type = name_ref ElementType, %ElementType.decl [concrete = constants.%ElementType.e6b] // CHECK:STDOUT: %.loc22: ref %ElementType.e6b = temporary @__global_init.%.loc22_25.2, @__global_init.%At.call @@ -482,12 +490,12 @@ let x: i32 = c[0]; // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %C.ref as %IndexWith.type { // CHECK:STDOUT: %At.decl: %At.type.178 = fn_decl @At.2 [concrete = constants.%At.d43] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %subscript.patt: %SubscriptType.8ee = binding_pattern subscript -// CHECK:STDOUT: %subscript.param_patt: %SubscriptType.8ee = value_param_pattern %subscript.patt, call_param1 -// CHECK:STDOUT: %return.patt: %ElementType.e6b = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ElementType.e6b = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %subscript.patt: %pattern_type.df7 = binding_pattern subscript +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.df7 = value_param_pattern %subscript.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c39 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c39 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %ElementType.ref: type = name_ref ElementType, file.%ElementType.decl [concrete = constants.%ElementType.e6b] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -562,9 +570,11 @@ let x: i32 = c[0]; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -587,7 +597,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc6_13.1: ref %C = temporary_storage @@ -596,7 +606,7 @@ let x: i32 = c[0]; // CHECK:STDOUT: %.loc6_13.4: ref %C = converted @__global_init.%.loc6, %.loc6_13.3 // CHECK:STDOUT: %c: ref %C = bind_name c, %.loc6_13.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] diff --git a/toolchain/check/testdata/operators/overloaded/left_shift.carbon b/toolchain/check/testdata/operators/overloaded/left_shift.carbon index c5fde6fdb4df..5fc8cc904778 100644 --- a/toolchain/check/testdata/operators/overloaded/left_shift.carbon +++ b/toolchain/check/testdata/operators/overloaded/left_shift.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.789: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %LeftShift.impl_witness: = impl_witness file.%LeftShift.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.de2: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.df9: %Op.type.de2 = struct_value () [concrete] // CHECK:STDOUT: %LeftShift.facet: %LeftShift.type = facet_value %C, (%LeftShift.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %LeftShiftAssign.type: type = facet_type <@LeftShiftAssign> [concrete] // CHECK:STDOUT: %Op.type.1de: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %LeftShiftAssign.impl_witness: = impl_witness file.%LeftShiftAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.386: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.8fc: %Op.type.386 = struct_value () [concrete] // CHECK:STDOUT: %LeftShiftAssign.facet: %LeftShiftAssign.type = facet_value %C, (%LeftShiftAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %LeftShiftAssign.impl_witness_table = impl_witness_table (@impl.29d.%Op.decl), @impl.29d [concrete] // CHECK:STDOUT: %LeftShiftAssign.impl_witness: = impl_witness %LeftShiftAssign.impl_witness_table [concrete = constants.%LeftShiftAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c6e: %C.ref as %LeftShift.ref { // CHECK:STDOUT: %Op.decl: %Op.type.de2 = fn_decl @Op.2 [concrete = constants.%Op.df9] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.29d: %C.ref as %LeftShiftAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.386 = fn_decl @Op.4 [concrete = constants.%Op.8fc] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/mod.carbon b/toolchain/check/testdata/operators/overloaded/mod.carbon index f9f22f5e1034..52be187b1bcf 100644 --- a/toolchain/check/testdata/operators/overloaded/mod.carbon +++ b/toolchain/check/testdata/operators/overloaded/mod.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.860: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Mod.impl_witness: = impl_witness file.%Mod.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.fd2: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.777: %Op.type.fd2 = struct_value () [concrete] // CHECK:STDOUT: %Mod.facet: %Mod.type = facet_value %C, (%Mod.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %ModAssign.type: type = facet_type <@ModAssign> [concrete] // CHECK:STDOUT: %Op.type.fae: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %ModAssign.impl_witness: = impl_witness file.%ModAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.fa2: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.d6c: %Op.type.fa2 = struct_value () [concrete] // CHECK:STDOUT: %ModAssign.facet: %ModAssign.type = facet_value %C, (%ModAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %ModAssign.impl_witness_table = impl_witness_table (@impl.587.%Op.decl), @impl.587 [concrete] // CHECK:STDOUT: %ModAssign.impl_witness: = impl_witness %ModAssign.impl_witness_table [concrete = constants.%ModAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.f96: %C.ref as %Mod.ref { // CHECK:STDOUT: %Op.decl: %Op.type.fd2 = fn_decl @Op.2 [concrete = constants.%Op.777] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.587: %C.ref as %ModAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.fa2 = fn_decl @Op.4 [concrete = constants.%Op.d6c] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/mul.carbon b/toolchain/check/testdata/operators/overloaded/mul.carbon index 2cee7532361f..4f3cd06353c4 100644 --- a/toolchain/check/testdata/operators/overloaded/mul.carbon +++ b/toolchain/check/testdata/operators/overloaded/mul.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.3ae: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Mul.impl_witness: = impl_witness file.%Mul.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.fa5: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.550: %Op.type.fa5 = struct_value () [concrete] // CHECK:STDOUT: %Mul.facet: %Mul.type = facet_value %C, (%Mul.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %MulAssign.type: type = facet_type <@MulAssign> [concrete] // CHECK:STDOUT: %Op.type.340: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %MulAssign.impl_witness: = impl_witness file.%MulAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.c02: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.a8c: %Op.type.c02 = struct_value () [concrete] // CHECK:STDOUT: %MulAssign.facet: %MulAssign.type = facet_value %C, (%MulAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %MulAssign.impl_witness_table = impl_witness_table (@impl.009.%Op.decl), @impl.009 [concrete] // CHECK:STDOUT: %MulAssign.impl_witness: = impl_witness %MulAssign.impl_witness_table [concrete = constants.%MulAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.4f2: %C.ref as %Mul.ref { // CHECK:STDOUT: %Op.decl: %Op.type.fa5 = fn_decl @Op.2 [concrete = constants.%Op.550] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.009: %C.ref as %MulAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.c02 = fn_decl @Op.4 [concrete = constants.%Op.a8c] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/negate.carbon b/toolchain/check/testdata/operators/overloaded/negate.carbon index f4350ef020e9..288c2d123c1a 100644 --- a/toolchain/check/testdata/operators/overloaded/negate.carbon +++ b/toolchain/check/testdata/operators/overloaded/negate.carbon @@ -33,6 +33,7 @@ fn TestOp(a: C) -> C { // CHECK:STDOUT: %Negate.type: type = facet_type <@Negate> [concrete] // CHECK:STDOUT: %Op.type.e42: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Negate.impl_witness: = impl_witness file.%Negate.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.67d: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.64c: %Op.type.67d = struct_value () [concrete] // CHECK:STDOUT: %Negate.facet: %Negate.type = facet_value %C, (%Negate.impl_witness) [concrete] @@ -67,10 +68,10 @@ fn TestOp(a: C) -> C { // CHECK:STDOUT: %Negate.impl_witness_table = impl_witness_table (@impl.c34.%Op.decl), @impl.c34 [concrete] // CHECK:STDOUT: %Negate.impl_witness: = impl_witness %Negate.impl_witness_table [concrete = constants.%Negate.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc23_20: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -83,10 +84,10 @@ fn TestOp(a: C) -> C { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.c34: %C.ref as %Negate.ref { // CHECK:STDOUT: %Op.decl: %Op.type.67d = fn_decl @Op.2 [concrete = constants.%Op.64c] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_23: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 diff --git a/toolchain/check/testdata/operators/overloaded/no_prelude/index.carbon b/toolchain/check/testdata/operators/overloaded/no_prelude/index.carbon index 64ee8f308473..5a14aaf1160b 100644 --- a/toolchain/check/testdata/operators/overloaded/no_prelude/index.carbon +++ b/toolchain/check/testdata/operators/overloaded/no_prelude/index.carbon @@ -156,13 +156,17 @@ fn F() { ()[()]; } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %SubscriptType: type = bind_symbolic_name SubscriptType, 0 [symbolic] -// CHECK:STDOUT: %SubscriptType.patt: type = symbolic_binding_pattern SubscriptType, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %SubscriptType.patt: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic] // CHECK:STDOUT: %IndexWith.type.68b: type = generic_interface_type @IndexWith [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %IndexWith.generic: %IndexWith.type.68b = struct_value () [concrete] // CHECK:STDOUT: %IndexWith.type.b94: type = facet_type <@IndexWith, @IndexWith(%SubscriptType)> [symbolic] // CHECK:STDOUT: %Self: %IndexWith.type.b94 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] +// CHECK:STDOUT: %pattern_type.2ad: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %SubscriptType [symbolic] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %At.type: type = fn_type @At, @IndexWith(%SubscriptType) [symbolic] // CHECK:STDOUT: %At: %At.type = struct_value () [symbolic] // CHECK:STDOUT: %IndexWith.assoc_type: type = assoc_entity_type @IndexWith, @IndexWith(%SubscriptType) [symbolic] @@ -174,7 +178,7 @@ fn F() { ()[()]; } // CHECK:STDOUT: .IndexWith = %IndexWith.decl // CHECK:STDOUT: } // CHECK:STDOUT: %IndexWith.decl: %IndexWith.type.68b = interface_decl @IndexWith [concrete = constants.%IndexWith.generic] { -// CHECK:STDOUT: %SubscriptType.patt.loc4_21.1: type = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt.loc4_21.2 (constants.%SubscriptType.patt)] +// CHECK:STDOUT: %SubscriptType.patt.loc4_21.1: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt.loc4_21.2 (constants.%SubscriptType.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %SubscriptType.loc4_21.1: type = bind_symbolic_name SubscriptType, 0 [symbolic = %SubscriptType.loc4_21.2 (constants.%SubscriptType)] // CHECK:STDOUT: } @@ -182,7 +186,7 @@ fn F() { ()[()]; } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @IndexWith(%SubscriptType.loc4_21.1: type) { // CHECK:STDOUT: %SubscriptType.loc4_21.2: type = bind_symbolic_name SubscriptType, 0 [symbolic = %SubscriptType.loc4_21.2 (constants.%SubscriptType)] -// CHECK:STDOUT: %SubscriptType.patt.loc4_21.2: type = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt.loc4_21.2 (constants.%SubscriptType.patt)] +// CHECK:STDOUT: %SubscriptType.patt.loc4_21.2: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt.loc4_21.2 (constants.%SubscriptType.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %IndexWith.type: type = facet_type <@IndexWith, @IndexWith(%SubscriptType.loc4_21.2)> [symbolic = %IndexWith.type (constants.%IndexWith.type.b94)] @@ -195,12 +199,12 @@ fn F() { ()[()]; } // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @IndexWith.%IndexWith.type (%IndexWith.type.b94) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] // CHECK:STDOUT: %At.decl: @IndexWith.%At.type (%At.type) = fn_decl @At [symbolic = @IndexWith.%At (constants.%At)] { -// CHECK:STDOUT: %self.patt: @At.%Self.as_type.loc5_15.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @At.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %subscript.patt: @At.%SubscriptType (%SubscriptType) = binding_pattern subscript -// CHECK:STDOUT: %subscript.param_patt: @At.%SubscriptType (%SubscriptType) = value_param_pattern %subscript.patt, call_param1 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: @At.%pattern_type.loc5_9 (%pattern_type.2ad) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @At.%pattern_type.loc5_9 (%pattern_type.2ad) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %subscript.patt: @At.%pattern_type.loc5_21 (%pattern_type.7dc) = binding_pattern subscript +// CHECK:STDOUT: %subscript.param_patt: @At.%pattern_type.loc5_21 (%pattern_type.7dc) = value_param_pattern %subscript.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc5_51.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc5_51.2: type = converted %.loc5_51.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -233,6 +237,8 @@ fn F() { ()[()]; } // CHECK:STDOUT: %IndexWith.type: type = facet_type <@IndexWith, @IndexWith(%SubscriptType)> [symbolic = %IndexWith.type (constants.%IndexWith.type.b94)] // CHECK:STDOUT: %Self: @At.%IndexWith.type (%IndexWith.type.b94) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Self.as_type.loc5_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc5_9: type = pattern_type %Self.as_type.loc5_15.1 [symbolic = %pattern_type.loc5_9 (constants.%pattern_type.2ad)] +// CHECK:STDOUT: %pattern_type.loc5_21: type = pattern_type %SubscriptType [symbolic = %pattern_type.loc5_21 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @At.%Self.as_type.loc5_15.1 (%Self.as_type), %subscript.param: @At.%SubscriptType (%SubscriptType)) -> %empty_tuple.type; // CHECK:STDOUT: } @@ -247,6 +253,8 @@ fn F() { ()[()]; } // CHECK:STDOUT: %IndexWith.type => constants.%IndexWith.type.b94 // CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc5_9 => constants.%pattern_type.2ad +// CHECK:STDOUT: %pattern_type.loc5_21 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IndexWith(@At.%SubscriptType) {} @@ -262,10 +270,14 @@ fn F() { ()[()]; } // CHECK:STDOUT: %SubscriptType: type = bind_symbolic_name SubscriptType, 0 [symbolic] // CHECK:STDOUT: %IndexWith.type.bd2: type = facet_type <@IndexWith, @IndexWith(%SubscriptType)> [symbolic] // CHECK:STDOUT: %Self.30a: %IndexWith.type.bd2 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %SubscriptType.patt: type = symbolic_binding_pattern SubscriptType, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %SubscriptType.patt: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic] // CHECK:STDOUT: %At.type.cf4: type = fn_type @At.1, @IndexWith(%SubscriptType) [symbolic] // CHECK:STDOUT: %At.281: %At.type.cf4 = struct_value () [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %SubscriptType [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.30a [symbolic] +// CHECK:STDOUT: %pattern_type.e1a: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %IndexWith.assoc_type.290: type = assoc_entity_type @IndexWith, @IndexWith(%SubscriptType) [symbolic] // CHECK:STDOUT: %assoc0.af8: %IndexWith.assoc_type.290 = assoc_entity element0, imports.%Core.import_ref.e99 [symbolic] // CHECK:STDOUT: %IndexWith.type.a51: type = facet_type <@IndexWith, @IndexWith(%empty_tuple.type)> [concrete] @@ -293,11 +305,11 @@ fn F() { ()[()]; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.IndexWith: %IndexWith.type.504 = import_ref Core//core_wrong_arg_count, IndexWith, loaded [concrete = constants.%IndexWith.generic] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//core_wrong_arg_count, loc4_21, loaded [symbolic = @IndexWith.%SubscriptType (constants.%SubscriptType)] -// CHECK:STDOUT: %Core.import_ref.68a = import_ref Core//core_wrong_arg_count, inst26 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.68a = import_ref Core//core_wrong_arg_count, inst27 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.613: @IndexWith.%IndexWith.assoc_type (%IndexWith.assoc_type.290) = import_ref Core//core_wrong_arg_count, loc5_52, loaded [symbolic = @IndexWith.%assoc0 (constants.%assoc0.e1e)] // CHECK:STDOUT: %Core.At: @IndexWith.%At.type (%At.type.cf4) = import_ref Core//core_wrong_arg_count, At, loaded [symbolic = @IndexWith.%At (constants.%At.281)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//core_wrong_arg_count, loc4_21, loaded [symbolic = @IndexWith.%SubscriptType (constants.%SubscriptType)] -// CHECK:STDOUT: %Core.import_ref.fb5: @IndexWith.%IndexWith.type (%IndexWith.type.bd2) = import_ref Core//core_wrong_arg_count, inst26 [no loc], loaded [symbolic = @IndexWith.%Self (constants.%Self.30a)] +// CHECK:STDOUT: %Core.import_ref.fb5: @IndexWith.%IndexWith.type (%IndexWith.type.bd2) = import_ref Core//core_wrong_arg_count, inst27 [no loc], loaded [symbolic = @IndexWith.%Self (constants.%Self.30a)] // CHECK:STDOUT: %Core.import_ref.e99: @IndexWith.%At.type (%At.type.cf4) = import_ref Core//core_wrong_arg_count, loc5_52, loaded [symbolic = @IndexWith.%At (constants.%At.281)] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -323,7 +335,7 @@ fn F() { ()[()]; } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @IndexWith(imports.%Core.import_ref.5ab3ec.1: type) [from "core_wrong_arg_count.carbon"] { // CHECK:STDOUT: %SubscriptType: type = bind_symbolic_name SubscriptType, 0 [symbolic = %SubscriptType (constants.%SubscriptType)] -// CHECK:STDOUT: %SubscriptType.patt: type = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt (constants.%SubscriptType.patt)] +// CHECK:STDOUT: %SubscriptType.patt: %pattern_type.98f = symbolic_binding_pattern SubscriptType, 0 [symbolic = %SubscriptType.patt (constants.%SubscriptType.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %IndexWith.type: type = facet_type <@IndexWith, @IndexWith(%SubscriptType)> [symbolic = %IndexWith.type (constants.%IndexWith.type.bd2)] @@ -343,12 +355,12 @@ fn F() { ()[()]; } // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %.loc6_7.2 as %IndexWith.type { // CHECK:STDOUT: %At.decl: %At.type.486 = fn_decl @At.2 [concrete = constants.%At.7c4] { -// CHECK:STDOUT: %self.patt: %empty_tuple.type = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %empty_tuple.type = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %subscript.patt: %empty_tuple.type = binding_pattern subscript -// CHECK:STDOUT: %subscript.param_patt: %empty_tuple.type = value_param_pattern %subscript.patt, call_param1 -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.cb1 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.cb1 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %subscript.patt: %pattern_type.cb1 = binding_pattern subscript +// CHECK:STDOUT: %subscript.param_patt: %pattern_type.cb1 = value_param_pattern %subscript.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_40.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc7_40.2: type = converted %.loc7_40.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -375,6 +387,8 @@ fn F() { ()[()]; } // CHECK:STDOUT: %IndexWith.type: type = facet_type <@IndexWith, @IndexWith(%SubscriptType)> [symbolic = %IndexWith.type (constants.%IndexWith.type.bd2)] // CHECK:STDOUT: %Self: @At.1.%IndexWith.type (%IndexWith.type.bd2) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.30a)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.e1a)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %SubscriptType [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -415,6 +429,8 @@ fn F() { ()[()]; } // CHECK:STDOUT: %IndexWith.type => constants.%IndexWith.type.bd2 // CHECK:STDOUT: %Self => constants.%Self.30a // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.e1a +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IndexWith(constants.%empty_tuple.type) { @@ -435,5 +451,7 @@ fn F() { ()[()]; } // CHECK:STDOUT: %IndexWith.type => constants.%IndexWith.type.a51 // CHECK:STDOUT: %Self => constants.%IndexWith.facet // CHECK:STDOUT: %Self.as_type => constants.%empty_tuple.type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.cb1 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.cb1 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/operators/overloaded/ordered.carbon b/toolchain/check/testdata/operators/overloaded/ordered.carbon index 372d34b1b0bd..ad33fe492364 100644 --- a/toolchain/check/testdata/operators/overloaded/ordered.carbon +++ b/toolchain/check/testdata/operators/overloaded/ordered.carbon @@ -83,10 +83,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Ordered.type: type = facet_type <@Ordered> [concrete] // CHECK:STDOUT: %Less.type.341: type = fn_type @Less.1 [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %LessOrEquivalent.type.859: type = fn_type @LessOrEquivalent.1 [concrete] // CHECK:STDOUT: %Greater.type.270: type = fn_type @Greater.1 [concrete] // CHECK:STDOUT: %GreaterOrEquivalent.type.8af: type = fn_type @GreaterOrEquivalent.1 [concrete] // CHECK:STDOUT: %Ordered.impl_witness: = impl_witness file.%Ordered.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %Less.type.25a: type = fn_type @Less.2 [concrete] @@ -141,12 +143,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %Ordered.impl_witness_table = impl_witness_table (@impl.d54.%Less.decl, @impl.d54.%LessOrEquivalent.decl, @impl.d54.%Greater.decl, @impl.d54.%GreaterOrEquivalent.decl), @impl.d54 [concrete] // CHECK:STDOUT: %Ordered.impl_witness: = impl_witness %Ordered.impl_witness_table [concrete = constants.%Ordered.impl_witness] // CHECK:STDOUT: %TestLess.decl: %TestLess.type = fn_decl @TestLess [concrete = constants.%TestLess] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc13_28.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -161,12 +163,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestLessEqual.decl: %TestLessEqual.type = fn_decl @TestLessEqual [concrete = constants.%TestLessEqual] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc17_33.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -181,12 +183,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestGreater.decl: %TestGreater.type = fn_decl @TestGreater [concrete = constants.%TestGreater] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc21_31.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -201,12 +203,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestGreaterEqual.decl: %TestGreaterEqual.type = fn_decl @TestGreaterEqual [concrete = constants.%TestGreaterEqual] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc25_36.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -224,12 +226,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.d54: %C.ref as %Ordered.ref { // CHECK:STDOUT: %Less.decl: %Less.type.25a = fn_decl @Less.2 [concrete = constants.%Less.738] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc7_33.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -244,12 +246,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %LessOrEquivalent.decl: %LessOrEquivalent.type.478 = fn_decl @LessOrEquivalent.2 [concrete = constants.%LessOrEquivalent.010] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc8_45.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -264,12 +266,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Greater.decl: %Greater.type.0a1 = fn_decl @Greater.2 [concrete = constants.%Greater.afe] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc9_36.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -284,12 +286,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %GreaterOrEquivalent.decl: %GreaterOrEquivalent.type.caf = fn_decl @GreaterOrEquivalent.2 [concrete = constants.%GreaterOrEquivalent.03b] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc10_48.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -384,8 +386,10 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %TestLess.type: type = fn_type @TestLess [concrete] // CHECK:STDOUT: %TestLess: %TestLess.type = struct_value () [concrete] // CHECK:STDOUT: %TestLessEqual.type: type = fn_type @TestLessEqual [concrete] @@ -417,12 +421,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %TestLess.decl: %TestLess.type = fn_decl @TestLess [concrete = constants.%TestLess] { -// CHECK:STDOUT: %a.patt: %D = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %D = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.510 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.510 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc6_28.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -437,12 +441,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestLessEqual.decl: %TestLessEqual.type = fn_decl @TestLessEqual [concrete = constants.%TestLessEqual] { -// CHECK:STDOUT: %a.patt: %D = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %D = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.510 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.510 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc14_33.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -457,12 +461,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestGreater.decl: %TestGreater.type = fn_decl @TestGreater [concrete = constants.%TestGreater] { -// CHECK:STDOUT: %a.patt: %D = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %D = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.510 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.510 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc22_31.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -477,12 +481,12 @@ fn TestGreaterEqual(a: D, b: D) -> bool { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestGreaterEqual.decl: %TestGreaterEqual.type = fn_decl @TestGreaterEqual [concrete = constants.%TestGreaterEqual] { -// CHECK:STDOUT: %a.patt: %D = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %D = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %D = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %D = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.510 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.510 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.510 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.510 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc30_36.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/operators/overloaded/right_shift.carbon b/toolchain/check/testdata/operators/overloaded/right_shift.carbon index 6801fd776402..f3078b49cc9d 100644 --- a/toolchain/check/testdata/operators/overloaded/right_shift.carbon +++ b/toolchain/check/testdata/operators/overloaded/right_shift.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.4f4: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %RightShift.impl_witness: = impl_witness file.%RightShift.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.092: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.79a: %Op.type.092 = struct_value () [concrete] // CHECK:STDOUT: %RightShift.facet: %RightShift.type = facet_value %C, (%RightShift.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %RightShiftAssign.type: type = facet_type <@RightShiftAssign> [concrete] // CHECK:STDOUT: %Op.type.6f6: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %RightShiftAssign.impl_witness: = impl_witness file.%RightShiftAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.aab: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.7b2: %Op.type.aab = struct_value () [concrete] // CHECK:STDOUT: %RightShiftAssign.facet: %RightShiftAssign.type = facet_value %C, (%RightShiftAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %RightShiftAssign.impl_witness_table = impl_witness_table (@impl.4f0.%Op.decl), @impl.4f0 [concrete] // CHECK:STDOUT: %RightShiftAssign.impl_witness: = impl_witness %RightShiftAssign.impl_witness_table [concrete = constants.%RightShiftAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.3c1: %C.ref as %RightShift.ref { // CHECK:STDOUT: %Op.decl: %Op.type.092 = fn_decl @Op.2 [concrete = constants.%Op.79a] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.4f0: %C.ref as %RightShiftAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.aab = fn_decl @Op.4 [concrete = constants.%Op.7b2] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/operators/overloaded/sub.carbon b/toolchain/check/testdata/operators/overloaded/sub.carbon index c247a3807e80..fff2adf4f1bd 100644 --- a/toolchain/check/testdata/operators/overloaded/sub.carbon +++ b/toolchain/check/testdata/operators/overloaded/sub.carbon @@ -41,14 +41,17 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %Op.type.111: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Sub.impl_witness: = impl_witness file.%Sub.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Op.type.c74: type = fn_type @Op.2 [concrete] // CHECK:STDOUT: %Op.151: %Op.type.c74 = struct_value () [concrete] // CHECK:STDOUT: %Sub.facet: %Sub.type = facet_value %C, (%Sub.impl_witness) [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: %SubAssign.type: type = facet_type <@SubAssign> [concrete] // CHECK:STDOUT: %Op.type.f0d: type = fn_type @Op.3 [concrete] +// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete] // CHECK:STDOUT: %SubAssign.impl_witness: = impl_witness file.%SubAssign.impl_witness_table [concrete] // CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Op.type.966: type = fn_type @Op.4 [concrete] // CHECK:STDOUT: %Op.a55: %Op.type.966 = struct_value () [concrete] // CHECK:STDOUT: %SubAssign.facet: %SubAssign.type = facet_value %C, (%SubAssign.impl_witness) [concrete] @@ -95,12 +98,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %SubAssign.impl_witness_table = impl_witness_table (@impl.588.%Op.decl), @impl.588 [concrete] // CHECK:STDOUT: %SubAssign.impl_witness: = impl_witness %SubAssign.impl_witness_table [concrete = constants.%SubAssign.impl_witness] // CHECK:STDOUT: %TestOp.decl: %TestOp.type = fn_decl @TestOp [concrete = constants.%TestOp] { -// CHECK:STDOUT: %a.patt: %C = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %C = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %a.patt: %pattern_type.c48 = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.c48 = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc26_26: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %a.param: %C = value_param call_param0 @@ -113,10 +116,10 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %TestAssign.decl: %TestAssign.type = fn_decl @TestAssign [concrete = constants.%TestAssign] { -// CHECK:STDOUT: %a.patt: %ptr.019 = binding_pattern a -// CHECK:STDOUT: %a.param_patt: %ptr.019 = value_param_pattern %a.patt, call_param0 -// CHECK:STDOUT: %b.patt: %C = binding_pattern b -// CHECK:STDOUT: %b.param_patt: %C = value_param_pattern %b.patt, call_param1 +// CHECK:STDOUT: %a.patt: %pattern_type.44a = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %pattern_type.44a = value_param_pattern %a.patt, call_param0 +// CHECK:STDOUT: %b.patt: %pattern_type.c48 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %a.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc30: type = splice_block %ptr [concrete = constants.%ptr.019] { @@ -132,12 +135,12 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.3f9: %C.ref as %Sub.ref { // CHECK:STDOUT: %Op.decl: %Op.type.c74 = fn_decl @Op.2 [concrete = constants.%Op.151] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param2 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc18_31: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %self.param: %C = value_param call_param0 @@ -158,11 +161,11 @@ fn TestAssign(a: C*, b: C) { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.588: %C.ref as %SubAssign.ref { // CHECK:STDOUT: %Op.decl: %Op.type.966 = fn_decl @Op.4 [concrete = constants.%Op.a55] { -// CHECK:STDOUT: %self.patt: %ptr.019 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %ptr.019 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc23_9: auto = addr_pattern %self.param_patt -// CHECK:STDOUT: %other.patt: %C = binding_pattern other -// CHECK:STDOUT: %other.param_patt: %C = value_param_pattern %other.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.44a = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt +// CHECK:STDOUT: %other.patt: %pattern_type.c48 = binding_pattern other +// CHECK:STDOUT: %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] { diff --git a/toolchain/check/testdata/package_expr/fail_not_found.carbon b/toolchain/check/testdata/package_expr/fail_not_found.carbon index 59b8074aeace..6c133170b012 100644 --- a/toolchain/check/testdata/package_expr/fail_not_found.carbon +++ b/toolchain/check/testdata/package_expr/fail_not_found.carbon @@ -23,6 +23,7 @@ fn Main() { // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -46,8 +47,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %i32 = binding_pattern y -// CHECK:STDOUT: %.loc16_3: %i32 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.7ce = binding_pattern y +// CHECK:STDOUT: %.loc16_3: %pattern_type.7ce = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var y // CHECK:STDOUT: %package.ref: = name_ref package, package [concrete = package] diff --git a/toolchain/check/testdata/package_expr/syntax.carbon b/toolchain/check/testdata/package_expr/syntax.carbon index bbf66951720c..3badefd20ff5 100644 --- a/toolchain/check/testdata/package_expr/syntax.carbon +++ b/toolchain/check/testdata/package_expr/syntax.carbon @@ -46,6 +46,7 @@ fn Main() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -78,8 +79,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x -// CHECK:STDOUT: %.loc4_1: %i32 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x +// CHECK:STDOUT: %.loc4_1: %pattern_type.7ce = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var x // CHECK:STDOUT: %.loc4_8: type = splice_block %i32.loc4 [concrete = constants.%i32] { @@ -88,8 +89,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %i32 = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %i32 = binding_pattern y -// CHECK:STDOUT: %.loc5_1: %i32 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.7ce = binding_pattern y +// CHECK:STDOUT: %.loc5_1: %pattern_type.7ce = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var y // CHECK:STDOUT: %.loc5_8: type = splice_block %i32.loc5 [concrete = constants.%i32] { @@ -121,6 +122,7 @@ fn Main() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -159,8 +161,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x -// CHECK:STDOUT: %.loc4_1: %i32 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x +// CHECK:STDOUT: %.loc4_1: %pattern_type.7ce = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var x // CHECK:STDOUT: %.loc4_8: type = splice_block %i32 [concrete = constants.%i32] { @@ -174,8 +176,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %i32 = binding_pattern x -// CHECK:STDOUT: %.loc7_3.1: %i32 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.7ce = binding_pattern x +// CHECK:STDOUT: %.loc7_3.1: %pattern_type.7ce = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %i32 = var x // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -192,8 +194,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %i32 = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %i32 = binding_pattern y -// CHECK:STDOUT: %.loc9_3: %i32 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.7ce = binding_pattern y +// CHECK:STDOUT: %.loc9_3: %pattern_type.7ce = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var y // CHECK:STDOUT: %package.ref: = name_ref package, package [concrete = package] diff --git a/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon b/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon index 09b45ea762d3..1867c54661ff 100644 --- a/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon +++ b/toolchain/check/testdata/packages/fail_conflict_no_namespaces.carbon @@ -66,6 +66,7 @@ import library "var"; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -83,8 +84,8 @@ import library "var"; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %Foo.patt: %i32 = binding_pattern Foo -// CHECK:STDOUT: %.loc4_1: %i32 = var_pattern %Foo.patt +// CHECK:STDOUT: %Foo.patt: %pattern_type.7ce = binding_pattern Foo +// CHECK:STDOUT: %.loc4_1: %pattern_type.7ce = var_pattern %Foo.patt // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.var: ref %i32 = var Foo // CHECK:STDOUT: %.loc4_10: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/packages/fail_import_type_error.carbon b/toolchain/check/testdata/packages/fail_import_type_error.carbon index 03badbee8f5b..0384de21af2f 100644 --- a/toolchain/check/testdata/packages/fail_import_type_error.carbon +++ b/toolchain/check/testdata/packages/fail_import_type_error.carbon @@ -107,6 +107,7 @@ var d: i32 = d_ref; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -137,8 +138,8 @@ var d: i32 = d_ref; // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc6_1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc6_1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc6_8: type = splice_block %i32.loc6 [concrete = constants.%i32] { @@ -147,8 +148,8 @@ var d: i32 = d_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %i32 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc7_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc7_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc7_8: type = splice_block %i32.loc7 [concrete = constants.%i32] { @@ -157,8 +158,8 @@ var d: i32 = d_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c -// CHECK:STDOUT: %.loc8_1: %i32 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c +// CHECK:STDOUT: %.loc8_1: %pattern_type.7ce = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var c // CHECK:STDOUT: %.loc8_8: type = splice_block %i32.loc8 [concrete = constants.%i32] { @@ -167,8 +168,8 @@ var d: i32 = d_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %i32 = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %i32 = binding_pattern d -// CHECK:STDOUT: %.loc9_1: %i32 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.7ce = binding_pattern d +// CHECK:STDOUT: %.loc9_1: %pattern_type.7ce = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var d // CHECK:STDOUT: %.loc9_8: type = splice_block %i32.loc9 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/packages/fail_name_with_import_failure.carbon b/toolchain/check/testdata/packages/fail_name_with_import_failure.carbon index 7cc4d57c7c14..1335dad8cf6b 100644 --- a/toolchain/check/testdata/packages/fail_name_with_import_failure.carbon +++ b/toolchain/check/testdata/packages/fail_name_with_import_failure.carbon @@ -22,6 +22,7 @@ var a: () = A(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -41,8 +42,8 @@ var a: () = A(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc8_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc8_1: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc8_9.1: type = splice_block %.loc8_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/packages/implicit_imports_prelude.carbon b/toolchain/check/testdata/packages/implicit_imports_prelude.carbon index a5fda1c2dd5a..e99a92898422 100644 --- a/toolchain/check/testdata/packages/implicit_imports_prelude.carbon +++ b/toolchain/check/testdata/packages/implicit_imports_prelude.carbon @@ -27,6 +27,7 @@ var b: i32 = a; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -58,8 +59,8 @@ var b: i32 = a; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %i32 = binding_pattern a -// CHECK:STDOUT: %.loc4_1: %i32 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a +// CHECK:STDOUT: %.loc4_1: %pattern_type.7ce = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %i32 = var a // CHECK:STDOUT: %.loc4_8: type = splice_block %i32 [concrete = constants.%i32] { @@ -87,6 +88,7 @@ var b: i32 = a; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.501: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -108,8 +110,8 @@ var b: i32 = a; // CHECK:STDOUT: %default.import.loc2_19.2 = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc4_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.501 = binding_pattern b +// CHECK:STDOUT: %.loc4_1: %pattern_type.501 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc4_8: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/packages/loaded_global.carbon b/toolchain/check/testdata/packages/loaded_global.carbon index 73af7a62d758..64471f2748b5 100644 --- a/toolchain/check/testdata/packages/loaded_global.carbon +++ b/toolchain/check/testdata/packages/loaded_global.carbon @@ -67,6 +67,7 @@ var package_b: () = package.B(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -90,8 +91,8 @@ var package_b: () = package.B(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -100,8 +101,8 @@ var package_b: () = package.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %package_a.patt: %empty_tuple.type = binding_pattern package_a -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %package_a.patt +// CHECK:STDOUT: %package_a.patt: %pattern_type = binding_pattern package_a +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %package_a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %package_a.var: ref %empty_tuple.type = var package_a // CHECK:STDOUT: %.loc6_17.1: type = splice_block %.loc6_17.3 [concrete = constants.%empty_tuple.type] { @@ -154,6 +155,7 @@ var package_b: () = package.B(); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] // CHECK:STDOUT: %B: %B.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -176,8 +178,8 @@ var package_b: () = package.B(); // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b -// CHECK:STDOUT: %.loc6_1: %empty_tuple.type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var b // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] { @@ -186,8 +188,8 @@ var package_b: () = package.B(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_tuple.type = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %package_b.patt: %empty_tuple.type = binding_pattern package_b -// CHECK:STDOUT: %.loc8_1: %empty_tuple.type = var_pattern %package_b.patt +// CHECK:STDOUT: %package_b.patt: %pattern_type = binding_pattern package_b +// CHECK:STDOUT: %.loc8_1: %pattern_type = var_pattern %package_b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %package_b.var: ref %empty_tuple.type = var package_b // CHECK:STDOUT: %.loc8_17.1: type = splice_block %.loc8_17.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/packages/no_prelude/cross_package_export.carbon b/toolchain/check/testdata/packages/no_prelude/cross_package_export.carbon index c2d087fd085b..be1cb4982f9c 100644 --- a/toolchain/check/testdata/packages/no_prelude/cross_package_export.carbon +++ b/toolchain/check/testdata/packages/no_prelude/cross_package_export.carbon @@ -383,6 +383,7 @@ alias C = Other.C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -406,8 +407,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc6_13: type = splice_block %C.ref [concrete = constants.%C] { @@ -445,6 +446,7 @@ alias C = Other.C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -469,8 +471,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc7_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc7_13: type = splice_block %C.ref [concrete = constants.%C] { @@ -508,6 +510,7 @@ alias C = Other.C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -532,8 +535,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc6_13: type = splice_block %C.ref [concrete = constants.%C] { @@ -571,6 +574,7 @@ alias C = Other.C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -593,8 +597,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc6_13: type = splice_block %C.ref [concrete = constants.%C] { @@ -632,6 +636,7 @@ alias C = Other.C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -655,8 +660,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc7_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc7_13: type = splice_block %C.ref [concrete = constants.%C] { @@ -694,6 +699,7 @@ alias C = Other.C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -716,8 +722,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc6_13: type = splice_block %C.ref [concrete = constants.%C] { @@ -755,6 +761,7 @@ alias C = Other.C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -783,8 +790,8 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc11_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc11_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc11_13: type = splice_block %C.ref [concrete = constants.%C] { diff --git a/toolchain/check/testdata/packages/no_prelude/cross_package_import.carbon b/toolchain/check/testdata/packages/no_prelude/cross_package_import.carbon index 3d9216a655bc..4f5ab25e1aab 100644 --- a/toolchain/check/testdata/packages/no_prelude/cross_package_import.carbon +++ b/toolchain/check/testdata/packages/no_prelude/cross_package_import.carbon @@ -246,6 +246,7 @@ fn UseF() { Other.F(); } // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -255,8 +256,8 @@ fn UseF() { Other.F(); } // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/packages/no_prelude/export_import.carbon b/toolchain/check/testdata/packages/no_prelude/export_import.carbon index c821aed04bdd..df9626adbc58 100644 --- a/toolchain/check/testdata/packages/no_prelude/export_import.carbon +++ b/toolchain/check/testdata/packages/no_prelude/export_import.carbon @@ -294,6 +294,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -312,8 +313,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -352,6 +353,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -371,8 +373,8 @@ export Poison; // CHECK:STDOUT: %default.import.loc2_29.1 = import // CHECK:STDOUT: %default.import.loc2_29.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc4: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc4: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -407,6 +409,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -425,8 +428,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -461,6 +464,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -479,8 +483,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -515,6 +519,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -533,8 +538,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -569,6 +574,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -587,8 +593,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -623,6 +629,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -641,8 +648,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -677,6 +684,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -695,8 +703,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -743,6 +751,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -761,8 +770,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -797,6 +806,7 @@ export Poison; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -817,8 +827,8 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %indirect_c.patt: %C = binding_pattern indirect_c -// CHECK:STDOUT: %.loc6: %C = var_pattern %indirect_c.patt +// CHECK:STDOUT: %indirect_c.patt: %pattern_type = binding_pattern indirect_c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %indirect_c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %indirect_c.var: ref %C = var indirect_c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] diff --git a/toolchain/check/testdata/packages/no_prelude/export_mixed.carbon b/toolchain/check/testdata/packages/no_prelude/export_mixed.carbon index 9a8317000407..04af89baa830 100644 --- a/toolchain/check/testdata/packages/no_prelude/export_mixed.carbon +++ b/toolchain/check/testdata/packages/no_prelude/export_mixed.carbon @@ -266,6 +266,7 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -284,8 +285,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -320,6 +321,7 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -338,8 +340,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -374,6 +376,7 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -392,8 +395,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -463,6 +466,7 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -481,8 +485,8 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] @@ -517,11 +521,13 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %D.val: %D = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -545,15 +551,15 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc8: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc8: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %D = binding_pattern d -// CHECK:STDOUT: %.loc9: %D = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.510 = binding_pattern d +// CHECK:STDOUT: %.loc9: %pattern_type.510 = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %D = var d // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] diff --git a/toolchain/check/testdata/packages/no_prelude/export_name.carbon b/toolchain/check/testdata/packages/no_prelude/export_name.carbon index 96e0938c5cc5..5e518d057545 100644 --- a/toolchain/check/testdata/packages/no_prelude/export_name.carbon +++ b/toolchain/check/testdata/packages/no_prelude/export_name.carbon @@ -390,11 +390,13 @@ private export C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %NSC: type = class_type @NSC [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] +// CHECK:STDOUT: %pattern_type.373: type = pattern_type %NSC [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -422,15 +424,15 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %NSC = binding_pattern nsc -// CHECK:STDOUT: %.loc7_1: %NSC = var_pattern %nsc.patt +// CHECK:STDOUT: %nsc.patt: %pattern_type.373 = binding_pattern nsc +// CHECK:STDOUT: %.loc7_1: %pattern_type.373 = var_pattern %nsc.patt // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var nsc // CHECK:STDOUT: %.loc7_12: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -484,11 +486,13 @@ private export C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %NSC: type = class_type @NSC [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] +// CHECK:STDOUT: %pattern_type.c0b: type = pattern_type %NSC [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -517,15 +521,15 @@ private export C; // CHECK:STDOUT: %default.import.loc2_29.1 = import // CHECK:STDOUT: %default.import.loc2_29.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc4: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc4: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %NSC = binding_pattern nsc -// CHECK:STDOUT: %.loc5_1: %NSC = var_pattern %nsc.patt +// CHECK:STDOUT: %nsc.patt: %pattern_type.c0b = binding_pattern nsc +// CHECK:STDOUT: %.loc5_1: %pattern_type.c0b = var_pattern %nsc.patt // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var nsc // CHECK:STDOUT: %.loc5_12: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -579,11 +583,13 @@ private export C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %NSC: type = class_type @NSC [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] +// CHECK:STDOUT: %pattern_type.c0b: type = pattern_type %NSC [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -611,15 +617,15 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %NSC = binding_pattern nsc -// CHECK:STDOUT: %.loc7_1: %NSC = var_pattern %nsc.patt +// CHECK:STDOUT: %nsc.patt: %pattern_type.c0b = binding_pattern nsc +// CHECK:STDOUT: %.loc7_1: %pattern_type.c0b = var_pattern %nsc.patt // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var nsc // CHECK:STDOUT: %.loc7_12: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -751,11 +757,13 @@ private export C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %NSC: type = class_type @NSC [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] +// CHECK:STDOUT: %pattern_type.d03: type = pattern_type %NSC [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -783,15 +791,15 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %NSC = binding_pattern nsc -// CHECK:STDOUT: %.loc8_1: %NSC = var_pattern %nsc.patt +// CHECK:STDOUT: %nsc.patt: %pattern_type.d03 = binding_pattern nsc +// CHECK:STDOUT: %.loc8_1: %pattern_type.d03 = var_pattern %nsc.patt // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var nsc // CHECK:STDOUT: %.loc8_12: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -845,11 +853,13 @@ private export C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9be: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %NSC: type = class_type @NSC [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type.9f4: = complete_type_witness %struct_type.y [concrete] +// CHECK:STDOUT: %pattern_type.373: type = pattern_type %NSC [concrete] // CHECK:STDOUT: %NSC.val: %NSC = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -877,15 +887,15 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc7: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc7: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] // CHECK:STDOUT: %c: ref %C = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %nsc.patt: %NSC = binding_pattern nsc -// CHECK:STDOUT: %.loc8_1: %NSC = var_pattern %nsc.patt +// CHECK:STDOUT: %nsc.patt: %pattern_type.373 = binding_pattern nsc +// CHECK:STDOUT: %.loc8_1: %pattern_type.373 = var_pattern %nsc.patt // CHECK:STDOUT: } // CHECK:STDOUT: %nsc.var: ref %NSC = var nsc // CHECK:STDOUT: %.loc8_12: type = splice_block %NSC.ref [concrete = constants.%NSC] { @@ -993,6 +1003,7 @@ private export C; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %C.val: %C = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -1011,8 +1022,8 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc6: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] diff --git a/toolchain/check/testdata/packages/no_prelude/fail_export_name_params.carbon b/toolchain/check/testdata/packages/no_prelude/fail_export_name_params.carbon index 7883de337ae0..91bbddd981dd 100644 --- a/toolchain/check/testdata/packages/no_prelude/fail_export_name_params.carbon +++ b/toolchain/check/testdata/packages/no_prelude/fail_export_name_params.carbon @@ -33,7 +33,8 @@ export C2(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C1.type: type = generic_class_type @C1 [concrete] // CHECK:STDOUT: %C1.generic: %C1.type = struct_value () [concrete] // CHECK:STDOUT: %C2.type: type = generic_class_type @C2 [concrete] @@ -46,12 +47,12 @@ export C2(T:! type); // CHECK:STDOUT: .C2 = %C2.decl // CHECK:STDOUT: } // CHECK:STDOUT: %C1.decl: %C1.type = class_decl @C1 [concrete = constants.%C1.generic] { -// CHECK:STDOUT: %T.patt.loc4_10.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_10.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc4_10.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_10.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %C2.decl: %C2.type = class_decl @C2 [concrete = constants.%C2.generic] { -// CHECK:STDOUT: %T.patt.loc5_10.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_10.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc5_10.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_10.2 (constants.%T)] // CHECK:STDOUT: } @@ -59,14 +60,14 @@ export C2(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C1(%T.loc4_10.1: type) { // CHECK:STDOUT: %T.loc4_10.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_10.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_10.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_10.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_10.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C2(%T.loc5_10.1: type) { // CHECK:STDOUT: %T.loc5_10.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc5_10.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc5_10.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc5_10.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_10.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } @@ -87,7 +88,8 @@ export C2(T:! type); // CHECK:STDOUT: %C1.type: type = generic_class_type @C1 [concrete] // CHECK:STDOUT: %C1.generic: %C1.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C2.type: type = generic_class_type @C2 [concrete] // CHECK:STDOUT: %C2.generic: %C2.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -112,14 +114,14 @@ export C2(T:! type); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C1(imports.%Foo.import_ref.5ab3ec.1: type) [from "a.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C2(imports.%Foo.import_ref.5ab3ec.2: type) [from "a.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: class; // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/packages/no_prelude/implicit_imports_entities.carbon b/toolchain/check/testdata/packages/no_prelude/implicit_imports_entities.carbon index 4d645821f463..bacdd2827b9c 100644 --- a/toolchain/check/testdata/packages/no_prelude/implicit_imports_entities.carbon +++ b/toolchain/check/testdata/packages/no_prelude/implicit_imports_entities.carbon @@ -331,8 +331,10 @@ import Other library "o1"; // CHECK:STDOUT: %C1: type = class_type @C1 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.fec: type = pattern_type %C1 [concrete] // CHECK:STDOUT: %C1.val: %C1 = struct_value () [concrete] // CHECK:STDOUT: %C2: type = class_type @C2 [concrete] +// CHECK:STDOUT: %pattern_type.838: type = pattern_type %C2 [concrete] // CHECK:STDOUT: %C2.val: %C2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -355,15 +357,15 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_35.1 = import // CHECK:STDOUT: %default.import.loc2_35.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %C1 = binding_pattern c1 -// CHECK:STDOUT: %.loc6: %C1 = var_pattern %c1.patt +// CHECK:STDOUT: %c1.patt: %pattern_type.fec = binding_pattern c1 +// CHECK:STDOUT: %.loc6: %pattern_type.fec = var_pattern %c1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C1 = var c1 // CHECK:STDOUT: %C1.ref: type = name_ref C1, imports.%Main.C1 [concrete = constants.%C1] // CHECK:STDOUT: %c1: ref %C1 = bind_name c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %C2 = binding_pattern c2 -// CHECK:STDOUT: %.loc7: %C2 = var_pattern %c2.patt +// CHECK:STDOUT: %c2.patt: %pattern_type.838 = binding_pattern c2 +// CHECK:STDOUT: %.loc7: %pattern_type.838 = var_pattern %c2.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c2.var: ref %C2 = var c2 // CHECK:STDOUT: %C2.ref: type = name_ref C2, imports.%Main.C2 [concrete = constants.%C2] @@ -416,6 +418,7 @@ import Other library "o1"; // CHECK:STDOUT: %C1: type = class_type @C1 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C1 [concrete] // CHECK:STDOUT: %C1.val: %C1 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -433,8 +436,8 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_22.1 = import // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %C1 = binding_pattern c1 -// CHECK:STDOUT: %.loc6: %C1 = var_pattern %c1.patt +// CHECK:STDOUT: %c1.patt: %pattern_type = binding_pattern c1 +// CHECK:STDOUT: %.loc6: %pattern_type = var_pattern %c1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c1.var: ref %C1 = var c1 // CHECK:STDOUT: %C1.ref: type = name_ref C1, imports.%Main.C1 [concrete = constants.%C1] @@ -479,6 +482,7 @@ import Other library "o1"; // CHECK:STDOUT: %C: type = class_type @C [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %C.val: %C = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -500,8 +504,8 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_22.1 = import // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc4_1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C = var c // CHECK:STDOUT: %.loc4_10: type = splice_block %C.ref [concrete = constants.%C] { @@ -548,8 +552,10 @@ import Other library "o1"; // CHECK:STDOUT: %O1: type = class_type @O1 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.b5b: type = pattern_type %O1 [concrete] // CHECK:STDOUT: %O1.val: %O1 = struct_value () [concrete] // CHECK:STDOUT: %O2: type = class_type @O2 [concrete] +// CHECK:STDOUT: %pattern_type.7dd: type = pattern_type %O2 [concrete] // CHECK:STDOUT: %O2.val: %O2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -578,8 +584,8 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_25.2 = import // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o1.patt: %O1 = binding_pattern o1 -// CHECK:STDOUT: %.loc6_1: %O1 = var_pattern %o1.patt +// CHECK:STDOUT: %o1.patt: %pattern_type.b5b = binding_pattern o1 +// CHECK:STDOUT: %.loc6_1: %pattern_type.b5b = var_pattern %o1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %o1.var: ref %O1 = var o1 // CHECK:STDOUT: %.loc6_14: type = splice_block %O1.ref [concrete = constants.%O1] { @@ -588,8 +594,8 @@ import Other library "o1"; // CHECK:STDOUT: } // CHECK:STDOUT: %o1: ref %O1 = bind_name o1, %o1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o2.patt: %O2 = binding_pattern o2 -// CHECK:STDOUT: %.loc7_1: %O2 = var_pattern %o2.patt +// CHECK:STDOUT: %o2.patt: %pattern_type.7dd = binding_pattern o2 +// CHECK:STDOUT: %.loc7_1: %pattern_type.7dd = var_pattern %o2.patt // CHECK:STDOUT: } // CHECK:STDOUT: %o2.var: ref %O2 = var o2 // CHECK:STDOUT: %.loc7_14: type = splice_block %O2.ref [concrete = constants.%O2] { @@ -647,6 +653,7 @@ import Other library "o1"; // CHECK:STDOUT: %O1: type = class_type @O1 [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %O1 [concrete] // CHECK:STDOUT: %O1.val: %O1 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -669,8 +676,8 @@ import Other library "o1"; // CHECK:STDOUT: %default.import.loc2_22.2 = import // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %o1.patt: %O1 = binding_pattern o1 -// CHECK:STDOUT: %.loc6_1: %O1 = var_pattern %o1.patt +// CHECK:STDOUT: %o1.patt: %pattern_type = binding_pattern o1 +// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %o1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %o1.var: ref %O1 = var o1 // CHECK:STDOUT: %.loc6_14: type = splice_block %O1.ref [concrete = constants.%O1] { diff --git a/toolchain/check/testdata/packages/no_prelude/missing_prelude.carbon b/toolchain/check/testdata/packages/no_prelude/missing_prelude.carbon index 372175564817..6435b106f4f5 100644 --- a/toolchain/check/testdata/packages/no_prelude/missing_prelude.carbon +++ b/toolchain/check/testdata/packages/no_prelude/missing_prelude.carbon @@ -157,10 +157,13 @@ var n: {} = i32; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt: %T = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.7dc = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] @@ -171,10 +174,10 @@ var n: {} = i32; // CHECK:STDOUT: .Int = %Int.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %T.patt.loc4_8.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_8.2 (constants.%T.patt)] -// CHECK:STDOUT: %N.patt.loc4_18.1: @Int.%T.loc4_8.2 (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_18.2 (constants.%N.patt)] -// CHECK:STDOUT: %return.patt: %empty_struct_type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_struct_type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc4_8.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc4_18.1: @Int.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_18.2 (constants.%N.patt)] +// CHECK:STDOUT: %return.patt: %pattern_type.a96 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a96 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_29.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc4_29.2: type = converted %.loc4_29.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] @@ -188,9 +191,10 @@ var n: {} = i32; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Int(%T.loc4_8.1: type, %N.loc4_18.1: @Int.%T.loc4_8.2 (%T)) { // CHECK:STDOUT: %T.loc4_8.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc4_8.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc4_8.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc4_8.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_8.2 (constants.%T.patt)] // CHECK:STDOUT: %N.loc4_18.2: @Int.%T.loc4_8.2 (%T) = bind_symbolic_name N, 1 [symbolic = %N.loc4_18.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc4_18.2: @Int.%T.loc4_8.2 (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_18.2 (constants.%N.patt)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc4_8.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %N.patt.loc4_18.2: @Int.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc4_18.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -207,6 +211,7 @@ var n: {} = i32; // CHECK:STDOUT: %T.loc4_8.2 => constants.%T // CHECK:STDOUT: %T.patt.loc4_8.2 => constants.%T.patt // CHECK:STDOUT: %N.loc4_18.2 => constants.%N +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc // CHECK:STDOUT: %N.patt.loc4_18.2 => constants.%N.patt // CHECK:STDOUT: } // CHECK:STDOUT: @@ -214,14 +219,18 @@ var n: {} = i32; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %N.patt.51c: %T = symbolic_binding_pattern N, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt.7fd: %pattern_type.7dc = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt.4fd: Core.IntLiteral = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt.e09: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Int.specific_fn: = specific_function %Int, @Int(Core.IntLiteral, %int_32) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -241,8 +250,8 @@ var n: {} = i32; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %empty_struct_type = binding_pattern n -// CHECK:STDOUT: %.loc6_1: %empty_struct_type = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.a96 = binding_pattern n +// CHECK:STDOUT: %.loc6_1: %pattern_type.a96 = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %empty_struct_type = var n // CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_struct_type] { @@ -254,9 +263,10 @@ var n: {} = i32; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Int(imports.%Core.import_ref.5ab: type, imports.%Core.import_ref.34c: @Int.%T (%T)) [from "prelude_fake_int.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: %N: @Int.%T (%T) = bind_symbolic_name N, 1 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %N.patt: @Int.%T (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt (constants.%N.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %N.patt: @Int.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt (constants.%N.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -276,14 +286,16 @@ var n: {} = i32; // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %N => constants.%N -// CHECK:STDOUT: %N.patt => constants.%N.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc +// CHECK:STDOUT: %N.patt => constants.%N.patt.7fd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Int(Core.IntLiteral, constants.%int_32) { // CHECK:STDOUT: %T => Core.IntLiteral // CHECK:STDOUT: %T.patt => constants.%T.patt // CHECK:STDOUT: %N => constants.%int_32 -// CHECK:STDOUT: %N.patt => constants.%N.patt.4fd +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc0 +// CHECK:STDOUT: %N.patt => constants.%N.patt.e09 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } @@ -292,15 +304,19 @@ var n: {} = i32; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic] -// CHECK:STDOUT: %N.patt.51c: %T = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] +// CHECK:STDOUT: %N.patt.7fd: %pattern_type.7dc = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] -// CHECK:STDOUT: %N.patt.4fd: Core.IntLiteral = symbolic_binding_pattern N, 1 [symbolic] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] +// CHECK:STDOUT: %N.patt.e09: %pattern_type.dc0 = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Int.specific_fn: = specific_function %Int, @Int(Core.IntLiteral, %int_32) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -310,10 +326,10 @@ var n: {} = i32; // CHECK:STDOUT: .n = %n // CHECK:STDOUT: } // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %T.patt.loc8_8.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] -// CHECK:STDOUT: %N.patt.loc8_18.1: @Int.%T.loc8_8.2 (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc8_18.2 (constants.%N.patt.51c)] -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %T.patt.loc8_8.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %N.patt.loc8_18.1: @Int.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc8_18.2 (constants.%N.patt.7fd)] +// CHECK:STDOUT: %return.patt: %pattern_type.cb1 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.cb1 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_29.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc8_29.2: type = converted %.loc8_29.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -324,8 +340,8 @@ var n: {} = i32; // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %empty_tuple.type = binding_pattern n -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.cb1 = binding_pattern n +// CHECK:STDOUT: %.loc10_1: %pattern_type.cb1 = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %empty_tuple.type = var n // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -337,9 +353,10 @@ var n: {} = i32; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Int(%T.loc8_8.1: type, %N.loc8_18.1: @Int.%T.loc8_8.2 (%T)) { // CHECK:STDOUT: %T.loc8_8.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_8.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_8.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_8.2 (constants.%T.patt)] // CHECK:STDOUT: %N.loc8_18.2: @Int.%T.loc8_8.2 (%T) = bind_symbolic_name N, 1 [symbolic = %N.loc8_18.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc8_18.2: @Int.%T.loc8_8.2 (%T) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc8_18.2 (constants.%N.patt.51c)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %T.loc8_8.2 [symbolic = %pattern_type (constants.%pattern_type.7dc)] +// CHECK:STDOUT: %N.patt.loc8_18.2: @Int.%pattern_type (%pattern_type.7dc) = symbolic_binding_pattern N, 1 [symbolic = %N.patt.loc8_18.2 (constants.%N.patt.7fd)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -365,14 +382,16 @@ var n: {} = i32; // CHECK:STDOUT: %T.loc8_8.2 => constants.%T // CHECK:STDOUT: %T.patt.loc8_8.2 => constants.%T.patt // CHECK:STDOUT: %N.loc8_18.2 => constants.%N -// CHECK:STDOUT: %N.patt.loc8_18.2 => constants.%N.patt.51c +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dc +// CHECK:STDOUT: %N.patt.loc8_18.2 => constants.%N.patt.7fd // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Int(Core.IntLiteral, constants.%int_32) { // CHECK:STDOUT: %T.loc8_8.2 => Core.IntLiteral // CHECK:STDOUT: %T.patt.loc8_8.2 => constants.%T.patt // CHECK:STDOUT: %N.loc8_18.2 => constants.%int_32 -// CHECK:STDOUT: %N.patt.loc8_18.2 => constants.%N.patt.4fd +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc0 +// CHECK:STDOUT: %N.patt.loc8_18.2 => constants.%N.patt.e09 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/packages/raw_core.carbon b/toolchain/check/testdata/packages/raw_core.carbon index 1162a7f17e26..8b5d091ea347 100644 --- a/toolchain/check/testdata/packages/raw_core.carbon +++ b/toolchain/check/testdata/packages/raw_core.carbon @@ -198,6 +198,7 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: %Core.elem: type = unbound_element_type %Core, %i32 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] // CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] +// CHECK:STDOUT: %pattern_type.c8a: type = pattern_type %Core [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %As.type.fd4: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.99b: type = fn_type @Convert.1, @As(%i32) [concrete] @@ -233,8 +234,8 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Core.decl: type = class_decl @Core [concrete = constants.%Core] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %Core = binding_pattern c -// CHECK:STDOUT: %.loc6: %Core = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c8a = binding_pattern c +// CHECK:STDOUT: %.loc6: %pattern_type.c8a = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %Core = var c // CHECK:STDOUT: %Core.ref: type = name_ref r#Core, %Core.decl [concrete = constants.%Core] diff --git a/toolchain/check/testdata/patterns/min_prelude/underscore.carbon b/toolchain/check/testdata/patterns/min_prelude/underscore.carbon index bdc72cf68c77..cd8363f3a7a6 100644 --- a/toolchain/check/testdata/patterns/min_prelude/underscore.carbon +++ b/toolchain/check/testdata/patterns/min_prelude/underscore.carbon @@ -121,6 +121,7 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -140,7 +141,7 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc4: %empty_struct_type = binding_pattern _ +// CHECK:STDOUT: %_.patt.loc4: %pattern_type = binding_pattern _ // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc4_9.2: %empty_struct_type = struct_literal () @@ -150,8 +151,8 @@ fn F() -> {} { // CHECK:STDOUT: %.loc4_14: %empty_struct_type = converted @__global_init.%.loc4, %empty_struct [concrete = constants.%empty_struct] // CHECK:STDOUT: %_.loc4: %empty_struct_type = bind_name _, %.loc4_14 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc5: %empty_struct_type = binding_pattern _ -// CHECK:STDOUT: %.loc5_1: %empty_struct_type = var_pattern %_.patt.loc5 +// CHECK:STDOUT: %_.patt.loc5: %pattern_type = binding_pattern _ +// CHECK:STDOUT: %.loc5_1: %pattern_type = var_pattern %_.patt.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: %_.var: ref %empty_struct_type = var _ // CHECK:STDOUT: %.loc5_9.1: type = splice_block %.loc5_9.3 [concrete = constants.%empty_struct_type] { @@ -165,7 +166,7 @@ fn F() -> {} { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc8: %empty_struct_type = binding_pattern _ +// CHECK:STDOUT: %_.patt.loc8: %pattern_type = binding_pattern _ // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_16.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc8_11.1: type = splice_block %.loc8_11.3 [concrete = constants.%empty_struct_type] { @@ -176,8 +177,8 @@ fn F() -> {} { // CHECK:STDOUT: %.loc8_16.2: %empty_struct_type = converted %.loc8_16.1, %empty_struct [concrete = constants.%empty_struct] // CHECK:STDOUT: %_.loc8: %empty_struct_type = bind_name _, %.loc8_16.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt.loc9: %empty_struct_type = binding_pattern _ -// CHECK:STDOUT: %.loc9_3.1: %empty_struct_type = var_pattern %_.patt.loc9 +// CHECK:STDOUT: %_.patt.loc9: %pattern_type = binding_pattern _ +// CHECK:STDOUT: %.loc9_3.1: %pattern_type = var_pattern %_.patt.loc9 // CHECK:STDOUT: } // CHECK:STDOUT: %_.var: ref %empty_struct_type = var _ // CHECK:STDOUT: %.loc9_16.1: %empty_struct_type = struct_literal () @@ -206,6 +207,7 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -232,8 +234,8 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt: %empty_struct_type = binding_pattern _ -// CHECK:STDOUT: %_.param_patt: %empty_struct_type = value_param_pattern %_.patt, call_param0 +// CHECK:STDOUT: %_.patt: %pattern_type = binding_pattern _ +// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern %_.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_struct_type] { @@ -243,8 +245,8 @@ fn F() -> {} { // CHECK:STDOUT: %_: %empty_struct_type = bind_name _, %_.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %_.patt: %empty_struct_type = binding_pattern _ -// CHECK:STDOUT: %_.param_patt: %empty_struct_type = value_param_pattern %_.patt, call_param0 +// CHECK:STDOUT: %_.patt: %pattern_type = binding_pattern _ +// CHECK:STDOUT: %_.param_patt: %pattern_type = value_param_pattern %_.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %_.param: %empty_struct_type = value_param call_param0 // CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.3 [concrete = constants.%empty_struct_type] { @@ -277,7 +279,8 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %_: type = bind_symbolic_name _, 0 [symbolic] -// CHECK:STDOUT: %_.patt: type = symbolic_binding_pattern _, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -302,7 +305,7 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt.loc4_6.1: type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.patt.loc4_6.1: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.loc4_6.1: type = bind_symbolic_name _, 0 [symbolic = %_.loc4_6.2 (constants.%_)] // CHECK:STDOUT: } @@ -311,7 +314,7 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%_.loc4_6.1: type) { // CHECK:STDOUT: %_.loc4_6.2: type = bind_symbolic_name _, 0 [symbolic = %_.loc4_6.2 (constants.%_)] -// CHECK:STDOUT: %_.patt.loc4_6.2: type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.patt.loc4_6.2: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -347,7 +350,8 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %_: type = bind_symbolic_name _, 0 [symbolic] -// CHECK:STDOUT: %_.patt: type = symbolic_binding_pattern _, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] @@ -372,7 +376,7 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt.loc4_6.1: type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.patt.loc4_6.1: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.loc4_6.1: type = bind_symbolic_name _, 0 [symbolic = %_.loc4_6.2 (constants.%_)] // CHECK:STDOUT: } @@ -381,7 +385,7 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%_.loc4_6.1: type) { // CHECK:STDOUT: %_.loc4_6.2: type = bind_symbolic_name _, 0 [symbolic = %_.loc4_6.2 (constants.%_)] -// CHECK:STDOUT: %_.patt.loc4_6.2: type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.patt.loc4_6.2: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -410,7 +414,8 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %_: type = bind_symbolic_name _, 0 [symbolic] -// CHECK:STDOUT: %_.patt: type = symbolic_binding_pattern _, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete] +// CHECK:STDOUT: %_.patt: %pattern_type = symbolic_binding_pattern _, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -432,12 +437,12 @@ fn F() -> {} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %_.patt.loc4_6.1: type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.patt.loc4_6.1: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.loc4_6.1: type = bind_symbolic_name _, 0 [symbolic = %_.loc4_6.2 (constants.%_)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %_.patt.loc6_6.1: type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6_6.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.patt.loc6_6.1: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6_6.2 (constants.%_.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %_.loc6_6.1: type = bind_symbolic_name _, 0 [symbolic = %_.loc6_6.2 (constants.%_)] // CHECK:STDOUT: } @@ -445,14 +450,14 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%_.loc4_6.1: type) { // CHECK:STDOUT: %_.loc4_6.2: type = bind_symbolic_name _, 0 [symbolic = %_.loc4_6.2 (constants.%_)] -// CHECK:STDOUT: %_.patt.loc4_6.2: type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.patt.loc4_6.2: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc4_6.2 (constants.%_.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @G(%_.loc6_6.1: type) { // CHECK:STDOUT: %_.loc6_6.2: type = bind_symbolic_name _, 0 [symbolic = %_.loc6_6.2 (constants.%_)] -// CHECK:STDOUT: %_.patt.loc6_6.2: type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6_6.2 (constants.%_.patt)] +// CHECK:STDOUT: %_.patt.loc6_6.2: %pattern_type = symbolic_binding_pattern _, 0 [symbolic = %_.patt.loc6_6.2 (constants.%_.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/pointer/address_of_deref.carbon b/toolchain/check/testdata/pointer/address_of_deref.carbon index c0ba4bceb353..ce59c84f152d 100644 --- a/toolchain/check/testdata/pointer/address_of_deref.carbon +++ b/toolchain/check/testdata/pointer/address_of_deref.carbon @@ -18,6 +18,7 @@ fn F() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -52,8 +53,8 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -65,8 +66,8 @@ fn F() -> i32 { // CHECK:STDOUT: fn @F() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %.loc12_3.1: %i32 = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.7ce = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var n // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/pointer/address_of_lvalue.carbon b/toolchain/check/testdata/pointer/address_of_lvalue.carbon index 9fd82637d16e..022542d1b7be 100644 --- a/toolchain/check/testdata/pointer/address_of_lvalue.carbon +++ b/toolchain/check/testdata/pointer/address_of_lvalue.carbon @@ -29,6 +29,7 @@ fn F() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %ptr.3ee: type = ptr_type %struct_type.a.b.501 [concrete] +// CHECK:STDOUT: %pattern_type.851: type = pattern_type %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -48,9 +49,12 @@ fn F() { // CHECK:STDOUT: %bound_method.b92: = bound_method %int_2.ecc, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %struct: %struct_type.a.b.501 = struct_value (%int_1.5d2, %int_2.ef8) [concrete] +// CHECK:STDOUT: %pattern_type.8dd: type = pattern_type %ptr.3ee [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] // CHECK:STDOUT: %tuple: %tuple.type.d07 = tuple_value (%int_1.5d2, %int_2.ef8) [concrete] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] @@ -77,8 +81,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %struct_type.a.b.501 = binding_pattern s -// CHECK:STDOUT: %.loc12_3.1: %struct_type.a.b.501 = var_pattern %s.patt +// CHECK:STDOUT: %s.patt: %pattern_type.851 = binding_pattern s +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.851 = var_pattern %s.patt // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref %struct_type.a.b.501 = var s // CHECK:STDOUT: %int_1.loc12: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -112,8 +116,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %s: ref %struct_type.a.b.501 = bind_name s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %ptr.3ee = binding_pattern p -// CHECK:STDOUT: %.loc14_3: %ptr.3ee = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: %pattern_type.8dd = binding_pattern p +// CHECK:STDOUT: %.loc14_3: %pattern_type.8dd = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.3ee = var p // CHECK:STDOUT: %s.ref.loc14: ref %struct_type.a.b.501 = name_ref s, %s @@ -129,8 +133,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref %ptr.3ee = bind_name p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %q.patt: %ptr.235 = binding_pattern q -// CHECK:STDOUT: %.loc15_3: %ptr.235 = var_pattern %q.patt +// CHECK:STDOUT: %q.patt: %pattern_type.fe8 = binding_pattern q +// CHECK:STDOUT: %.loc15_3: %pattern_type.fe8 = var_pattern %q.patt // CHECK:STDOUT: } // CHECK:STDOUT: %q.var: ref %ptr.235 = var q // CHECK:STDOUT: %s.ref.loc15: ref %struct_type.a.b.501 = name_ref s, %s @@ -144,8 +148,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %q: ref %ptr.235 = bind_name q, %q.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %r.patt: %ptr.235 = binding_pattern r -// CHECK:STDOUT: %.loc16_3: %ptr.235 = var_pattern %r.patt +// CHECK:STDOUT: %r.patt: %pattern_type.fe8 = binding_pattern r +// CHECK:STDOUT: %.loc16_3: %pattern_type.fe8 = var_pattern %r.patt // CHECK:STDOUT: } // CHECK:STDOUT: %r.var: ref %ptr.235 = var r // CHECK:STDOUT: %s.ref.loc16: ref %struct_type.a.b.501 = name_ref s, %s @@ -159,8 +163,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %r: ref %ptr.235 = bind_name r, %r.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t.patt: %tuple.type.d07 = binding_pattern t -// CHECK:STDOUT: %.loc18_3.1: %tuple.type.d07 = var_pattern %t.patt +// CHECK:STDOUT: %t.patt: %pattern_type.511 = binding_pattern t +// CHECK:STDOUT: %.loc18_3.1: %pattern_type.511 = var_pattern %t.patt // CHECK:STDOUT: } // CHECK:STDOUT: %t.var: ref %tuple.type.d07 = var t // CHECK:STDOUT: %int_1.loc18: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -195,8 +199,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %t: ref %tuple.type.d07 = bind_name t, %t.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t0.patt: %ptr.235 = binding_pattern t0 -// CHECK:STDOUT: %.loc19_3: %ptr.235 = var_pattern %t0.patt +// CHECK:STDOUT: %t0.patt: %pattern_type.fe8 = binding_pattern t0 +// CHECK:STDOUT: %.loc19_3: %pattern_type.fe8 = var_pattern %t0.patt // CHECK:STDOUT: } // CHECK:STDOUT: %t0.var: ref %ptr.235 = var t0 // CHECK:STDOUT: %t.ref.loc19: ref %tuple.type.d07 = name_ref t, %t @@ -211,8 +215,8 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %t0: ref %ptr.235 = bind_name t0, %t0.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %t1.patt: %ptr.235 = binding_pattern t1 -// CHECK:STDOUT: %.loc20_3: %ptr.235 = var_pattern %t1.patt +// CHECK:STDOUT: %t1.patt: %pattern_type.fe8 = binding_pattern t1 +// CHECK:STDOUT: %.loc20_3: %pattern_type.fe8 = var_pattern %t1.patt // CHECK:STDOUT: } // CHECK:STDOUT: %t1.var: ref %ptr.235 = var t1 // CHECK:STDOUT: %t.ref.loc20: ref %tuple.type.d07 = name_ref t, %t diff --git a/toolchain/check/testdata/pointer/arrow.carbon b/toolchain/check/testdata/pointer/arrow.carbon index e7535f0e990d..8593c4c42821 100644 --- a/toolchain/check/testdata/pointer/arrow.carbon +++ b/toolchain/check/testdata/pointer/arrow.carbon @@ -27,6 +27,7 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %Member.type: type = fn_type @Member [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Member: %Member.type = struct_value () [concrete] @@ -34,6 +35,7 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %ptr.019 [concrete] // CHECK:STDOUT: %struct_type.field: type = struct_type {.field: %ptr.019} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.field [concrete] +// CHECK:STDOUT: %pattern_type.44a: type = pattern_type %ptr.019 [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -54,8 +56,8 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %ptr.patt: %ptr.019 = binding_pattern ptr -// CHECK:STDOUT: %ptr.param_patt: %ptr.019 = value_param_pattern %ptr.patt, call_param0 +// CHECK:STDOUT: %ptr.patt: %pattern_type.44a = binding_pattern ptr +// CHECK:STDOUT: %ptr.param_patt: %pattern_type.44a = value_param_pattern %ptr.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %ptr.param: %ptr.019 = value_param call_param0 // CHECK:STDOUT: %.loc16: type = splice_block %ptr.loc16_14 [concrete = constants.%ptr.019] { @@ -68,8 +70,8 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %Member.decl: %Member.type = fn_decl @Member [concrete = constants.%Member] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %self.patt: %pattern_type.c48 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c48 = value_param_pattern %self.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: %C = value_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] diff --git a/toolchain/check/testdata/pointer/basic.carbon b/toolchain/check/testdata/pointer/basic.carbon index c543495cad1f..59b0fff18083 100644 --- a/toolchain/check/testdata/pointer/basic.carbon +++ b/toolchain/check/testdata/pointer/basic.carbon @@ -20,6 +20,7 @@ fn F() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -36,6 +37,7 @@ fn F() -> i32 { // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -54,8 +56,8 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -67,8 +69,8 @@ fn F() -> i32 { // CHECK:STDOUT: fn @F() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %.loc12_3.1: %i32 = var_pattern %n.patt +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %.loc12_3.1: %pattern_type.7ce = var_pattern %n.patt // CHECK:STDOUT: } // CHECK:STDOUT: %n.var: ref %i32 = var n // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -85,8 +87,8 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %n: ref %i32 = bind_name n, %n.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %ptr.235 = binding_pattern p -// CHECK:STDOUT: %.loc13_3: %ptr.235 = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: %pattern_type.fe8 = binding_pattern p +// CHECK:STDOUT: %.loc13_3: %pattern_type.fe8 = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr.235 = var p // CHECK:STDOUT: %n.ref: ref %i32 = name_ref n, %n diff --git a/toolchain/check/testdata/pointer/fail_address_of_value.carbon b/toolchain/check/testdata/pointer/fail_address_of_value.carbon index a48c00358388..7062a01c17c0 100644 --- a/toolchain/check/testdata/pointer/fail_address_of_value.carbon +++ b/toolchain/check/testdata/pointer/fail_address_of_value.carbon @@ -105,9 +105,11 @@ fn AddressOfParam(param: i32) { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.ba9: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a.ba9 [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %AddressOfLiteral.type: type = fn_type @AddressOfLiteral [concrete] @@ -143,6 +145,7 @@ fn AddressOfParam(param: i32) { // CHECK:STDOUT: %tuple: %tuple.type = tuple_value (%int_1, %int_2) [concrete] // CHECK:STDOUT: %AddressOfParam.type: type = fn_type @AddressOfParam [concrete] // CHECK:STDOUT: %AddressOfParam: %AddressOfParam.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -167,8 +170,8 @@ fn AddressOfParam(param: i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -176,8 +179,8 @@ fn AddressOfParam(param: i32) { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %return.patt: %struct_type.a.ba9 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.a.ba9 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.268 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.268 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -191,8 +194,8 @@ fn AddressOfParam(param: i32) { // CHECK:STDOUT: %AddressOfType.decl: %AddressOfType.type = fn_decl @AddressOfType [concrete = constants.%AddressOfType] {} {} // CHECK:STDOUT: %AddressOfTupleElementValue.decl: %AddressOfTupleElementValue.type = fn_decl @AddressOfTupleElementValue [concrete = constants.%AddressOfTupleElementValue] {} {} // CHECK:STDOUT: %AddressOfParam.decl: %AddressOfParam.type = fn_decl @AddressOfParam [concrete = constants.%AddressOfParam] { -// CHECK:STDOUT: %param.patt: %i32 = binding_pattern param -// CHECK:STDOUT: %param.param_patt: %i32 = value_param_pattern %param.patt, call_param0 +// CHECK:STDOUT: %param.patt: %pattern_type.7ce = binding_pattern param +// CHECK:STDOUT: %param.param_patt: %pattern_type.7ce = value_param_pattern %param.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %param.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc95: type = splice_block %i32.loc95 [concrete = constants.%i32] { @@ -289,8 +292,8 @@ fn AddressOfParam(param: i32) { // CHECK:STDOUT: fn @AddressOfParam(%param.param: %i32) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %param_addr.patt: %ptr.235 = binding_pattern param_addr -// CHECK:STDOUT: %.loc100_3: %ptr.235 = var_pattern %param_addr.patt +// CHECK:STDOUT: %param_addr.patt: %pattern_type.fe8 = binding_pattern param_addr +// CHECK:STDOUT: %.loc100_3: %pattern_type.fe8 = var_pattern %param_addr.patt // CHECK:STDOUT: } // CHECK:STDOUT: %param_addr.var: ref %ptr.235 = var param_addr // CHECK:STDOUT: %param.ref: %i32 = name_ref param, %param diff --git a/toolchain/check/testdata/pointer/fail_deref_error.carbon b/toolchain/check/testdata/pointer/fail_deref_error.carbon index 14bfce43ef26..bb0ba66302ee 100644 --- a/toolchain/check/testdata/pointer/fail_deref_error.carbon +++ b/toolchain/check/testdata/pointer/fail_deref_error.carbon @@ -24,6 +24,7 @@ let n2: i32 = undeclared->foo; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -43,7 +44,7 @@ let n2: i32 = undeclared->foo; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15: type = splice_block %i32.loc15 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -51,7 +52,7 @@ let n2: i32 = undeclared->foo; // CHECK:STDOUT: } // CHECK:STDOUT: %n: %i32 = bind_name n, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n2.patt: %i32 = binding_pattern n2 +// CHECK:STDOUT: %n2.patt: %pattern_type.7ce = binding_pattern n2 // CHECK:STDOUT: } // CHECK:STDOUT: %.loc20: type = splice_block %i32.loc20 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] diff --git a/toolchain/check/testdata/pointer/fail_deref_not_pointer.carbon b/toolchain/check/testdata/pointer/fail_deref_not_pointer.carbon index 0ddc43ba3b02..6bd26f281769 100644 --- a/toolchain/check/testdata/pointer/fail_deref_not_pointer.carbon +++ b/toolchain/check/testdata/pointer/fail_deref_not_pointer.carbon @@ -47,6 +47,7 @@ fn Deref(n: i32) { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Deref.type: type = fn_type @Deref [concrete] // CHECK:STDOUT: %Deref: %Deref.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -69,8 +70,8 @@ fn Deref(n: i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Deref.decl: %Deref.type = fn_decl @Deref [concrete = constants.%Deref] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %n.param: %i32 = value_param call_param0 // CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/pointer/fail_type_mismatch.carbon b/toolchain/check/testdata/pointer/fail_type_mismatch.carbon index 80042fc778a2..c233a88bfae2 100644 --- a/toolchain/check/testdata/pointer/fail_type_mismatch.carbon +++ b/toolchain/check/testdata/pointer/fail_type_mismatch.carbon @@ -25,8 +25,10 @@ fn ConstMismatch(p: const {}*) -> const ({}*) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %const.c48: type = const_type %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.bf9: type = ptr_type %const.c48 [concrete] +// CHECK:STDOUT: %pattern_type.db0: type = pattern_type %ptr.bf9 [concrete] // CHECK:STDOUT: %ptr.c28: type = ptr_type %empty_struct_type [concrete] // CHECK:STDOUT: %const.987: type = const_type %ptr.c28 [concrete] +// CHECK:STDOUT: %pattern_type.3c6: type = pattern_type %const.987 [concrete] // CHECK:STDOUT: %ConstMismatch.type: type = fn_type @ConstMismatch [concrete] // CHECK:STDOUT: %ConstMismatch: %ConstMismatch.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -46,10 +48,10 @@ fn ConstMismatch(p: const {}*) -> const ({}*) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ConstMismatch.decl: %ConstMismatch.type = fn_decl @ConstMismatch [concrete = constants.%ConstMismatch] { -// CHECK:STDOUT: %p.patt: %ptr.bf9 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.bf9 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %const.987 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %const.987 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.db0 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.db0 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3c6 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3c6 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_43: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc11_44: type = converted %.loc11_43, constants.%empty_struct_type [concrete = constants.%empty_struct_type] diff --git a/toolchain/check/testdata/pointer/import.carbon b/toolchain/check/testdata/pointer/import.carbon index 094400198275..24029e17506e 100644 --- a/toolchain/check/testdata/pointer/import.carbon +++ b/toolchain/check/testdata/pointer/import.carbon @@ -26,6 +26,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] @@ -40,6 +41,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -59,8 +61,8 @@ var a: i32* = a_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_orig.patt: %i32 = binding_pattern a_orig -// CHECK:STDOUT: %.loc4_1: %i32 = var_pattern %a_orig.patt +// CHECK:STDOUT: %a_orig.patt: %pattern_type.7ce = binding_pattern a_orig +// CHECK:STDOUT: %.loc4_1: %pattern_type.7ce = var_pattern %a_orig.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_orig.var: ref %i32 = var a_orig // CHECK:STDOUT: %.loc4_13: type = splice_block %i32.loc4 [concrete = constants.%i32] { @@ -69,8 +71,8 @@ var a: i32* = a_ref; // CHECK:STDOUT: } // CHECK:STDOUT: %a_orig: ref %i32 = bind_name a_orig, %a_orig.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: %ptr.235 = binding_pattern a_ref -// CHECK:STDOUT: %.loc5_1: %ptr.235 = var_pattern %a_ref.patt +// CHECK:STDOUT: %a_ref.patt: %pattern_type.fe8 = binding_pattern a_ref +// CHECK:STDOUT: %.loc5_1: %pattern_type.fe8 = var_pattern %a_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref %ptr.235 = var a_ref // CHECK:STDOUT: %.loc5_15: type = splice_block %ptr [concrete = constants.%ptr.235] { @@ -103,6 +105,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %ptr.9e1: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.f6a: type = pattern_type %ptr.9e1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -126,8 +129,8 @@ var a: i32* = a_ref; // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %ptr.9e1 = binding_pattern a -// CHECK:STDOUT: %.loc4_1: %ptr.9e1 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.f6a = binding_pattern a +// CHECK:STDOUT: %.loc4_1: %pattern_type.f6a = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %ptr.9e1 = var a // CHECK:STDOUT: %.loc4_11: type = splice_block %ptr [concrete = constants.%ptr.9e1] { diff --git a/toolchain/check/testdata/pointer/nested_const.carbon b/toolchain/check/testdata/pointer/nested_const.carbon index 0de09f976a61..529cc1596018 100644 --- a/toolchain/check/testdata/pointer/nested_const.carbon +++ b/toolchain/check/testdata/pointer/nested_const.carbon @@ -23,6 +23,8 @@ fn F(p: const (const (const i32*)*)) -> const i32 { // CHECK:STDOUT: %const.58f: type = const_type %ptr.36b [concrete] // CHECK:STDOUT: %ptr.6e8: type = ptr_type %const.58f [concrete] // CHECK:STDOUT: %const.fa2: type = const_type %ptr.6e8 [concrete] +// CHECK:STDOUT: %pattern_type.800: type = pattern_type %const.fa2 [concrete] +// CHECK:STDOUT: %pattern_type.a65: type = pattern_type %const.20a [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -42,10 +44,10 @@ fn F(p: const (const (const i32*)*)) -> const i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %p.patt: %const.fa2 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %const.fa2 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %const.20a = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %const.20a = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.800 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.800 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.a65 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.a65 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12_47: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12_47: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/pointer/types.carbon b/toolchain/check/testdata/pointer/types.carbon index e0e47b5eb05c..edef98f68ff8 100644 --- a/toolchain/check/testdata/pointer/types.carbon +++ b/toolchain/check/testdata/pointer/types.carbon @@ -22,10 +22,12 @@ fn ConstPtr(p: const i32*) -> (const i32)* { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] +// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete] // CHECK:STDOUT: %Ptr.type: type = fn_type @Ptr [concrete] // CHECK:STDOUT: %Ptr: %Ptr.type = struct_value () [concrete] // CHECK:STDOUT: %const: type = const_type %i32 [concrete] // CHECK:STDOUT: %ptr.36b: type = ptr_type %const [concrete] +// CHECK:STDOUT: %pattern_type.bff: type = pattern_type %ptr.36b [concrete] // CHECK:STDOUT: %ConstPtr.type: type = fn_type @ConstPtr [concrete] // CHECK:STDOUT: %ConstPtr: %ConstPtr.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -46,10 +48,10 @@ fn ConstPtr(p: const i32*) -> (const i32)* { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Ptr.decl: %Ptr.type = fn_decl @Ptr [concrete = constants.%Ptr] { -// CHECK:STDOUT: %p.patt: %ptr.235 = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.235 = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.235 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.235 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.fe8 = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.fe8 = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.fe8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.fe8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_20: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -65,10 +67,10 @@ fn ConstPtr(p: const i32*) -> (const i32)* { // CHECK:STDOUT: %return: ref %ptr.235 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ConstPtr.decl: %ConstPtr.type = fn_decl @ConstPtr [concrete = constants.%ConstPtr] { -// CHECK:STDOUT: %p.patt: %ptr.36b = binding_pattern p -// CHECK:STDOUT: %p.param_patt: %ptr.36b = value_param_pattern %p.patt, call_param0 -// CHECK:STDOUT: %return.patt: %ptr.36b = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %ptr.36b = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %p.patt: %pattern_type.bff = binding_pattern p +// CHECK:STDOUT: %p.param_patt: %pattern_type.bff = value_param_pattern %p.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.bff = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.bff = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc15_38: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc15_38: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/code_after_return_value.carbon b/toolchain/check/testdata/return/code_after_return_value.carbon index 6951a47875bf..83bc5698e31e 100644 --- a/toolchain/check/testdata/return/code_after_return_value.carbon +++ b/toolchain/check/testdata/return/code_after_return_value.carbon @@ -25,8 +25,10 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -61,10 +63,10 @@ fn F(b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/fail_call_in_type.carbon b/toolchain/check/testdata/return/fail_call_in_type.carbon index 0e138303d62a..510c1f9a82cd 100644 --- a/toolchain/check/testdata/return/fail_call_in_type.carbon +++ b/toolchain/check/testdata/return/fail_call_in_type.carbon @@ -20,6 +20,7 @@ fn Six() -> ReturnType() { return 6; } // CHECK:STDOUT: --- fail_call_in_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %ReturnType.type: type = fn_type @ReturnType [concrete] // CHECK:STDOUT: %ReturnType: %ReturnType.type = struct_value () [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] @@ -45,8 +46,8 @@ fn Six() -> ReturnType() { return 6; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ReturnType.decl: %ReturnType.type = fn_decl @ReturnType [concrete = constants.%ReturnType] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param diff --git a/toolchain/check/testdata/return/fail_let_in_type.carbon b/toolchain/check/testdata/return/fail_let_in_type.carbon index 0f828ca71841..ad25991e54aa 100644 --- a/toolchain/check/testdata/return/fail_let_in_type.carbon +++ b/toolchain/check/testdata/return/fail_let_in_type.carbon @@ -42,6 +42,7 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: --- fail_let_in_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Six.type: type = fn_type @Six [concrete] @@ -73,7 +74,7 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: type = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.98f = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %x: type = bind_name x, @__global_init.%i32.loc11 // CHECK:STDOUT: %Six.decl: %Six.type = fn_decl @Six [concrete = constants.%Six] { @@ -85,7 +86,7 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: %return: ref = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: type = binding_pattern y +// CHECK:STDOUT: %y.patt: %pattern_type.98f = binding_pattern y // CHECK:STDOUT: } // CHECK:STDOUT: %y: type = bind_name y, @__global_init.%i32.loc23 // CHECK:STDOUT: %HalfDozen.decl: %HalfDozen.type = fn_decl @HalfDozen [concrete = constants.%HalfDozen] { @@ -97,7 +98,7 @@ fn FirstPerfectNumber() -> z { return 6; } // CHECK:STDOUT: %return: ref = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %z.patt: type = binding_pattern z +// CHECK:STDOUT: %z.patt: %pattern_type.98f = binding_pattern z // CHECK:STDOUT: } // CHECK:STDOUT: %z: type = bind_name z, @__global_init.%i32.loc35 // CHECK:STDOUT: %FirstPerfectNumber.decl: %FirstPerfectNumber.type = fn_decl @FirstPerfectNumber [concrete = constants.%FirstPerfectNumber] { diff --git a/toolchain/check/testdata/return/fail_missing_return.carbon b/toolchain/check/testdata/return/fail_missing_return.carbon index 823c02dcf273..ae492c00be33 100644 --- a/toolchain/check/testdata/return/fail_missing_return.carbon +++ b/toolchain/check/testdata/return/fail_missing_return.carbon @@ -20,6 +20,7 @@ fn Main() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -39,8 +40,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon b/toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon index b94e9fc5f1d0..baaafc13e63f 100644 --- a/toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon +++ b/toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon @@ -19,6 +19,7 @@ fn F() -> () { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -37,8 +38,8 @@ fn F() -> () { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_12.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc11_12.2: type = converted %.loc11_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] diff --git a/toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon b/toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon index 6e7cbd99ece4..e37bdba67c49 100644 --- a/toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon +++ b/toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon @@ -21,6 +21,7 @@ fn Procedure() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Procedure.type: type = fn_type @Procedure [concrete] // CHECK:STDOUT: %Procedure: %Procedure.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -40,8 +41,8 @@ fn Procedure() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Procedure.decl: %Procedure.type = fn_decl @Procedure [concrete = constants.%Procedure] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/fail_return_with_returned_var.carbon b/toolchain/check/testdata/return/fail_return_with_returned_var.carbon index 997c4e9e364b..9d84e43dc9d3 100644 --- a/toolchain/check/testdata/return/fail_return_with_returned_var.carbon +++ b/toolchain/check/testdata/return/fail_return_with_returned_var.carbon @@ -38,6 +38,7 @@ fn G() -> C { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -58,6 +59,7 @@ fn G() -> C { // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] @@ -89,8 +91,8 @@ fn G() -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -99,8 +101,8 @@ fn G() -> C { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc24: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 @@ -128,8 +130,8 @@ fn G() -> C { // CHECK:STDOUT: fn @F() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %.loc12_12.1: %i32 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %.loc12_12.1: %pattern_type.7ce = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var v // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -152,8 +154,8 @@ fn G() -> C { // CHECK:STDOUT: fn @G() -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C = binding_pattern c -// CHECK:STDOUT: %.loc25_12.1: %C = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c +// CHECK:STDOUT: %.loc25_12.1: %pattern_type.c48 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] diff --git a/toolchain/check/testdata/return/fail_returned_var_no_return_type.carbon b/toolchain/check/testdata/return/fail_returned_var_no_return_type.carbon index efe8962aa861..37974ec8463f 100644 --- a/toolchain/check/testdata/return/fail_returned_var_no_return_type.carbon +++ b/toolchain/check/testdata/return/fail_returned_var_no_return_type.carbon @@ -50,6 +50,7 @@ fn ForgotReturnType() { // CHECK:STDOUT: %Procedure.type: type = fn_type @Procedure [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Procedure: %Procedure.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -72,8 +73,8 @@ fn ForgotReturnType() { // CHECK:STDOUT: fn @Procedure() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %empty_tuple.type = binding_pattern v -// CHECK:STDOUT: %.loc12_12.1: %empty_tuple.type = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type = binding_pattern v +// CHECK:STDOUT: %.loc12_12.1: %pattern_type = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var v // CHECK:STDOUT: %.loc12_25.1: %empty_tuple.type = tuple_literal () @@ -94,6 +95,7 @@ fn ForgotReturnType() { // CHECK:STDOUT: %ForgotReturnType.type: type = fn_type @ForgotReturnType [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ForgotReturnType: %ForgotReturnType.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -116,8 +118,8 @@ fn ForgotReturnType() { // CHECK:STDOUT: fn @ForgotReturnType() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %empty_tuple.type = binding_pattern v -// CHECK:STDOUT: %.loc12_12.1: %empty_tuple.type = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type = binding_pattern v +// CHECK:STDOUT: %.loc12_12.1: %pattern_type = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var v // CHECK:STDOUT: %.loc12_25.1: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/return/fail_returned_var_shadow.carbon b/toolchain/check/testdata/return/fail_returned_var_shadow.carbon index 3e7672ee1157..3dc8b9e9c42a 100644 --- a/toolchain/check/testdata/return/fail_returned_var_shadow.carbon +++ b/toolchain/check/testdata/return/fail_returned_var_shadow.carbon @@ -45,6 +45,7 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %SameScope.type: type = fn_type @SameScope [concrete] // CHECK:STDOUT: %SameScope: %SameScope.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -86,8 +87,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %SameScope.decl: %SameScope.type = fn_decl @SameScope [concrete = constants.%SameScope] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -95,8 +96,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %DifferentScopes.decl: %DifferentScopes.type = fn_decl @DifferentScopes [concrete = constants.%DifferentScopes] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc26: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc26: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -112,8 +113,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %.loc13_14.1: %i32 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %.loc13_14.1: %pattern_type.7ce = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var v // CHECK:STDOUT: %int_0.loc13: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -130,8 +131,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %i32 = bind_name v, %v.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %i32 = binding_pattern w -// CHECK:STDOUT: %.loc21_14.1: %i32 = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.7ce = binding_pattern w +// CHECK:STDOUT: %.loc21_14.1: %pattern_type.7ce = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var w // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -168,8 +169,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc27: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %.loc28_14.1: %i32 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %.loc28_14.1: %pattern_type.7ce = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var v // CHECK:STDOUT: %int_0.loc28: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -190,8 +191,8 @@ fn DifferentScopes() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc29: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %i32 = binding_pattern w -// CHECK:STDOUT: %.loc37_16.1: %i32 = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.7ce = binding_pattern w +// CHECK:STDOUT: %.loc37_16.1: %pattern_type.7ce = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var w // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/return/fail_returned_var_type.carbon b/toolchain/check/testdata/return/fail_returned_var_type.carbon index 67ca8fb24c48..d3cccc4b6e47 100644 --- a/toolchain/check/testdata/return/fail_returned_var_type.carbon +++ b/toolchain/check/testdata/return/fail_returned_var_type.carbon @@ -25,11 +25,13 @@ fn Mismatch() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Mismatch.type: type = fn_type @Mismatch [concrete] // CHECK:STDOUT: %Mismatch: %Mismatch.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %float: f64 = float_literal 0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -49,8 +51,8 @@ fn Mismatch() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Mismatch.decl: %Mismatch.type = fn_decl @Mismatch [concrete = constants.%Mismatch] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -62,8 +64,8 @@ fn Mismatch() -> i32 { // CHECK:STDOUT: fn @Mismatch() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: f64 = binding_pattern v -// CHECK:STDOUT: %.loc19_12: f64 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.3de = binding_pattern v +// CHECK:STDOUT: %.loc19_12: %pattern_type.3de = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref f64 = var v // CHECK:STDOUT: %float: f64 = float_literal 0 [concrete = constants.%float] diff --git a/toolchain/check/testdata/return/fail_type_mismatch.carbon b/toolchain/check/testdata/return/fail_type_mismatch.carbon index 9b6b8451f060..a3f69087895e 100644 --- a/toolchain/check/testdata/return/fail_type_mismatch.carbon +++ b/toolchain/check/testdata/return/fail_type_mismatch.carbon @@ -24,6 +24,7 @@ fn Main() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %float: f64 = float_literal 1 [concrete] @@ -45,8 +46,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/fail_value_missing.carbon b/toolchain/check/testdata/return/fail_value_missing.carbon index aa37b820c378..c1dbabc12a29 100644 --- a/toolchain/check/testdata/return/fail_value_missing.carbon +++ b/toolchain/check/testdata/return/fail_value_missing.carbon @@ -24,6 +24,7 @@ fn Main() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -43,8 +44,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/fail_var_in_type.carbon b/toolchain/check/testdata/return/fail_var_in_type.carbon index 7ef37b5bba57..1aa364f8cfd1 100644 --- a/toolchain/check/testdata/return/fail_var_in_type.carbon +++ b/toolchain/check/testdata/return/fail_var_in_type.carbon @@ -18,6 +18,7 @@ fn Six() -> x { return 6; } // CHECK:STDOUT: --- fail_var_in_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %Six.type: type = fn_type @Six [concrete] @@ -41,8 +42,8 @@ fn Six() -> x { return 6; } // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: type = binding_pattern x -// CHECK:STDOUT: %.loc11: type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.98f = binding_pattern x +// CHECK:STDOUT: %.loc11: %pattern_type.98f = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref type = var x // CHECK:STDOUT: %x: ref type = bind_name x, %x.var diff --git a/toolchain/check/testdata/return/min_prelude/import_convert_function.carbon b/toolchain/check/testdata/return/min_prelude/import_convert_function.carbon index 899406b383ed..74f5e4336020 100644 --- a/toolchain/check/testdata/return/min_prelude/import_convert_function.carbon +++ b/toolchain/check/testdata/return/min_prelude/import_convert_function.carbon @@ -68,17 +68,21 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: --- core.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %IntLiteral.type: type = fn_type @IntLiteral [concrete] // CHECK:STDOUT: %IntLiteral: %IntLiteral.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.96f: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.96f = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.07f: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic] // CHECK:STDOUT: %Self.0f3: %ImplicitAs.type.07f = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.0f3 [symbolic] +// CHECK:STDOUT: %pattern_type.a93: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %Convert.type.4cf: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %Convert.147: %Convert.type.4cf = struct_value () [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.095: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%T) [symbolic] @@ -92,6 +96,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.assoc_type.1cf: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%i32.builtin) [concrete] // CHECK:STDOUT: %assoc0.3ce: %ImplicitAs.assoc_type.1cf = assoc_entity element0, @ImplicitAs.%Convert.decl [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness: = impl_witness file.%ImplicitAs.impl_witness_table [concrete] +// CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] // CHECK:STDOUT: %Convert.type.c2a: type = fn_type @Convert.2 [concrete] // CHECK:STDOUT: %Convert.40d: %Convert.type.c2a = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.11a = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness) [concrete] @@ -104,17 +109,17 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: .ImplicitAs = %ImplicitAs.decl // CHECK:STDOUT: } // CHECK:STDOUT: %IntLiteral.decl: %IntLiteral.type = fn_decl @IntLiteral [concrete = constants.%IntLiteral] { -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %return.param: ref type = out_param call_param0 // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Int.decl: %Int.type = fn_decl @Int [concrete = constants.%Int] { -// CHECK:STDOUT: %N.patt: Core.IntLiteral = binding_pattern N -// CHECK:STDOUT: %N.param_patt: Core.IntLiteral = value_param_pattern %N.patt, call_param0 -// CHECK:STDOUT: %return.patt: type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = binding_pattern N +// CHECK:STDOUT: %N.param_patt: %pattern_type.dc0 = value_param_pattern %N.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %N.param: Core.IntLiteral = value_param call_param0 // CHECK:STDOUT: %.loc6_22.1: type = splice_block %.loc6_22.3 [concrete = Core.IntLiteral] { @@ -128,7 +133,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %return: ref type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.96f = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] { -// CHECK:STDOUT: %T.patt.loc8_22.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_22.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_22.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc8_22.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_22.2 (constants.%T)] // CHECK:STDOUT: } @@ -150,7 +155,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(%T.loc8_22.1: type) { // CHECK:STDOUT: %T.loc8_22.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_22.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_22.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_22.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_22.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_22.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T.loc8_22.2)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] @@ -163,10 +168,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: interface { // CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.0f3)] // CHECK:STDOUT: %Convert.decl: @ImplicitAs.%Convert.type (%Convert.type.4cf) = fn_decl @Convert.1 [symbolic = @ImplicitAs.%Convert (constants.%Convert.147)] { -// CHECK:STDOUT: %self.patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type) = binding_pattern self -// CHECK:STDOUT: %self.param_patt: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type) = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: @Convert.1.%T (%T) = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: @Convert.1.%T (%T) = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.a93) = binding_pattern self +// CHECK:STDOUT: %self.param_patt: @Convert.1.%pattern_type.loc9_14 (%pattern_type.a93) = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: @Convert.1.%pattern_type.loc9_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %T.ref: type = name_ref T, @ImplicitAs.%T.loc8_22.1 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type) = value_param call_param0 @@ -192,10 +197,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl: %.loc12_17.2 as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.c2a = fn_decl @Convert.2 [concrete = constants.%Convert.40d] { -// CHECK:STDOUT: %self.patt: Core.IntLiteral = binding_pattern self -// CHECK:STDOUT: %self.param_patt: Core.IntLiteral = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32.builtin = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32.builtin = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.dc0 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.dc0 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.956 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.956 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [concrete = constants.%i32.builtin] @@ -222,6 +227,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.07f)] // CHECK:STDOUT: %Self: @Convert.1.%ImplicitAs.type (%ImplicitAs.type.07f) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.0f3)] // CHECK:STDOUT: %Self.as_type.loc9_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_20.1 (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.loc9_14: type = pattern_type %Self.as_type.loc9_20.1 [symbolic = %pattern_type.loc9_14 (constants.%pattern_type.a93)] +// CHECK:STDOUT: %pattern_type.loc9_28: type = pattern_type %T [symbolic = %pattern_type.loc9_28 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @Convert.1.%Self.as_type.loc9_20.1 (%Self.as_type)) -> @Convert.1.%T (%T); // CHECK:STDOUT: } @@ -238,6 +245,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.07f // CHECK:STDOUT: %Self => constants.%Self.0f3 // CHECK:STDOUT: %Self.as_type.loc9_20.1 => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.a93 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(@Convert.1.%T) {} @@ -262,6 +271,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.11a // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet // CHECK:STDOUT: %Self.as_type.loc9_20.1 => Core.IntLiteral +// CHECK:STDOUT: %pattern_type.loc9_14 => constants.%pattern_type.dc0 +// CHECK:STDOUT: %pattern_type.loc9_28 => constants.%pattern_type.956 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- library.carbon @@ -270,9 +281,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] // CHECK:STDOUT: %N: %i32.builtin = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] +// CHECK:STDOUT: %N.patt: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.116: type = class_type @C, @C(%N) [symbolic] @@ -282,6 +295,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %D.elem: type = unbound_element_type %D, %i32.builtin [concrete] // CHECK:STDOUT: %struct_type.n.m.566: type = struct_type {.n: %i32.builtin, .m: %i32.builtin} [concrete] // CHECK:STDOUT: %complete_type.682: = complete_type_witness %struct_type.n.m.566 [concrete] +// CHECK:STDOUT: %pattern_type.510: type = pattern_type %D [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -291,10 +305,12 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.61e: type = facet_type <@ImplicitAs, @ImplicitAs(%i32.builtin)> [concrete] @@ -321,6 +337,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.assoc_type.75e: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%D) [concrete] // CHECK:STDOUT: %assoc0.579: %ImplicitAs.assoc_type.75e = assoc_entity element0, imports.%Core.import_ref.1c7 [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.4af: = impl_witness file.%ImplicitAs.impl_witness_table.loc10 [concrete] +// CHECK:STDOUT: %pattern_type.658: type = pattern_type %C.808 [concrete] // CHECK:STDOUT: %Convert.type.fff: type = fn_type @Convert.3 [concrete] // CHECK:STDOUT: %Convert.606: %Convert.type.fff = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.a19: %ImplicitAs.type.94e = facet_value %C.808, (%ImplicitAs.impl_witness.4af) [concrete] @@ -329,6 +346,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_1.f38: %i32.builtin = int_value 1 [concrete] // CHECK:STDOUT: %C.8be: type = class_type @C, @C(%int_1.f38) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.fcc: = impl_witness file.%ImplicitAs.impl_witness_table.loc11 [concrete] +// CHECK:STDOUT: %pattern_type.a77: type = pattern_type %C.8be [concrete] // CHECK:STDOUT: %Convert.type.89f: type = fn_type @Convert.4 [concrete] // CHECK:STDOUT: %Convert.689: %Convert.type.89f = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.340: %ImplicitAs.type.94e = facet_value %C.8be, (%ImplicitAs.impl_witness.fcc) [concrete] @@ -337,6 +355,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_2.5a1: %i32.builtin = int_value 2 [concrete] // CHECK:STDOUT: %C.c17: type = class_type @C, @C(%int_2.5a1) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.03e: = impl_witness file.%ImplicitAs.impl_witness_table.loc12 [concrete] +// CHECK:STDOUT: %pattern_type.58e: type = pattern_type %C.c17 [concrete] // CHECK:STDOUT: %Convert.type.e90: type = fn_type @Convert.5 [concrete] // CHECK:STDOUT: %Convert.ec9: %Convert.type.e90 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.ec0: %ImplicitAs.type.94e = facet_value %C.c17, (%ImplicitAs.impl_witness.03e) [concrete] @@ -345,6 +364,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_3.a0f: %i32.builtin = int_value 3 [concrete] // CHECK:STDOUT: %C.414: type = class_type @C, @C(%int_3.a0f) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.dec: = impl_witness file.%ImplicitAs.impl_witness_table.loc13 [concrete] +// CHECK:STDOUT: %pattern_type.861: type = pattern_type %C.414 [concrete] // CHECK:STDOUT: %Convert.type.5db: type = fn_type @Convert.6 [concrete] // CHECK:STDOUT: %Convert.193: %Convert.type.5db = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.999: %ImplicitAs.type.94e = facet_value %C.414, (%ImplicitAs.impl_witness.dec) [concrete] @@ -353,6 +373,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_4.4f1: %i32.builtin = int_value 4 [concrete] // CHECK:STDOUT: %C.488: type = class_type @C, @C(%int_4.4f1) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.842: = impl_witness file.%ImplicitAs.impl_witness_table.loc14 [concrete] +// CHECK:STDOUT: %pattern_type.d35: type = pattern_type %C.488 [concrete] // CHECK:STDOUT: %Convert.type.4e7: type = fn_type @Convert.7 [concrete] // CHECK:STDOUT: %Convert.52a: %Convert.type.4e7 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.527: %ImplicitAs.type.94e = facet_value %C.488, (%ImplicitAs.impl_witness.842) [concrete] @@ -361,6 +382,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_5.967: %i32.builtin = int_value 5 [concrete] // CHECK:STDOUT: %C.3e2: type = class_type @C, @C(%int_5.967) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.eb5: = impl_witness file.%ImplicitAs.impl_witness_table.loc15 [concrete] +// CHECK:STDOUT: %pattern_type.c88: type = pattern_type %C.3e2 [concrete] // CHECK:STDOUT: %Convert.type.658: type = fn_type @Convert.8 [concrete] // CHECK:STDOUT: %Convert.9b6: %Convert.type.658 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.79a: %ImplicitAs.type.94e = facet_value %C.3e2, (%ImplicitAs.impl_witness.eb5) [concrete] @@ -369,6 +391,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_6.ec5: %i32.builtin = int_value 6 [concrete] // CHECK:STDOUT: %C.78c: type = class_type @C, @C(%int_6.ec5) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.377: = impl_witness file.%ImplicitAs.impl_witness_table.loc16 [concrete] +// CHECK:STDOUT: %pattern_type.af2: type = pattern_type %C.78c [concrete] // CHECK:STDOUT: %Convert.type.623: type = fn_type @Convert.9 [concrete] // CHECK:STDOUT: %Convert.8c9: %Convert.type.623 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.5ba: %ImplicitAs.type.94e = facet_value %C.78c, (%ImplicitAs.impl_witness.377) [concrete] @@ -377,6 +400,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_7.6ae: %i32.builtin = int_value 7 [concrete] // CHECK:STDOUT: %C.6aa: type = class_type @C, @C(%int_7.6ae) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.308: = impl_witness file.%ImplicitAs.impl_witness_table.loc17 [concrete] +// CHECK:STDOUT: %pattern_type.045: type = pattern_type %C.6aa [concrete] // CHECK:STDOUT: %Convert.type.3f8: type = fn_type @Convert.10 [concrete] // CHECK:STDOUT: %Convert.71a: %Convert.type.3f8 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.b5c: %ImplicitAs.type.94e = facet_value %C.6aa, (%ImplicitAs.impl_witness.308) [concrete] @@ -391,11 +415,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//default, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//default, loc8_22, loaded [symbolic = @ImplicitAs.%T (constants.%T)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst49 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst51 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//default, loc9_32, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//default, Convert, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//default, loc8_22, loaded [symbolic = @ImplicitAs.%T (constants.%T)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst49 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst51 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//default, loc9_32, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: %Core.import_ref.c62: = import_ref Core//default, loc12_38, loaded [concrete = constants.%ImplicitAs.impl_witness.07a] // CHECK:STDOUT: %Core.import_ref.872: type = import_ref Core//default, loc12_17, loaded [concrete = Core.IntLiteral] @@ -411,7 +435,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %N.patt.loc6_9.1: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_9.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc6_9.1: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_9.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc6_13.1: type = splice_block %.loc6_13.3 [concrete = constants.%i32.builtin] { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -423,8 +447,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %return.param: ref %D = out_param call_param0 @@ -562,7 +586,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "core.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -587,10 +611,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.837: %C as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.fff = fn_decl @Convert.3 [concrete = constants.%Convert.606] { -// CHECK:STDOUT: %self.patt: %C.808 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.808 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.658 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.658 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %self.param: %C.808 = value_param call_param0 @@ -609,10 +633,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.511: %C as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.89f = fn_decl @Convert.4 [concrete = constants.%Convert.689] { -// CHECK:STDOUT: %self.patt: %C.8be = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.8be = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.a77 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.a77 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %self.param: %C.8be = value_param call_param0 @@ -631,10 +655,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.141: %C as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.e90 = fn_decl @Convert.5 [concrete = constants.%Convert.ec9] { -// CHECK:STDOUT: %self.patt: %C.c17 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.c17 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.58e = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.58e = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %self.param: %C.c17 = value_param call_param0 @@ -653,10 +677,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.e6b: %C as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.5db = fn_decl @Convert.6 [concrete = constants.%Convert.193] { -// CHECK:STDOUT: %self.patt: %C.414 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.414 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.861 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.861 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %self.param: %C.414 = value_param call_param0 @@ -675,10 +699,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.056: %C as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.4e7 = fn_decl @Convert.7 [concrete = constants.%Convert.52a] { -// CHECK:STDOUT: %self.patt: %C.488 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.488 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.d35 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.d35 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %self.param: %C.488 = value_param call_param0 @@ -697,10 +721,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.154: %C as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.658 = fn_decl @Convert.8 [concrete = constants.%Convert.9b6] { -// CHECK:STDOUT: %self.patt: %C.3e2 = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.3e2 = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.c88 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.c88 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %self.param: %C.3e2 = value_param call_param0 @@ -719,10 +743,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.a6d: %C as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.623 = fn_decl @Convert.9 [concrete = constants.%Convert.8c9] { -// CHECK:STDOUT: %self.patt: %C.78c = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.78c = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.af2 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.af2 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %self.param: %C.78c = value_param call_param0 @@ -741,10 +765,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: impl @impl.ebc: %C as %ImplicitAs.type { // CHECK:STDOUT: %Convert.decl: %Convert.type.3f8 = fn_decl @Convert.10 [concrete = constants.%Convert.71a] { -// CHECK:STDOUT: %self.patt: %C.6aa = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C.6aa = value_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %self.patt: %pattern_type.045 = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type.045 = value_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %self.param: %C.6aa = value_param call_param0 @@ -763,7 +787,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%N.loc6_9.1: %i32.builtin) { // CHECK:STDOUT: %N.loc6_9.2: %i32.builtin = bind_symbolic_name N, 0 [symbolic = %N.loc6_9.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc6_9.2: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_9.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc6_9.2: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc6_9.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -827,6 +851,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.1.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -916,6 +942,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%i32.builtin) { @@ -956,6 +984,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.94e // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.a19 // CHECK:STDOUT: %Self.as_type => constants.%C.808 +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.658 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_1.f38) { @@ -970,6 +1000,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.94e // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.340 // CHECK:STDOUT: %Self.as_type => constants.%C.8be +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.a77 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_2.5a1) { @@ -984,6 +1016,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.94e // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.ec0 // CHECK:STDOUT: %Self.as_type => constants.%C.c17 +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.58e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_3.a0f) { @@ -998,6 +1032,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.94e // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.999 // CHECK:STDOUT: %Self.as_type => constants.%C.414 +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.861 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_4.4f1) { @@ -1012,6 +1048,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.94e // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.527 // CHECK:STDOUT: %Self.as_type => constants.%C.488 +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.d35 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_5.967) { @@ -1026,6 +1064,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.94e // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.79a // CHECK:STDOUT: %Self.as_type => constants.%C.3e2 +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.c88 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_6.ec5) { @@ -1040,6 +1080,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.94e // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.5ba // CHECK:STDOUT: %Self.as_type => constants.%C.78c +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.af2 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @C(constants.%int_7.6ae) { @@ -1054,6 +1096,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.94e // CHECK:STDOUT: %Self => constants.%ImplicitAs.facet.b5c // CHECK:STDOUT: %Self.as_type => constants.%C.6aa +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.045 +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.510 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- user.carbon @@ -1062,10 +1106,13 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %Int.type: type = fn_type @Int [concrete] // CHECK:STDOUT: %Int: %Int.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] // CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %pattern_type.956: type = pattern_type %i32.builtin [concrete] // CHECK:STDOUT: %D: type = class_type @D [concrete] // CHECK:STDOUT: %struct_type.n.m: type = struct_type {.n: %i32.builtin, .m: %i32.builtin} [concrete] // CHECK:STDOUT: %complete_type.682: = complete_type_witness %struct_type.n.m [concrete] +// CHECK:STDOUT: %pattern_type.f8a: type = pattern_type %D [concrete] // CHECK:STDOUT: %F0.type: type = fn_type @F0 [concrete] // CHECK:STDOUT: %F0: %F0.type = struct_value () [concrete] // CHECK:STDOUT: %false: bool = bool_literal false [concrete] @@ -1074,15 +1121,17 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %N: %i32.builtin = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.d62: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic] // CHECK:STDOUT: %Self.519: %ImplicitAs.type.d62 = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Convert.type.275: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %Convert.42e: %Convert.type.275 = struct_value () [symbolic] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.519 [symbolic] +// CHECK:STDOUT: %pattern_type.f3e: type = pattern_type %Self.as_type [symbolic] +// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %T [symbolic] // CHECK:STDOUT: %ImplicitAs.assoc_type.ca0: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %assoc0.9f5: %ImplicitAs.assoc_type.ca0 = assoc_entity element0, imports.%Core.import_ref.1c7 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.61e: type = facet_type <@ImplicitAs, @ImplicitAs(%i32.builtin)> [concrete] @@ -1210,19 +1259,19 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: %P.D: type = import_ref P//library, D, loaded [concrete = constants.%D] // CHECK:STDOUT: %P.import_ref.7e5: = import_ref P//library, loc7_35, loaded [concrete = constants.%complete_type.682] -// CHECK:STDOUT: %P.import_ref.cab = import_ref P//library, inst48 [no loc], unloaded +// CHECK:STDOUT: %P.import_ref.cab = import_ref P//library, inst51 [no loc], unloaded // CHECK:STDOUT: %P.import_ref.a99 = import_ref P//library, loc7_16, unloaded // CHECK:STDOUT: %P.import_ref.9d2 = import_ref P//library, loc7_28, unloaded // CHECK:STDOUT: %P.C: %C.type = import_ref P//library, C, loaded [concrete = constants.%C.generic] // CHECK:STDOUT: %P.import_ref.85e: %i32.builtin = import_ref P//library, loc6_9, loaded [symbolic = @C.%N (constants.%N)] // CHECK:STDOUT: %P.import_ref.8f2: = import_ref P//library, loc6_19, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %P.import_ref.d9b = import_ref P//library, inst42 [no loc], unloaded +// CHECK:STDOUT: %P.import_ref.d9b = import_ref P//library, inst45 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.1: type = import_ref Core//default, loc8_22, loaded [symbolic = @ImplicitAs.%T (constants.%T)] -// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst49 [no loc], unloaded +// CHECK:STDOUT: %Core.import_ref.ff5 = import_ref Core//default, inst51 [no loc], unloaded // CHECK:STDOUT: %Core.import_ref.492: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.ca0) = import_ref Core//default, loc9_32, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.dc0)] // CHECK:STDOUT: %Core.Convert = import_ref Core//default, Convert, unloaded // CHECK:STDOUT: %Core.import_ref.5ab3ec.2: type = import_ref Core//default, loc8_22, loaded [symbolic = @ImplicitAs.%T (constants.%T)] -// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst49 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] +// CHECK:STDOUT: %Core.import_ref.ce1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.d62) = import_ref Core//default, inst51 [no loc], loaded [symbolic = @ImplicitAs.%Self (constants.%Self.519)] // CHECK:STDOUT: %Core.import_ref.1c7: @ImplicitAs.%Convert.type (%Convert.type.275) = import_ref Core//default, loc9_32, loaded [symbolic = @ImplicitAs.%Convert (constants.%Convert.42e)] // CHECK:STDOUT: %Core.import_ref.c62: = import_ref Core//default, loc12_38, loaded [concrete = constants.%ImplicitAs.impl_witness.07a] // CHECK:STDOUT: %Core.import_ref.872: type = import_ref Core//default, loc12_17, loaded [concrete = Core.IntLiteral] @@ -1263,10 +1312,10 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %P.import = import P // CHECK:STDOUT: %F0.decl: %F0.type = fn_decl @F0 [concrete = constants.%F0] { -// CHECK:STDOUT: %n.patt: %i32.builtin = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32.builtin = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %D = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %D = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.956 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.956 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.f8a = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.f8a = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %P.ref.loc7: = name_ref P, imports.%P [concrete = imports.%P] // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%P.D [concrete = constants.%D] @@ -1285,7 +1334,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.5ab3ec.1: type) [from "core.carbon"] { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] @@ -1359,7 +1408,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%P.import_ref.85e: %i32.builtin) [from "library.carbon"] { // CHECK:STDOUT: %N: %i32.builtin = bind_symbolic_name N, 0 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %N.patt: %i32.builtin = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] +// CHECK:STDOUT: %N.patt: %pattern_type.956 = symbolic_binding_pattern N, 0 [symbolic = %N.patt (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1603,6 +1652,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.d62)] // CHECK:STDOUT: %Self: @Convert.1.%ImplicitAs.type (%ImplicitAs.type.d62) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.519)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] +// CHECK:STDOUT: %pattern_type.1: type = pattern_type %Self.as_type [symbolic = %pattern_type.1 (constants.%pattern_type.f3e)] +// CHECK:STDOUT: %pattern_type.2: type = pattern_type %T [symbolic = %pattern_type.2 (constants.%pattern_type.7dc)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1646,6 +1697,8 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.d62 // CHECK:STDOUT: %Self => constants.%Self.519 // CHECK:STDOUT: %Self.as_type => constants.%Self.as_type +// CHECK:STDOUT: %pattern_type.1 => constants.%pattern_type.f3e +// CHECK:STDOUT: %pattern_type.2 => constants.%pattern_type.7dc // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%i32.builtin) { diff --git a/toolchain/check/testdata/return/returned_var.carbon b/toolchain/check/testdata/return/returned_var.carbon index 57470547ff38..490f907a45f3 100644 --- a/toolchain/check/testdata/return/returned_var.carbon +++ b/toolchain/check/testdata/return/returned_var.carbon @@ -32,6 +32,7 @@ fn G() -> i32 { // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %complete_type.705: = complete_type_witness %struct_type.a.b.501 [concrete] +// CHECK:STDOUT: %pattern_type.c48: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] @@ -46,6 +47,7 @@ fn G() -> i32 { // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.ab5: = bound_method %int_1.5b8, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.9a1: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] @@ -80,16 +82,16 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref.loc16: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 // CHECK:STDOUT: %return: ref %C = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -118,8 +120,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @F() -> %return.param: %C { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %result.patt: %C = binding_pattern result -// CHECK:STDOUT: %.loc17_12.1: %C = var_pattern %result.patt +// CHECK:STDOUT: %result.patt: %pattern_type.c48 = binding_pattern result +// CHECK:STDOUT: %.loc17_12.1: %pattern_type.c48 = var_pattern %result.patt // CHECK:STDOUT: } // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] @@ -151,8 +153,8 @@ fn G() -> i32 { // CHECK:STDOUT: fn @G() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %result.patt: %i32 = binding_pattern result -// CHECK:STDOUT: %.loc22_12.1: %i32 = var_pattern %result.patt +// CHECK:STDOUT: %result.patt: %pattern_type.7ce = binding_pattern result +// CHECK:STDOUT: %.loc22_12.1: %pattern_type.7ce = var_pattern %result.patt // CHECK:STDOUT: } // CHECK:STDOUT: %result.var: ref %i32 = var result // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] diff --git a/toolchain/check/testdata/return/returned_var_scope.carbon b/toolchain/check/testdata/return/returned_var_scope.carbon index f3ae07f7fd07..f35c831fc262 100644 --- a/toolchain/check/testdata/return/returned_var_scope.carbon +++ b/toolchain/check/testdata/return/returned_var_scope.carbon @@ -32,6 +32,7 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %UnrelatedScopes.type: type = fn_type @UnrelatedScopes [concrete] // CHECK:STDOUT: %UnrelatedScopes: %UnrelatedScopes.type = struct_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] @@ -39,6 +40,7 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.a2f = impl_witness_table (imports.%Core.import_ref.a5b), @impl.4f9 [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.c75: = impl_witness %ImplicitAs.impl_witness_table.a2f, @impl.4f9(%int_32) [concrete] // CHECK:STDOUT: %Convert.type.035: type = fn_type @Convert.2, @impl.4f9(%int_32) [concrete] // CHECK:STDOUT: %Convert.956: %Convert.type.035 = struct_value () [concrete] @@ -76,8 +78,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %UnrelatedScopes.decl: %UnrelatedScopes.type = fn_decl @UnrelatedScopes [concrete = constants.%UnrelatedScopes] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -85,10 +87,10 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %EnclosingButAfter.decl: %EnclosingButAfter.type = fn_decl @EnclosingButAfter [concrete = constants.%EnclosingButAfter] { -// CHECK:STDOUT: %b.patt: bool = binding_pattern b -// CHECK:STDOUT: %b.param_patt: bool = value_param_pattern %b.patt, call_param0 -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %b.patt: %pattern_type.831 = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %pattern_type.831 = value_param_pattern %b.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -111,8 +113,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc12: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %.loc13_14.1: %i32 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %.loc13_14.1: %pattern_type.7ce = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var v // CHECK:STDOUT: %int_0.loc13: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -136,8 +138,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then.loc15: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %i32 = binding_pattern w -// CHECK:STDOUT: %.loc16_14.1: %i32 = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.7ce = binding_pattern w +// CHECK:STDOUT: %.loc16_14.1: %pattern_type.7ce = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var w // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -174,8 +176,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %i32 = binding_pattern v -// CHECK:STDOUT: %.loc23_14.1: %i32 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.7ce = binding_pattern v +// CHECK:STDOUT: %.loc23_14.1: %pattern_type.7ce = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %i32 = var v // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0.5c6] @@ -196,8 +198,8 @@ fn EnclosingButAfter(b: bool) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !if.else: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %i32 = binding_pattern w -// CHECK:STDOUT: %.loc26_12.1: %i32 = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type.7ce = binding_pattern w +// CHECK:STDOUT: %.loc26_12.1: %pattern_type.7ce = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %i32 = var w // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/return/struct.carbon b/toolchain/check/testdata/return/struct.carbon index 2d7f0ac5375d..032adf2a0f54 100644 --- a/toolchain/check/testdata/return/struct.carbon +++ b/toolchain/check/testdata/return/struct.carbon @@ -18,6 +18,7 @@ fn Main() -> {.a: i32} { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.ba9: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a.ba9 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] @@ -53,8 +54,8 @@ fn Main() -> {.a: i32} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %struct_type.a.ba9 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.a.ba9 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.268 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.268 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/tuple.carbon b/toolchain/check/testdata/return/tuple.carbon index 2735bbe1865e..abd46cd507ce 100644 --- a/toolchain/check/testdata/return/tuple.carbon +++ b/toolchain/check/testdata/return/tuple.carbon @@ -20,6 +20,7 @@ fn Main() -> (i32, i32) { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_15.447: Core.IntLiteral = int_value 15 [concrete] @@ -59,8 +60,8 @@ fn Main() -> (i32, i32) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %tuple.type.d07 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.d07 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.511 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.511 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc12_15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc12_15: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/return/value.carbon b/toolchain/check/testdata/return/value.carbon index a04091259eb8..fb0a6857278f 100644 --- a/toolchain/check/testdata/return/value.carbon +++ b/toolchain/check/testdata/return/value.carbon @@ -17,6 +17,7 @@ fn Main() -> i32 { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -50,8 +51,8 @@ fn Main() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/struct/fail_assign_empty.carbon b/toolchain/check/testdata/struct/fail_assign_empty.carbon index 01a5c47f22f0..b1ec02b00679 100644 --- a/toolchain/check/testdata/struct/fail_assign_empty.carbon +++ b/toolchain/check/testdata/struct/fail_assign_empty.carbon @@ -20,6 +20,7 @@ var x: {.a: i32} = {}; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -38,8 +39,8 @@ var x: {.a: i32} = {}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %struct_type.a = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.268 = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type.268 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a = var x // CHECK:STDOUT: %.loc15_16: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { diff --git a/toolchain/check/testdata/struct/fail_assign_to_empty.carbon b/toolchain/check/testdata/struct/fail_assign_to_empty.carbon index 831a5bb907a7..1b5ef2e5e588 100644 --- a/toolchain/check/testdata/struct/fail_assign_to_empty.carbon +++ b/toolchain/check/testdata/struct/fail_assign_to_empty.carbon @@ -18,6 +18,7 @@ var x: {} = {.a = 1}; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: } @@ -36,8 +37,8 @@ var x: {} = {.a = 1}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %empty_struct_type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_struct_type = var x // CHECK:STDOUT: %.loc15_9.1: type = splice_block %.loc15_9.3 [concrete = constants.%empty_struct_type] { diff --git a/toolchain/check/testdata/struct/fail_duplicate_name.carbon b/toolchain/check/testdata/struct/fail_duplicate_name.carbon index e8aff9c4b675..6c4f24c8eca7 100644 --- a/toolchain/check/testdata/struct/fail_duplicate_name.carbon +++ b/toolchain/check/testdata/struct/fail_duplicate_name.carbon @@ -62,9 +62,12 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.ba9: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a.ba9 [concrete] // CHECK:STDOUT: %struct_type.b.c: type = struct_type {.b: %i32, .c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.366: type = pattern_type %struct_type.b.c [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: } @@ -115,7 +118,7 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: } // CHECK:STDOUT: %v: = bind_name v, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %i32 = binding_pattern w +// CHECK:STDOUT: %w.patt: %pattern_type.7ce = binding_pattern w // CHECK:STDOUT: } // CHECK:STDOUT: %.loc36: type = splice_block %i32.loc36 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc36: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -123,8 +126,8 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: } // CHECK:STDOUT: %w: %i32 = bind_name w, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.ba9 = binding_pattern x -// CHECK:STDOUT: %.loc45_1: %struct_type.a.ba9 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.268 = binding_pattern x +// CHECK:STDOUT: %.loc45_1: %pattern_type.268 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.ba9 = var x // CHECK:STDOUT: %.loc45_16: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.ba9] { @@ -134,8 +137,8 @@ var y: {.b: i32, .c: i32} = {.b = 3, .b = 4}; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.ba9 = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %struct_type.b.c = binding_pattern y -// CHECK:STDOUT: %.loc54_1: %struct_type.b.c = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.366 = binding_pattern y +// CHECK:STDOUT: %.loc54_1: %pattern_type.366 = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.b.c = var y // CHECK:STDOUT: %.loc54_25: type = splice_block %struct_type.b.c [concrete = constants.%struct_type.b.c] { diff --git a/toolchain/check/testdata/struct/fail_field_name_mismatch.carbon b/toolchain/check/testdata/struct/fail_field_name_mismatch.carbon index 4bfbdc503b44..056e04e74059 100644 --- a/toolchain/check/testdata/struct/fail_field_name_mismatch.carbon +++ b/toolchain/check/testdata/struct/fail_field_name_mismatch.carbon @@ -26,9 +26,11 @@ var y: {.b: i32} = x; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.b.a15: type = struct_type {.b: Core.IntLiteral} [concrete] // CHECK:STDOUT: %struct_type.b.0a3: type = struct_type {.b: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.f4b: type = pattern_type %struct_type.b.0a3 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -47,8 +49,8 @@ var y: {.b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %struct_type.a = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.268 = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type.268 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a = var x // CHECK:STDOUT: %.loc15_16: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { @@ -58,8 +60,8 @@ var y: {.b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %struct_type.b.0a3 = binding_pattern y -// CHECK:STDOUT: %.loc21_1: %struct_type.b.0a3 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.f4b = binding_pattern y +// CHECK:STDOUT: %.loc21_1: %pattern_type.f4b = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.b.0a3 = var y // CHECK:STDOUT: %.loc21_16: type = splice_block %struct_type.b [concrete = constants.%struct_type.b.0a3] { diff --git a/toolchain/check/testdata/struct/fail_field_type_mismatch.carbon b/toolchain/check/testdata/struct/fail_field_type_mismatch.carbon index 52ed92b7860d..f06492c20f9f 100644 --- a/toolchain/check/testdata/struct/fail_field_type_mismatch.carbon +++ b/toolchain/check/testdata/struct/fail_field_type_mismatch.carbon @@ -20,6 +20,7 @@ var x: {.a: i32} = {.b = 1.0}; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a [concrete] // CHECK:STDOUT: %float: f64 = float_literal 1 [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: f64} [concrete] // CHECK:STDOUT: } @@ -39,8 +40,8 @@ var x: {.a: i32} = {.b = 1.0}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %struct_type.a = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.268 = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type.268 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a = var x // CHECK:STDOUT: %.loc15_16: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { diff --git a/toolchain/check/testdata/struct/fail_member_access_type.carbon b/toolchain/check/testdata/struct/fail_member_access_type.carbon index f6906cab69d4..1f606240e901 100644 --- a/toolchain/check/testdata/struct/fail_member_access_type.carbon +++ b/toolchain/check/testdata/struct/fail_member_access_type.carbon @@ -22,10 +22,12 @@ var y: i32 = x.b; // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: f64} [concrete] +// CHECK:STDOUT: %pattern_type.d08: type = pattern_type %struct_type.a [concrete] // CHECK:STDOUT: %float: f64 = float_literal 4 [concrete] // CHECK:STDOUT: %struct: %struct_type.a = struct_value (%float) [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -45,8 +47,8 @@ var y: i32 = x.b; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %struct_type.a = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.d08 = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type.d08 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a = var x // CHECK:STDOUT: %.loc11_16: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { @@ -58,8 +60,8 @@ var y: i32 = x.b; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %i32 = binding_pattern y -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.7ce = binding_pattern y +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var y // CHECK:STDOUT: %.loc16_8: type = splice_block %i32 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/struct/fail_non_member_access.carbon b/toolchain/check/testdata/struct/fail_non_member_access.carbon index 62c822370559..c5043ef075de 100644 --- a/toolchain/check/testdata/struct/fail_non_member_access.carbon +++ b/toolchain/check/testdata/struct/fail_non_member_access.carbon @@ -21,6 +21,7 @@ var y: i32 = x.b; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.ba9: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a.ba9 [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -32,6 +33,7 @@ var y: i32 = x.b; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_4.0c1, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_4.0c1, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_4.940: %i32 = int_value 4 [concrete] @@ -55,8 +57,8 @@ var y: i32 = x.b; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.ba9 = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %struct_type.a.ba9 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.268 = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type.268 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.ba9 = var x // CHECK:STDOUT: %.loc11_16: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.ba9] { @@ -66,8 +68,8 @@ var y: i32 = x.b; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.ba9 = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %i32 = binding_pattern y -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.7ce = binding_pattern y +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var y // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/struct/fail_too_few_values.carbon b/toolchain/check/testdata/struct/fail_too_few_values.carbon index 0faf4ba61ec9..58f45d1704e8 100644 --- a/toolchain/check/testdata/struct/fail_too_few_values.carbon +++ b/toolchain/check/testdata/struct/fail_too_few_values.carbon @@ -20,6 +20,7 @@ var x: {.a: i32, .b: i32} = {.a = 1}; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.851: type = pattern_type %struct_type.a.b [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: } @@ -39,8 +40,8 @@ var x: {.a: i32, .b: i32} = {.a = 1}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.b = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %struct_type.a.b = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.851 = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type.851 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.b = var x // CHECK:STDOUT: %.loc15_25: type = splice_block %struct_type.a.b [concrete = constants.%struct_type.a.b] { diff --git a/toolchain/check/testdata/struct/fail_type_assign.carbon b/toolchain/check/testdata/struct/fail_type_assign.carbon index dd33d722e014..f4e9dabfa3a1 100644 --- a/toolchain/check/testdata/struct/fail_type_assign.carbon +++ b/toolchain/check/testdata/struct/fail_type_assign.carbon @@ -23,6 +23,7 @@ var x: {.a: i32} = {.a: i32}; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -41,8 +42,8 @@ var x: {.a: i32} = {.a: i32}; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a = binding_pattern x -// CHECK:STDOUT: %.loc18_1: %struct_type.a = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.268 = binding_pattern x +// CHECK:STDOUT: %.loc18_1: %pattern_type.268 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a = var x // CHECK:STDOUT: %.loc18_16: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { diff --git a/toolchain/check/testdata/struct/import.carbon b/toolchain/check/testdata/struct/import.carbon index 6ecdb684d48c..17411b463623 100644 --- a/toolchain/check/testdata/struct/import.carbon +++ b/toolchain/check/testdata/struct/import.carbon @@ -58,6 +58,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.ba9: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a.ba9 [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -77,6 +78,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %struct_type.b.c.929: type = struct_type {.b: %i32, .c: %tuple.type.a1c} [concrete] // CHECK:STDOUT: %struct_type.a.d.3d9: type = struct_type {.a: %struct_type.b.c.929, .d: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.665: type = pattern_type %struct_type.a.d.3d9 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %struct_type.b.c.9af: type = struct_type {.b: Core.IntLiteral, .c: %tuple.type.985} [concrete] // CHECK:STDOUT: %struct_type.a.d.b82: type = struct_type {.a: %struct_type.b.c.9af, .d: Core.IntLiteral} [concrete] @@ -85,7 +87,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %struct.20d: %struct_type.a.d.3d9 = struct_value (%struct.381, %int_0.6a9) [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %S: %struct_type.a.b.501 = bind_symbolic_name S, 0 [symbolic] -// CHECK:STDOUT: %S.patt: %struct_type.a.b.501 = symbolic_binding_pattern S, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.851: type = pattern_type %struct_type.a.b.501 [concrete] +// CHECK:STDOUT: %S.patt: %pattern_type.851 = symbolic_binding_pattern S, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.775: type = class_type @C, @C(%S) [symbolic] @@ -102,6 +105,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %struct.ed5: %struct_type.a.b.501 = struct_value (%int_1.5d2, %int_2.ef8) [concrete] // CHECK:STDOUT: %C.c8f: type = class_type @C, @C(%struct.ed5) [concrete] +// CHECK:STDOUT: %pattern_type.4f9: type = pattern_type %C.c8f [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -125,8 +129,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: %struct_type.a.ba9 = binding_pattern a_ref -// CHECK:STDOUT: %.loc4_1: %struct_type.a.ba9 = var_pattern %a_ref.patt +// CHECK:STDOUT: %a_ref.patt: %pattern_type.268 = binding_pattern a_ref +// CHECK:STDOUT: %.loc4_1: %pattern_type.268 = var_pattern %a_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref %struct_type.a.ba9 = var a_ref // CHECK:STDOUT: %.loc4_20: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.ba9] { @@ -136,8 +140,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref: ref %struct_type.a.ba9 = bind_name a_ref, %a_ref.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_ref.patt: %struct_type.a.d.3d9 = binding_pattern b_ref -// CHECK:STDOUT: %.loc5_1: %struct_type.a.d.3d9 = var_pattern %b_ref.patt +// CHECK:STDOUT: %b_ref.patt: %pattern_type.665 = binding_pattern b_ref +// CHECK:STDOUT: %.loc5_1: %pattern_type.665 = var_pattern %b_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b_ref.var: ref %struct_type.a.d.3d9 = var b_ref // CHECK:STDOUT: %.loc5_47: type = splice_block %struct_type.a.d [concrete = constants.%struct_type.a.d.3d9] { @@ -154,7 +158,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %b_ref: ref %struct_type.a.d.3d9 = bind_name b_ref, %b_ref.var // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %S.patt.loc8_9.1: %struct_type.a.b.501 = symbolic_binding_pattern S, 0 [symbolic = %S.patt.loc8_9.2 (constants.%S.patt)] +// CHECK:STDOUT: %S.patt.loc8_9.1: %pattern_type.851 = symbolic_binding_pattern S, 0 [symbolic = %S.patt.loc8_9.2 (constants.%S.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8: type = splice_block %struct_type.a.b [concrete = constants.%struct_type.a.b.501] { // CHECK:STDOUT: %int_32.loc8_18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -166,8 +170,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %S.loc8_9.1: %struct_type.a.b.501 = bind_symbolic_name S, 0 [symbolic = %S.loc8_9.2 (constants.%S)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %C.c8f = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.c8f = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.4f9 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.4f9 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -197,7 +201,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%S.loc8_9.1: %struct_type.a.b.501) { // CHECK:STDOUT: %S.loc8_9.2: %struct_type.a.b.501 = bind_symbolic_name S, 0 [symbolic = %S.loc8_9.2 (constants.%S)] -// CHECK:STDOUT: %S.patt.loc8_9.2: %struct_type.a.b.501 = symbolic_binding_pattern S, 0 [symbolic = %S.patt.loc8_9.2 (constants.%S.patt)] +// CHECK:STDOUT: %S.patt.loc8_9.2: %pattern_type.851 = symbolic_binding_pattern S, 0 [symbolic = %S.patt.loc8_9.2 (constants.%S.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -284,17 +288,20 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.b54: type = pattern_type %struct_type.a [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.dd4: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %struct_type.b.c: type = struct_type {.b: %i32, .c: %tuple.type.dd4} [concrete] // CHECK:STDOUT: %struct_type.a.d.9db: type = struct_type {.a: %struct_type.b.c, .d: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.020: type = pattern_type %struct_type.a.d.9db [concrete] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %struct_type.a.b.5ca: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %S: %struct_type.a.b.5ca = bind_symbolic_name S, 0 [symbolic] -// CHECK:STDOUT: %S.patt: %struct_type.a.b.5ca = symbolic_binding_pattern S, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dce: type = pattern_type %struct_type.a.b.5ca [concrete] +// CHECK:STDOUT: %S.patt: %pattern_type.dce = symbolic_binding_pattern S, 0 [symbolic] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -314,6 +321,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %int_2.d0d: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %struct: %struct_type.a.b.5ca = struct_value (%int_1.47b, %int_2.d0d) [concrete] // CHECK:STDOUT: %C.a8a: type = class_type @C, @C(%struct) [concrete] +// CHECK:STDOUT: %pattern_type.a5a: type = pattern_type %C.a8a [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -331,7 +339,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %Implicit.import_ref.c81: %struct_type.a.b.5ca = import_ref Implicit//default, loc8_9, loaded [symbolic = @C.%S (constants.%S)] // CHECK:STDOUT: %Implicit.import_ref.8f2: = import_ref Implicit//default, loc8_34, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Implicit.import_ref.b8b = import_ref Implicit//default, inst1394 [no loc], unloaded +// CHECK:STDOUT: %Implicit.import_ref.b8b = import_ref Implicit//default, inst1458 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -349,8 +357,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %struct_type.a = binding_pattern a -// CHECK:STDOUT: %.loc4_1: %struct_type.a = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.b54 = binding_pattern a +// CHECK:STDOUT: %.loc4_1: %pattern_type.b54 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %struct_type.a = var a // CHECK:STDOUT: %.loc4_16: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] { @@ -360,8 +368,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %struct_type.a = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %struct_type.a.d.9db = binding_pattern b -// CHECK:STDOUT: %.loc5_1: %struct_type.a.d.9db = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.020 = binding_pattern b +// CHECK:STDOUT: %.loc5_1: %pattern_type.020 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %struct_type.a.d.9db = var b // CHECK:STDOUT: %.loc5_43: type = splice_block %struct_type.a.d [concrete = constants.%struct_type.a.d.9db] { @@ -378,8 +386,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %struct_type.a.d.9db = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C.a8a = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %C.a8a = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.a5a = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type.a5a = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.a8a = var c // CHECK:STDOUT: %.loc6_26.1: type = splice_block %C [concrete = constants.%C.a8a] { @@ -410,7 +418,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Implicit.import_ref.c81: %struct_type.a.b.5ca) [from "implicit.carbon"] { // CHECK:STDOUT: %S: %struct_type.a.b.5ca = bind_symbolic_name S, 0 [symbolic = %S (constants.%S)] -// CHECK:STDOUT: %S.patt: %struct_type.a.b.5ca = symbolic_binding_pattern S, 0 [symbolic = %S.patt (constants.%S.patt)] +// CHECK:STDOUT: %S.patt: %pattern_type.dce = symbolic_binding_pattern S, 0 [symbolic = %S.patt (constants.%S.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -485,7 +493,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %S: %struct_type.a.b = bind_symbolic_name S, 0 [symbolic] -// CHECK:STDOUT: %S.patt: %struct_type.a.b = symbolic_binding_pattern S, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dce: type = pattern_type %struct_type.a.b [concrete] +// CHECK:STDOUT: %S.patt: %pattern_type.dce = symbolic_binding_pattern S, 0 [symbolic] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.c.d: type = struct_type {.c: Core.IntLiteral, .d: Core.IntLiteral} [concrete] @@ -508,7 +517,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %Implicit.import_ref.c81: %struct_type.a.b = import_ref Implicit//default, loc8_9, loaded [symbolic = @C.%S (constants.%S)] // CHECK:STDOUT: %Implicit.import_ref.8f2: = import_ref Implicit//default, loc8_34, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Implicit.import_ref.b8b = import_ref Implicit//default, inst1394 [no loc], unloaded +// CHECK:STDOUT: %Implicit.import_ref.b8b = import_ref Implicit//default, inst1458 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -539,7 +548,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Implicit.import_ref.c81: %struct_type.a.b) [from "implicit.carbon"] { // CHECK:STDOUT: %S: %struct_type.a.b = bind_symbolic_name S, 0 [symbolic = %S (constants.%S)] -// CHECK:STDOUT: %S.patt: %struct_type.a.b = symbolic_binding_pattern S, 0 [symbolic = %S.patt (constants.%S.patt)] +// CHECK:STDOUT: %S.patt: %pattern_type.dce = symbolic_binding_pattern S, 0 [symbolic = %S.patt (constants.%S.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -586,7 +595,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %struct_type.a.b.5ca: type = struct_type {.a: %i32, .b: %i32} [concrete] // CHECK:STDOUT: %S: %struct_type.a.b.5ca = bind_symbolic_name S, 0 [symbolic] -// CHECK:STDOUT: %S.patt: %struct_type.a.b.5ca = symbolic_binding_pattern S, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.dce: type = pattern_type %struct_type.a.b.5ca [concrete] +// CHECK:STDOUT: %S.patt: %pattern_type.dce = symbolic_binding_pattern S, 0 [symbolic] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -606,6 +616,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %int_4.ea3: %i32 = int_value 4 [concrete] // CHECK:STDOUT: %struct.8e6: %struct_type.a.b.5ca = struct_value (%int_3.d47, %int_4.ea3) [concrete] // CHECK:STDOUT: %C.5a7: type = class_type @C, @C(%struct.8e6) [concrete] +// CHECK:STDOUT: %pattern_type.366: type = pattern_type %C.5a7 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_2: %i32 = int_value 2 [concrete] @@ -626,7 +637,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %Implicit.import_ref.c81: %struct_type.a.b.5ca = import_ref Implicit//default, loc8_9, loaded [symbolic = @C.%S (constants.%S)] // CHECK:STDOUT: %Implicit.import_ref.8f2: = import_ref Implicit//default, loc8_34, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Implicit.import_ref.b8b = import_ref Implicit//default, inst1394 [no loc], unloaded +// CHECK:STDOUT: %Implicit.import_ref.b8b = import_ref Implicit//default, inst1458 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -642,8 +653,8 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_bad.patt: %C.5a7 = binding_pattern c_bad -// CHECK:STDOUT: %.loc10_1: %C.5a7 = var_pattern %c_bad.patt +// CHECK:STDOUT: %c_bad.patt: %pattern_type.366 = binding_pattern c_bad +// CHECK:STDOUT: %.loc10_1: %pattern_type.366 = var_pattern %c_bad.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c_bad.var: ref %C.5a7 = var c_bad // CHECK:STDOUT: %.loc10_30.1: type = splice_block %C [concrete = constants.%C.5a7] { @@ -674,7 +685,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Implicit.import_ref.c81: %struct_type.a.b.5ca) [from "implicit.carbon"] { // CHECK:STDOUT: %S: %struct_type.a.b.5ca = bind_symbolic_name S, 0 [symbolic = %S (constants.%S)] -// CHECK:STDOUT: %S.patt: %struct_type.a.b.5ca = symbolic_binding_pattern S, 0 [symbolic = %S.patt (constants.%S.patt)] +// CHECK:STDOUT: %S.patt: %pattern_type.dce = symbolic_binding_pattern S, 0 [symbolic = %S.patt (constants.%S.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/struct/literal_member_access.carbon b/toolchain/check/testdata/struct/literal_member_access.carbon index 4a74289703dc..738b581c1a14 100644 --- a/toolchain/check/testdata/struct/literal_member_access.carbon +++ b/toolchain/check/testdata/struct/literal_member_access.carbon @@ -20,8 +20,10 @@ fn F() -> i32 { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.x.y.z: type = struct_type {.x: %i32, .y: %i32, .z: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.c6b: type = pattern_type %struct_type.x.y.z [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] @@ -45,8 +47,8 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: %struct_type.x.y.z = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.x.y.z = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.c6b = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.c6b = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -59,8 +61,8 @@ fn F() -> i32 { // CHECK:STDOUT: %return: ref %struct_type.x.y.z = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/struct/member_access.carbon b/toolchain/check/testdata/struct/member_access.carbon index 55f0534df545..0e16e585f0ec 100644 --- a/toolchain/check/testdata/struct/member_access.carbon +++ b/toolchain/check/testdata/struct/member_access.carbon @@ -21,6 +21,7 @@ var z: i32 = y; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.ddf: type = struct_type {.a: f64, .b: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.7fd: type = pattern_type %struct_type.a.b.ddf [concrete] // CHECK:STDOUT: %float: f64 = float_literal 0 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %struct_type.a.b.fbb: type = struct_type {.a: f64, .b: Core.IntLiteral} [concrete] @@ -33,6 +34,7 @@ var z: i32 = y; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_1.5b8, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] @@ -58,8 +60,8 @@ var z: i32 = y; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.b.ddf = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %struct_type.a.b.ddf = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.7fd = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type.7fd = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.b.ddf = var x // CHECK:STDOUT: %.loc11_25: type = splice_block %struct_type.a.b [concrete = constants.%struct_type.a.b.ddf] { @@ -73,8 +75,8 @@ var z: i32 = y; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.b.ddf = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %i32 = binding_pattern y -// CHECK:STDOUT: %.loc12_1: %i32 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.7ce = binding_pattern y +// CHECK:STDOUT: %.loc12_1: %pattern_type.7ce = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %i32 = var y // CHECK:STDOUT: %.loc12_8: type = splice_block %i32.loc12 [concrete = constants.%i32] { @@ -83,8 +85,8 @@ var z: i32 = y; // CHECK:STDOUT: } // CHECK:STDOUT: %y: ref %i32 = bind_name y, %y.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %z.patt: %i32 = binding_pattern z -// CHECK:STDOUT: %.loc13_1: %i32 = var_pattern %z.patt +// CHECK:STDOUT: %z.patt: %pattern_type.7ce = binding_pattern z +// CHECK:STDOUT: %.loc13_1: %pattern_type.7ce = var_pattern %z.patt // CHECK:STDOUT: } // CHECK:STDOUT: %z.var: ref %i32 = var z // CHECK:STDOUT: %.loc13_8: type = splice_block %i32.loc13 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/struct/nested_struct_in_place.carbon b/toolchain/check/testdata/struct/nested_struct_in_place.carbon index 002d55b775a3..d17dba50b750 100644 --- a/toolchain/check/testdata/struct/nested_struct_in_place.carbon +++ b/toolchain/check/testdata/struct/nested_struct_in_place.carbon @@ -21,11 +21,13 @@ fn G() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.189: type = tuple_type (%i32, %i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.b5a: type = pattern_type %tuple.type.189 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b.2f9: type = struct_type {.a: %tuple.type.189, .b: %tuple.type.189} [concrete] +// CHECK:STDOUT: %pattern_type.3c2: type = pattern_type %struct_type.a.b.2f9 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -44,8 +46,8 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %tuple.type.189 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.189 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.b5a = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.b5a = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -66,8 +68,8 @@ fn G() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %struct_type.a.b.2f9 = binding_pattern v -// CHECK:STDOUT: %.loc14_3.1: %struct_type.a.b.2f9 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.3c2 = binding_pattern v +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.3c2 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %struct_type.a.b.2f9 = var v // CHECK:STDOUT: %F.ref.loc14_61: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] diff --git a/toolchain/check/testdata/struct/no_prelude/empty.carbon b/toolchain/check/testdata/struct/no_prelude/empty.carbon index 0288359fce77..91176dae1098 100644 --- a/toolchain/check/testdata/struct/no_prelude/empty.carbon +++ b/toolchain/check/testdata/struct/no_prelude/empty.carbon @@ -15,6 +15,7 @@ var y: {} = x; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -24,8 +25,8 @@ var y: {} = x; // CHECK:STDOUT: .y = %y // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %empty_struct_type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_struct_type = var x // CHECK:STDOUT: %.loc11_9.1: type = splice_block %.loc11_9.3 [concrete = constants.%empty_struct_type] { @@ -34,8 +35,8 @@ var y: {} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %empty_struct_type = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y -// CHECK:STDOUT: %.loc12_1: %empty_struct_type = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type = binding_pattern y +// CHECK:STDOUT: %.loc12_1: %pattern_type = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_struct_type = var y // CHECK:STDOUT: %.loc12_9.1: type = splice_block %.loc12_9.3 [concrete = constants.%empty_struct_type] { diff --git a/toolchain/check/testdata/struct/no_prelude/fail_assign_nested.carbon b/toolchain/check/testdata/struct/no_prelude/fail_assign_nested.carbon index 7c61ed182411..0aaa82cfa95d 100644 --- a/toolchain/check/testdata/struct/no_prelude/fail_assign_nested.carbon +++ b/toolchain/check/testdata/struct/no_prelude/fail_assign_nested.carbon @@ -19,6 +19,7 @@ var x: {.a: {}} = {.b = {}}; // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %struct_type.a.225: type = struct_type {.a: %empty_struct_type} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.225 [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %empty_struct_type} [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -27,8 +28,8 @@ var x: {.a: {}} = {.b = {}}; // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.225 = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %struct_type.a.225 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.225 = var x // CHECK:STDOUT: %.loc15_15: type = splice_block %struct_type.a [concrete = constants.%struct_type.a.225] { diff --git a/toolchain/check/testdata/struct/no_prelude/fail_nested_incomplete.carbon b/toolchain/check/testdata/struct/no_prelude/fail_nested_incomplete.carbon index 734ce8093417..7b041f70a6e2 100644 --- a/toolchain/check/testdata/struct/no_prelude/fail_nested_incomplete.carbon +++ b/toolchain/check/testdata/struct/no_prelude/fail_nested_incomplete.carbon @@ -27,6 +27,7 @@ var p: Incomplete* = &s.a; // CHECK:STDOUT: %Incomplete: type = class_type @Incomplete [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %Incomplete} [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Incomplete [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -47,8 +48,8 @@ var p: Incomplete* = &s.a; // CHECK:STDOUT: } // CHECK:STDOUT: %s: = bind_name s, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %.loc22_1: %ptr = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: %pattern_type = binding_pattern p +// CHECK:STDOUT: %.loc22_1: %pattern_type = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr = var p // CHECK:STDOUT: %.loc22_18: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/struct/one_entry.carbon b/toolchain/check/testdata/struct/one_entry.carbon index dd185d2f1c75..563d057230b1 100644 --- a/toolchain/check/testdata/struct/one_entry.carbon +++ b/toolchain/check/testdata/struct/one_entry.carbon @@ -17,6 +17,7 @@ var y: {.a: i32} = x; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.ba9: type = struct_type {.a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.268: type = pattern_type %struct_type.a.ba9 [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %struct_type.a.a6c: type = struct_type {.a: Core.IntLiteral} [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -51,8 +52,8 @@ var y: {.a: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.ba9 = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %struct_type.a.ba9 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.268 = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type.268 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.ba9 = var x // CHECK:STDOUT: %.loc11_16: type = splice_block %struct_type.a.loc11 [concrete = constants.%struct_type.a.ba9] { @@ -62,8 +63,8 @@ var y: {.a: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.ba9 = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %struct_type.a.ba9 = binding_pattern y -// CHECK:STDOUT: %.loc12_1: %struct_type.a.ba9 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.268 = binding_pattern y +// CHECK:STDOUT: %.loc12_1: %pattern_type.268 = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.a.ba9 = var y // CHECK:STDOUT: %.loc12_16: type = splice_block %struct_type.a.loc12 [concrete = constants.%struct_type.a.ba9] { diff --git a/toolchain/check/testdata/struct/partially_const.carbon b/toolchain/check/testdata/struct/partially_const.carbon index b52fcab9b96d..07a52ea7698e 100644 --- a/toolchain/check/testdata/struct/partially_const.carbon +++ b/toolchain/check/testdata/struct/partially_const.carbon @@ -17,7 +17,9 @@ fn Make(n: i32) -> {.a: i32, .b: i32, .c: i32} { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %struct_type.a.b.c.0b6: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.8ae: type = pattern_type %struct_type.a.b.c.0b6 [concrete] // CHECK:STDOUT: %Make.type: type = fn_type @Make [concrete] // CHECK:STDOUT: %Make: %Make.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -52,10 +54,10 @@ fn Make(n: i32) -> {.a: i32, .b: i32, .c: i32} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { -// CHECK:STDOUT: %n.patt: %i32 = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %i32 = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %struct_type.a.b.c.0b6 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.a.b.c.0b6 = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.8ae = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.8ae = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/struct/reorder_fields.carbon b/toolchain/check/testdata/struct/reorder_fields.carbon index 94fc3a30f7ac..3cbcedc8bbe9 100644 --- a/toolchain/check/testdata/struct/reorder_fields.carbon +++ b/toolchain/check/testdata/struct/reorder_fields.carbon @@ -22,17 +22,21 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %MakeI32.type: type = fn_type @MakeI32 [concrete] // CHECK:STDOUT: %MakeI32: %MakeI32.type = struct_value () [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.3de: type = pattern_type f64 [concrete] // CHECK:STDOUT: %MakeF64.type: type = fn_type @MakeF64 [concrete] // CHECK:STDOUT: %MakeF64: %MakeF64.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: f64} [concrete] +// CHECK:STDOUT: %pattern_type.59f: type = pattern_type %struct_type.a.b [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %struct_type.b.a: type = struct_type {.b: f64, .a: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.a24: type = pattern_type %struct_type.b.a [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -53,8 +57,8 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %MakeI32.decl: %MakeI32.type = fn_decl @MakeI32 [concrete = constants.%MakeI32] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -62,8 +66,8 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %MakeF64.decl: %MakeF64.type = fn_decl @MakeF64 [concrete = constants.%MakeF64] { -// CHECK:STDOUT: %return.patt: f64 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: f64 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.3de = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.3de = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64] // CHECK:STDOUT: %float.make_type: init type = call constants.%Float(%int_64) [concrete = f64] @@ -73,8 +77,8 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: %return: ref f64 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %struct_type.a.b = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %struct_type.a.b = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.59f = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.59f = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc14: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc14: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -95,7 +99,7 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: fn @F() -> %return.param: %struct_type.a.b { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.b = binding_pattern x +// CHECK:STDOUT: %x.patt: %pattern_type.59f = binding_pattern x // CHECK:STDOUT: } // CHECK:STDOUT: %MakeF64.ref: %MakeF64.type = name_ref MakeF64, file.%MakeF64.decl [concrete = constants.%MakeF64] // CHECK:STDOUT: %MakeF64.call: init f64 = call %MakeF64.ref() @@ -119,7 +123,7 @@ fn F() -> {.a: i32, .b: f64} { // CHECK:STDOUT: %.loc15_62.6: %struct_type.a.b = converted %.loc15_62.1, %struct.loc15 // CHECK:STDOUT: %x: %struct_type.a.b = bind_name x, %.loc15_62.6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %struct_type.b.a = binding_pattern y +// CHECK:STDOUT: %y.patt: %pattern_type.a24 = binding_pattern y // CHECK:STDOUT: } // CHECK:STDOUT: %x.ref: %struct_type.a.b = name_ref x, %x // CHECK:STDOUT: %.loc16_27: type = splice_block %struct_type.b.a [concrete = constants.%struct_type.b.a] { diff --git a/toolchain/check/testdata/struct/tuple_as_element.carbon b/toolchain/check/testdata/struct/tuple_as_element.carbon index 7f7e3a8195b7..1744c4b87225 100644 --- a/toolchain/check/testdata/struct/tuple_as_element.carbon +++ b/toolchain/check/testdata/struct/tuple_as_element.carbon @@ -19,6 +19,7 @@ var y: {.a: i32, .b: (i32,)} = x; // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] // CHECK:STDOUT: %struct_type.a.b.3d5: type = struct_type {.a: %i32, .b: %tuple.type.a1c} [concrete] +// CHECK:STDOUT: %pattern_type.b4d: type = pattern_type %struct_type.a.b.3d5 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] @@ -59,8 +60,8 @@ var y: {.a: i32, .b: (i32,)} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.b.3d5 = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %struct_type.a.b.3d5 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.b4d = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type.b4d = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.b.3d5 = var x // CHECK:STDOUT: %.loc11_28: type = splice_block %struct_type.a.b.loc11 [concrete = constants.%struct_type.a.b.3d5] { @@ -74,8 +75,8 @@ var y: {.a: i32, .b: (i32,)} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.b.3d5 = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %struct_type.a.b.3d5 = binding_pattern y -// CHECK:STDOUT: %.loc12_1: %struct_type.a.b.3d5 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.b4d = binding_pattern y +// CHECK:STDOUT: %.loc12_1: %pattern_type.b4d = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.a.b.3d5 = var y // CHECK:STDOUT: %.loc12_28: type = splice_block %struct_type.a.b.loc12 [concrete = constants.%struct_type.a.b.3d5] { diff --git a/toolchain/check/testdata/struct/two_entries.carbon b/toolchain/check/testdata/struct/two_entries.carbon index 2629fe442c49..f5a652478ae8 100644 --- a/toolchain/check/testdata/struct/two_entries.carbon +++ b/toolchain/check/testdata/struct/two_entries.carbon @@ -20,6 +20,7 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %struct_type.a.b.501: type = struct_type {.a: %i32, .b: %i32} [concrete] +// CHECK:STDOUT: %pattern_type.851: type = pattern_type %struct_type.a.b.501 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %struct_type.a.b.cfd: type = struct_type {.a: Core.IntLiteral, .b: Core.IntLiteral} [concrete] @@ -60,7 +61,7 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %struct_type.a.b.501 = binding_pattern v +// CHECK:STDOUT: %v.patt: %pattern_type.851 = binding_pattern v // CHECK:STDOUT: } // CHECK:STDOUT: %.loc11_25: type = splice_block %struct_type.a.b.loc11 [concrete = constants.%struct_type.a.b.501] { // CHECK:STDOUT: %int_32.loc11_13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -87,7 +88,7 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: %.loc11_44.5: %struct_type.a.b.501 = converted @__global_init.%.loc11, %struct [concrete = constants.%struct] // CHECK:STDOUT: %v: %struct_type.a.b.501 = bind_name v, %.loc11_44.5 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %struct_type.a.b.501 = binding_pattern w +// CHECK:STDOUT: %w.patt: %pattern_type.851 = binding_pattern w // CHECK:STDOUT: } // CHECK:STDOUT: %.loc12: type = splice_block %struct_type.a.b.loc12 [concrete = constants.%struct_type.a.b.501] { // CHECK:STDOUT: %int_32.loc12_13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -98,8 +99,8 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %w: %struct_type.a.b.501 = bind_name w, @__global_init.%v.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.a.b.501 = binding_pattern x -// CHECK:STDOUT: %.loc14_1: %struct_type.a.b.501 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.851 = binding_pattern x +// CHECK:STDOUT: %.loc14_1: %pattern_type.851 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.a.b.501 = var x // CHECK:STDOUT: %.loc14_25: type = splice_block %struct_type.a.b.loc14 [concrete = constants.%struct_type.a.b.501] { @@ -111,8 +112,8 @@ var y: {.a: i32, .b: i32} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.a.b.501 = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %struct_type.a.b.501 = binding_pattern y -// CHECK:STDOUT: %.loc15_1: %struct_type.a.b.501 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.851 = binding_pattern y +// CHECK:STDOUT: %.loc15_1: %pattern_type.851 = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.a.b.501 = var y // CHECK:STDOUT: %.loc15_25: type = splice_block %struct_type.a.b.loc15 [concrete = constants.%struct_type.a.b.501] { diff --git a/toolchain/check/testdata/tuple/access/element_access.carbon b/toolchain/check/testdata/tuple/access/element_access.carbon index 02a65f137b25..573c0080a26b 100644 --- a/toolchain/check/testdata/tuple/access/element_access.carbon +++ b/toolchain/check/testdata/tuple/access/element_access.carbon @@ -19,6 +19,7 @@ var c: i32 = b.0; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -30,6 +31,7 @@ var c: i32 = b.0; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -55,8 +57,8 @@ var c: i32 = b.0; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.a1c = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.a1c = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.b74 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.b74 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.a1c = var a // CHECK:STDOUT: %.loc11_13.1: type = splice_block %.loc11_13.3 [concrete = constants.%tuple.type.a1c] { @@ -67,8 +69,8 @@ var c: i32 = b.0; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.a1c = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %tuple.type.a1c = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %tuple.type.a1c = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.b74 = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.b74 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.a1c = var b // CHECK:STDOUT: %.loc12_13.1: type = splice_block %.loc12_13.3 [concrete = constants.%tuple.type.a1c] { @@ -79,8 +81,8 @@ var c: i32 = b.0; // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %tuple.type.a1c = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c -// CHECK:STDOUT: %.loc13_1: %i32 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c +// CHECK:STDOUT: %.loc13_1: %pattern_type.7ce = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var c // CHECK:STDOUT: %.loc13_8: type = splice_block %i32.loc13 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/fail_access_error.carbon b/toolchain/check/testdata/tuple/access/fail_access_error.carbon index 9aa3f82112fa..fe79e493a643 100644 --- a/toolchain/check/testdata/tuple/access/fail_access_error.carbon +++ b/toolchain/check/testdata/tuple/access/fail_access_error.carbon @@ -22,6 +22,7 @@ var b: i32 = a.(oops); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %int_6.462: Core.IntLiteral = int_value 6 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -34,6 +35,7 @@ var b: i32 = a.(oops); // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.221: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.dae: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -61,8 +63,8 @@ var b: i32 = a.(oops); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.d07 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.d07 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.511 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.511 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.d07 = var a // CHECK:STDOUT: %.loc11_17.1: type = splice_block %.loc11_17.3 [concrete = constants.%tuple.type.d07] { @@ -75,8 +77,8 @@ var b: i32 = a.(oops); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.d07 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/fail_large_index.carbon b/toolchain/check/testdata/tuple/access/fail_large_index.carbon index e78f821d44e1..ca9d4f23ca05 100644 --- a/toolchain/check/testdata/tuple/access/fail_large_index.carbon +++ b/toolchain/check/testdata/tuple/access/fail_large_index.carbon @@ -28,6 +28,7 @@ var d: i32 = b.(0x7FFF_FFFF); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -39,6 +40,7 @@ var d: i32 = b.(0x7FFF_FFFF); // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -66,8 +68,8 @@ var d: i32 = b.(0x7FFF_FFFF); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.a1c = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.a1c = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.b74 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.b74 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.a1c = var a // CHECK:STDOUT: %.loc11_13.1: type = splice_block %.loc11_13.3 [concrete = constants.%tuple.type.a1c] { @@ -78,8 +80,8 @@ var d: i32 = b.(0x7FFF_FFFF); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.a1c = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %tuple.type.a1c = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %tuple.type.a1c = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.b74 = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.b74 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.a1c = var b // CHECK:STDOUT: %.loc12_13.1: type = splice_block %.loc12_13.3 [concrete = constants.%tuple.type.a1c] { @@ -90,8 +92,8 @@ var d: i32 = b.(0x7FFF_FFFF); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %tuple.type.a1c = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c -// CHECK:STDOUT: %.loc17_1: %i32 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c +// CHECK:STDOUT: %.loc17_1: %pattern_type.7ce = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var c // CHECK:STDOUT: %.loc17_8: type = splice_block %i32.loc17 [concrete = constants.%i32] { @@ -100,8 +102,8 @@ var d: i32 = b.(0x7FFF_FFFF); // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %i32 = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %i32 = binding_pattern d -// CHECK:STDOUT: %.loc22_1: %i32 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.7ce = binding_pattern d +// CHECK:STDOUT: %.loc22_1: %pattern_type.7ce = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var d // CHECK:STDOUT: %.loc22_8: type = splice_block %i32.loc22 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/fail_negative_indexing.carbon b/toolchain/check/testdata/tuple/access/fail_negative_indexing.carbon index 0397ee91aa98..d936554dcc4a 100644 --- a/toolchain/check/testdata/tuple/access/fail_negative_indexing.carbon +++ b/toolchain/check/testdata/tuple/access/fail_negative_indexing.carbon @@ -22,6 +22,7 @@ var b: i32 = a.(-10); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %int_6.462: Core.IntLiteral = int_value 6 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -35,6 +36,7 @@ var b: i32 = a.(-10); // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.221: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.dae: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -72,8 +74,8 @@ var b: i32 = a.(-10); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.d07 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.d07 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.511 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.511 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.d07 = var a // CHECK:STDOUT: %.loc11_17.1: type = splice_block %.loc11_17.3 [concrete = constants.%tuple.type.d07] { @@ -86,8 +88,8 @@ var b: i32 = a.(-10); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.d07 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/fail_non_deterministic_type.carbon b/toolchain/check/testdata/tuple/access/fail_non_deterministic_type.carbon index 9b0db45166c7..eac037236694 100644 --- a/toolchain/check/testdata/tuple/access/fail_non_deterministic_type.carbon +++ b/toolchain/check/testdata/tuple/access/fail_non_deterministic_type.carbon @@ -23,6 +23,7 @@ var c: i32 = a.(b); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -35,6 +36,7 @@ var c: i32 = a.(b); // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.ef9: = bound_method %int_2.ecc, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.b92: = bound_method %int_2.ecc, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] @@ -66,8 +68,8 @@ var c: i32 = a.(b); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.d07 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.d07 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.511 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.511 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.d07 = var a // CHECK:STDOUT: %.loc11_17.1: type = splice_block %.loc11_17.3 [concrete = constants.%tuple.type.d07] { @@ -80,8 +82,8 @@ var c: i32 = a.(b); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.d07 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc12_8: type = splice_block %i32.loc12 [concrete = constants.%i32] { @@ -90,8 +92,8 @@ var c: i32 = a.(b); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %i32 = binding_pattern c -// CHECK:STDOUT: %.loc17_1: %i32 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.7ce = binding_pattern c +// CHECK:STDOUT: %.loc17_1: %pattern_type.7ce = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %i32 = var c // CHECK:STDOUT: %.loc17_8: type = splice_block %i32.loc17 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/fail_non_int_indexing.carbon b/toolchain/check/testdata/tuple/access/fail_non_int_indexing.carbon index fe9498f7de37..d9bf5970c755 100644 --- a/toolchain/check/testdata/tuple/access/fail_non_int_indexing.carbon +++ b/toolchain/check/testdata/tuple/access/fail_non_int_indexing.carbon @@ -25,6 +25,7 @@ var b: i32 = a.(2.6); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %int_6.462: Core.IntLiteral = int_value 6 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -37,6 +38,7 @@ var b: i32 = a.(2.6); // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.221: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.dae: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -64,8 +66,8 @@ var b: i32 = a.(2.6); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.d07 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.d07 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.511 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.511 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.d07 = var a // CHECK:STDOUT: %.loc11_17.1: type = splice_block %.loc11_17.3 [concrete = constants.%tuple.type.d07] { @@ -78,8 +80,8 @@ var b: i32 = a.(2.6); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.d07 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc19_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc19_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc19_8: type = splice_block %i32.loc19 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/fail_non_tuple_access.carbon b/toolchain/check/testdata/tuple/access/fail_non_tuple_access.carbon index 1889786206a4..4dff356b5daf 100644 --- a/toolchain/check/testdata/tuple/access/fail_non_tuple_access.carbon +++ b/toolchain/check/testdata/tuple/access/fail_non_tuple_access.carbon @@ -34,6 +34,7 @@ fn Main() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %array_type: type = array_type %int_2, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.ae7: type = pattern_type %array_type [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -45,6 +46,7 @@ fn Main() { // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_5.64b, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_5.64b, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_5.0f6: %i32 = int_value 5 [concrete] @@ -75,8 +77,8 @@ fn Main() { // CHECK:STDOUT: %int_0.loc16: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] // CHECK:STDOUT: %int_1.loc16: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %non_tuple.patt: %array_type = binding_pattern non_tuple -// CHECK:STDOUT: %.loc18_3.1: %array_type = var_pattern %non_tuple.patt +// CHECK:STDOUT: %non_tuple.patt: %pattern_type.ae7 = binding_pattern non_tuple +// CHECK:STDOUT: %.loc18_3.1: %pattern_type.ae7 = var_pattern %non_tuple.patt // CHECK:STDOUT: } // CHECK:STDOUT: %non_tuple.var: ref %array_type = var non_tuple // CHECK:STDOUT: %int_5.loc18_35: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] @@ -111,8 +113,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %non_tuple: ref %array_type = bind_name non_tuple, %non_tuple.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %first.patt: %i32 = binding_pattern first -// CHECK:STDOUT: %.loc23_3: %i32 = var_pattern %first.patt +// CHECK:STDOUT: %first.patt: %pattern_type.7ce = binding_pattern first +// CHECK:STDOUT: %.loc23_3: %pattern_type.7ce = var_pattern %first.patt // CHECK:STDOUT: } // CHECK:STDOUT: %first.var: ref %i32 = var first // CHECK:STDOUT: %non_tuple.ref: ref %array_type = name_ref non_tuple, %non_tuple diff --git a/toolchain/check/testdata/tuple/access/fail_out_of_bound_access.carbon b/toolchain/check/testdata/tuple/access/fail_out_of_bound_access.carbon index 8c0a77ba0ec0..a5fc95af9bcb 100644 --- a/toolchain/check/testdata/tuple/access/fail_out_of_bound_access.carbon +++ b/toolchain/check/testdata/tuple/access/fail_out_of_bound_access.carbon @@ -22,6 +22,7 @@ var b: i32 = a.2; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %int_6.462: Core.IntLiteral = int_value 6 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -34,6 +35,7 @@ var b: i32 = a.2; // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.221: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.dae: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -61,8 +63,8 @@ var b: i32 = a.2; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.d07 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.d07 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.511 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.511 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.d07 = var a // CHECK:STDOUT: %.loc11_17.1: type = splice_block %.loc11_17.3 [concrete = constants.%tuple.type.d07] { @@ -75,8 +77,8 @@ var b: i32 = a.2; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.d07 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/fail_out_of_bound_not_literal.carbon b/toolchain/check/testdata/tuple/access/fail_out_of_bound_not_literal.carbon index 0c14e4d9f9c6..bf147bc624cc 100644 --- a/toolchain/check/testdata/tuple/access/fail_out_of_bound_not_literal.carbon +++ b/toolchain/check/testdata/tuple/access/fail_out_of_bound_not_literal.carbon @@ -22,6 +22,7 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %int_34.3f9: Core.IntLiteral = int_value 34 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -34,6 +35,7 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound.221: = bound_method %int_12.6a3, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.dae: = bound_method %int_12.6a3, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_12.1e1: %i32 = int_value 12 [concrete] @@ -63,8 +65,8 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.d07 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.d07 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.511 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.511 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.d07 = var a // CHECK:STDOUT: %.loc11_17.1: type = splice_block %.loc11_17.3 [concrete = constants.%tuple.type.d07] { @@ -77,8 +79,8 @@ var b: i32 = a.({.index = 2}.index); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.d07 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc16_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc16_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc16_8: type = splice_block %i32.loc16 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/index_not_literal.carbon b/toolchain/check/testdata/tuple/access/index_not_literal.carbon index 5302d42ccb57..35e3743e1783 100644 --- a/toolchain/check/testdata/tuple/access/index_not_literal.carbon +++ b/toolchain/check/testdata/tuple/access/index_not_literal.carbon @@ -22,6 +22,7 @@ var d: i32 = a.({.index = 1 as i32}.index); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.261: type = tuple_type (bool, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.f98: type = pattern_type %tuple.type.261 [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %int_34.3f9: Core.IntLiteral = int_value 34 [concrete] // CHECK:STDOUT: %tuple.type.3c2: type = tuple_type (bool, Core.IntLiteral) [concrete] @@ -32,12 +33,14 @@ var d: i32 = a.({.index = 1 as i32}.index); // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1d9 = impl_witness_table (imports.%Core.import_ref.85c), @impl.971 [concrete] // CHECK:STDOUT: %Convert.type.71e: type = fn_type @Convert.1, @ImplicitAs(Core.IntLiteral) [concrete] // CHECK:STDOUT: %As.impl_witness_table.eb4 = impl_witness_table (imports.%Core.import_ref.78a), @impl.686 [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.c75: = impl_witness %ImplicitAs.impl_witness_table.a2f, @impl.4f9(%int_32) [concrete] // CHECK:STDOUT: %Convert.type.035: type = fn_type @Convert.2, @impl.4f9(%int_32) [concrete] // CHECK:STDOUT: %Convert.956: %Convert.type.035 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.facet.921: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet.921 [concrete] // CHECK:STDOUT: %Convert.bound.82c: = bound_method %int_34.3f9, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn.b6f: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method.34d: = bound_method %int_34.3f9, %Convert.specific_fn.b6f [concrete] // CHECK:STDOUT: %int_34.980: %i32 = int_value 34 [concrete] @@ -95,8 +98,8 @@ var d: i32 = a.({.index = 1 as i32}.index); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.261 = binding_pattern a -// CHECK:STDOUT: %.loc11_1: %tuple.type.261 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.f98 = binding_pattern a +// CHECK:STDOUT: %.loc11_1: %pattern_type.f98 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.261 = var a // CHECK:STDOUT: %.loc11_18.1: type = splice_block %.loc11_18.5 [concrete = constants.%tuple.type.261] { @@ -110,8 +113,8 @@ var d: i32 = a.({.index = 1 as i32}.index); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.261 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %i32 = binding_pattern b -// CHECK:STDOUT: %.loc12_1: %i32 = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b +// CHECK:STDOUT: %.loc12_1: %pattern_type.7ce = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %i32 = var b // CHECK:STDOUT: %.loc12_8: type = splice_block %i32.loc12 [concrete = constants.%i32] { @@ -120,8 +123,8 @@ var d: i32 = a.({.index = 1 as i32}.index); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: bool = binding_pattern c -// CHECK:STDOUT: %.loc13_1: bool = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.831 = binding_pattern c +// CHECK:STDOUT: %.loc13_1: %pattern_type.831 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref bool = var c // CHECK:STDOUT: %.loc13_8.1: type = splice_block %.loc13_8.3 [concrete = bool] { @@ -131,8 +134,8 @@ var d: i32 = a.({.index = 1 as i32}.index); // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref bool = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %i32 = binding_pattern d -// CHECK:STDOUT: %.loc14_1: %i32 = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type.7ce = binding_pattern d +// CHECK:STDOUT: %.loc14_1: %pattern_type.7ce = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %i32 = var d // CHECK:STDOUT: %.loc14_8: type = splice_block %i32.loc14 [concrete = constants.%i32] { diff --git a/toolchain/check/testdata/tuple/access/return_value_access.carbon b/toolchain/check/testdata/tuple/access/return_value_access.carbon index 4094afb3c382..1aca2e86e57a 100644 --- a/toolchain/check/testdata/tuple/access/return_value_access.carbon +++ b/toolchain/check/testdata/tuple/access/return_value_access.carbon @@ -21,6 +21,7 @@ fn Run() -> i32 { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] @@ -34,6 +35,7 @@ fn Run() -> i32 { // CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] // CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] // CHECK:STDOUT: %Convert.bound: = bound_method %int_0.5c6, %Convert.956 [concrete] +// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete] @@ -59,8 +61,8 @@ fn Run() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %tuple.type.a1c = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.a1c = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.b74 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.b74 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -70,8 +72,8 @@ fn Run() -> i32 { // CHECK:STDOUT: %return: ref %tuple.type.a1c = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Run.decl: %Run.type = fn_decl @Run [concrete = constants.%Run] { -// CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] diff --git a/toolchain/check/testdata/tuple/fail_assign_nested.carbon b/toolchain/check/testdata/tuple/fail_assign_nested.carbon index 224833939838..ca08c280ac7d 100644 --- a/toolchain/check/testdata/tuple/fail_assign_nested.carbon +++ b/toolchain/check/testdata/tuple/fail_assign_nested.carbon @@ -23,6 +23,7 @@ var x: ((i32, i32), (i32, i32)) = ((1, 2, 3), (4, 5, 6)); // CHECK:STDOUT: %tuple.type.1c9: type = tuple_type (%tuple.type.24b, %tuple.type.24b) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.ff1: type = tuple_type (%tuple.type.d07, %tuple.type.d07) [concrete] +// CHECK:STDOUT: %pattern_type.72b: type = pattern_type %tuple.type.ff1 [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] @@ -48,8 +49,8 @@ var x: ((i32, i32), (i32, i32)) = ((1, 2, 3), (4, 5, 6)); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type.ff1 = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %tuple.type.ff1 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.72b = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type.72b = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.ff1 = var x // CHECK:STDOUT: %.loc15_31.1: type = splice_block %.loc15_31.5 [concrete = constants.%tuple.type.ff1] { diff --git a/toolchain/check/testdata/tuple/fail_element_type_mismatch.carbon b/toolchain/check/testdata/tuple/fail_element_type_mismatch.carbon index 0034ddcee656..66a9629f9804 100644 --- a/toolchain/check/testdata/tuple/fail_element_type_mismatch.carbon +++ b/toolchain/check/testdata/tuple/fail_element_type_mismatch.carbon @@ -24,6 +24,7 @@ var x: (i32, i32) = (2, 65.89); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %float: f64 = float_literal 65.890000000000001 [concrete] // CHECK:STDOUT: %tuple.type.2c1: type = tuple_type (Core.IntLiteral, f64) [concrete] @@ -57,8 +58,8 @@ var x: (i32, i32) = (2, 65.89); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type.d07 = binding_pattern x -// CHECK:STDOUT: %.loc18_1: %tuple.type.d07 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.511 = binding_pattern x +// CHECK:STDOUT: %.loc18_1: %pattern_type.511 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.d07 = var x // CHECK:STDOUT: %.loc18_17.1: type = splice_block %.loc18_17.3 [concrete = constants.%tuple.type.d07] { diff --git a/toolchain/check/testdata/tuple/fail_nested_incomplete.carbon b/toolchain/check/testdata/tuple/fail_nested_incomplete.carbon index 5458676a9ff4..be1a3be9fb4b 100644 --- a/toolchain/check/testdata/tuple/fail_nested_incomplete.carbon +++ b/toolchain/check/testdata/tuple/fail_nested_incomplete.carbon @@ -30,6 +30,7 @@ var p: Incomplete* = &t[1]; // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.8a4: type = tuple_type (%i32, %Incomplete) [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Incomplete [concrete] +// CHECK:STDOUT: %pattern_type.275: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -64,8 +65,8 @@ var p: Incomplete* = &t[1]; // CHECK:STDOUT: } // CHECK:STDOUT: %t: = bind_name t, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p -// CHECK:STDOUT: %.loc22_1: %ptr = var_pattern %p.patt +// CHECK:STDOUT: %p.patt: %pattern_type.275 = binding_pattern p +// CHECK:STDOUT: %.loc22_1: %pattern_type.275 = var_pattern %p.patt // CHECK:STDOUT: } // CHECK:STDOUT: %p.var: ref %ptr = var p // CHECK:STDOUT: %.loc22_18: type = splice_block %ptr [concrete = constants.%ptr] { diff --git a/toolchain/check/testdata/tuple/fail_too_few_element.carbon b/toolchain/check/testdata/tuple/fail_too_few_element.carbon index b798a1c0426b..9a33a0767ce2 100644 --- a/toolchain/check/testdata/tuple/fail_too_few_element.carbon +++ b/toolchain/check/testdata/tuple/fail_too_few_element.carbon @@ -21,6 +21,7 @@ var x: (i32, i32) = (2, ); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: } @@ -40,8 +41,8 @@ var x: (i32, i32) = (2, ); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type.d07 = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %tuple.type.d07 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.511 = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type.511 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.d07 = var x // CHECK:STDOUT: %.loc15_17.1: type = splice_block %.loc15_17.3 [concrete = constants.%tuple.type.d07] { diff --git a/toolchain/check/testdata/tuple/fail_type_assign.carbon b/toolchain/check/testdata/tuple/fail_type_assign.carbon index 8b18a479957d..ec6f3ca934d3 100644 --- a/toolchain/check/testdata/tuple/fail_type_assign.carbon +++ b/toolchain/check/testdata/tuple/fail_type_assign.carbon @@ -24,6 +24,7 @@ var x: (i32, ) = (i32, ); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -42,8 +43,8 @@ var x: (i32, ) = (i32, ); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type.a1c = binding_pattern x -// CHECK:STDOUT: %.loc18_1: %tuple.type.a1c = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.b74 = binding_pattern x +// CHECK:STDOUT: %.loc18_1: %pattern_type.b74 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.a1c = var x // CHECK:STDOUT: %.loc18_14.1: type = splice_block %.loc18_14.3 [concrete = constants.%tuple.type.a1c] { diff --git a/toolchain/check/testdata/tuple/import.carbon b/toolchain/check/testdata/tuple/import.carbon index cc8c634d49ec..41d509616cb6 100644 --- a/toolchain/check/testdata/tuple/import.carbon +++ b/toolchain/check/testdata/tuple/import.carbon @@ -61,6 +61,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %int_0.5c6: Core.IntLiteral = int_value 0 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -82,6 +83,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %tuple.type.fe6: type = tuple_type (%tuple.type.a1c, %i32) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.fc1: type = tuple_type (%tuple.type.fe6, %tuple.type.d07) [concrete] +// CHECK:STDOUT: %pattern_type.811: type = pattern_type %tuple.type.fc1 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %tuple.type.186: type = tuple_type (%tuple.type.985, Core.IntLiteral) [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] @@ -101,7 +103,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %tuple.11a: %tuple.type.d07 = tuple_value (%int_2.ef8, %int_3.822) [concrete] // CHECK:STDOUT: %tuple.ba9: %tuple.type.fc1 = tuple_value (%tuple.236, %tuple.11a) [concrete] // CHECK:STDOUT: %X: %tuple.type.d07 = bind_symbolic_name X, 0 [symbolic] -// CHECK:STDOUT: %X.patt: %tuple.type.d07 = symbolic_binding_pattern X, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] +// CHECK:STDOUT: %X.patt: %pattern_type.511 = symbolic_binding_pattern X, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %C.54f: type = class_type @C, @C(%X) [symbolic] @@ -109,6 +112,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.21c: %tuple.type.d07 = tuple_value (%int_1.5d2, %int_2.ef8) [concrete] // CHECK:STDOUT: %C.ee0: type = class_type @C, @C(%tuple.21c) [concrete] +// CHECK:STDOUT: %pattern_type.7fe: type = pattern_type %C.ee0 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -132,8 +136,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: %tuple.type.a1c = binding_pattern a_ref -// CHECK:STDOUT: %.loc4_1: %tuple.type.a1c = var_pattern %a_ref.patt +// CHECK:STDOUT: %a_ref.patt: %pattern_type.b74 = binding_pattern a_ref +// CHECK:STDOUT: %.loc4_1: %pattern_type.b74 = var_pattern %a_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref %tuple.type.a1c = var a_ref // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.3 [concrete = constants.%tuple.type.a1c] { @@ -144,8 +148,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref: ref %tuple.type.a1c = bind_name a_ref, %a_ref.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b_ref.patt: %tuple.type.fc1 = binding_pattern b_ref -// CHECK:STDOUT: %.loc5_1: %tuple.type.fc1 = var_pattern %b_ref.patt +// CHECK:STDOUT: %b_ref.patt: %pattern_type.811 = binding_pattern b_ref +// CHECK:STDOUT: %.loc5_1: %pattern_type.811 = var_pattern %b_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b_ref.var: ref %tuple.type.fc1 = var b_ref // CHECK:STDOUT: %.loc5_38.1: type = splice_block %.loc5_38.6 [concrete = constants.%tuple.type.fc1] { @@ -168,7 +172,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %b_ref: ref %tuple.type.fc1 = bind_name b_ref, %b_ref.var // CHECK:STDOUT: %C.decl: %C.type = class_decl @C [concrete = constants.%C.generic] { -// CHECK:STDOUT: %X.patt.loc7_9.1: %tuple.type.d07 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc7_9.2 (constants.%X.patt)] +// CHECK:STDOUT: %X.patt.loc7_9.1: %pattern_type.511 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc7_9.2 (constants.%X.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc7_22.1: type = splice_block %.loc7_22.3 [concrete = constants.%tuple.type.d07] { // CHECK:STDOUT: %int_32.loc7_14: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -181,8 +185,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %X.loc7_9.1: %tuple.type.d07 = bind_symbolic_name X, 0 [symbolic = %X.loc7_9.2 (constants.%X)] // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %C.ee0 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C.ee0 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.7fe = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.7fe = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] @@ -212,7 +216,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(%X.loc7_9.1: %tuple.type.d07) { // CHECK:STDOUT: %X.loc7_9.2: %tuple.type.d07 = bind_symbolic_name X, 0 [symbolic = %X.loc7_9.2 (constants.%X)] -// CHECK:STDOUT: %X.patt.loc7_9.2: %tuple.type.d07 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc7_9.2 (constants.%X.patt)] +// CHECK:STDOUT: %X.patt.loc7_9.2: %pattern_type.511 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc7_9.2 (constants.%X.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -313,18 +317,21 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.dd4: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.2e8: type = pattern_type %tuple.type.dd4 [concrete] // CHECK:STDOUT: %tuple.type.8c7: type = tuple_type (%tuple.type.85c, type) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.58c: type = tuple_type (%tuple.type.8c7, %tuple.type.24b) [concrete] // CHECK:STDOUT: %tuple.type.154: type = tuple_type (%tuple.type.dd4, %i32) [concrete] // CHECK:STDOUT: %tuple.type.c2c: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.cfa: type = tuple_type (%tuple.type.154, %tuple.type.c2c) [concrete] +// CHECK:STDOUT: %pattern_type.ab9: type = pattern_type %tuple.type.cfa [concrete] // CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %X: %tuple.type.c2c = bind_symbolic_name X, 0 [symbolic] -// CHECK:STDOUT: %X.patt: %tuple.type.c2c = symbolic_binding_pattern X, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.073: type = pattern_type %tuple.type.c2c [concrete] +// CHECK:STDOUT: %X.patt: %pattern_type.073 = symbolic_binding_pattern X, 0 [symbolic] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -344,6 +351,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %int_2.d0d: %i32 = int_value 2 [concrete] // CHECK:STDOUT: %tuple: %tuple.type.c2c = tuple_value (%int_1.47b, %int_2.d0d) [concrete] // CHECK:STDOUT: %C.cf0: type = class_type @C, @C(%tuple) [concrete] +// CHECK:STDOUT: %pattern_type.7e2: type = pattern_type %C.cf0 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -361,7 +369,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %Implicit.import_ref.48d: %tuple.type.c2c = import_ref Implicit//default, loc7_9, loaded [symbolic = @C.%X (constants.%X)] // CHECK:STDOUT: %Implicit.import_ref.8f2: = import_ref Implicit//default, loc7_26, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Implicit.import_ref.964 = import_ref Implicit//default, inst1431 [no loc], unloaded +// CHECK:STDOUT: %Implicit.import_ref.964 = import_ref Implicit//default, inst1495 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -379,8 +387,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %tuple.type.dd4 = binding_pattern a -// CHECK:STDOUT: %.loc4_1: %tuple.type.dd4 = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type.2e8 = binding_pattern a +// CHECK:STDOUT: %.loc4_1: %pattern_type.2e8 = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %tuple.type.dd4 = var a // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.3 [concrete = constants.%tuple.type.dd4] { @@ -391,8 +399,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %tuple.type.dd4 = bind_name a, %a.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %tuple.type.cfa = binding_pattern b -// CHECK:STDOUT: %.loc5_1: %tuple.type.cfa = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type.ab9 = binding_pattern b +// CHECK:STDOUT: %.loc5_1: %pattern_type.ab9 = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %tuple.type.cfa = var b // CHECK:STDOUT: %.loc5_34.1: type = splice_block %.loc5_34.6 [concrete = constants.%tuple.type.cfa] { @@ -415,8 +423,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %tuple.type.cfa = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %C.cf0 = binding_pattern c -// CHECK:STDOUT: %.loc6_1: %C.cf0 = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type.7e2 = binding_pattern c +// CHECK:STDOUT: %.loc6_1: %pattern_type.7e2 = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %C.cf0 = var c // CHECK:STDOUT: %.loc6_16.1: type = splice_block %C [concrete = constants.%C.cf0] { @@ -447,7 +455,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Implicit.import_ref.48d: %tuple.type.c2c) [from "implicit.carbon"] { // CHECK:STDOUT: %X: %tuple.type.c2c = bind_symbolic_name X, 0 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %X.patt: %tuple.type.c2c = symbolic_binding_pattern X, 0 [symbolic = %X.patt (constants.%X.patt)] +// CHECK:STDOUT: %X.patt: %pattern_type.073 = symbolic_binding_pattern X, 0 [symbolic = %X.patt (constants.%X.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -530,7 +538,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type.c2c: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %X: %tuple.type.c2c = bind_symbolic_name X, 0 [symbolic] -// CHECK:STDOUT: %X.patt: %tuple.type.c2c = symbolic_binding_pattern X, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.073: type = pattern_type %tuple.type.c2c [concrete] +// CHECK:STDOUT: %X.patt: %pattern_type.073 = symbolic_binding_pattern X, 0 [symbolic] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete] @@ -554,7 +563,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %Implicit.import_ref.48d: %tuple.type.c2c = import_ref Implicit//default, loc7_9, loaded [symbolic = @C.%X (constants.%X)] // CHECK:STDOUT: %Implicit.import_ref.8f2: = import_ref Implicit//default, loc7_26, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Implicit.import_ref.964 = import_ref Implicit//default, inst1431 [no loc], unloaded +// CHECK:STDOUT: %Implicit.import_ref.964 = import_ref Implicit//default, inst1495 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -586,7 +595,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Implicit.import_ref.48d: %tuple.type.c2c) [from "implicit.carbon"] { // CHECK:STDOUT: %X: %tuple.type.c2c = bind_symbolic_name X, 0 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %X.patt: %tuple.type.c2c = symbolic_binding_pattern X, 0 [symbolic = %X.patt (constants.%X.patt)] +// CHECK:STDOUT: %X.patt: %pattern_type.073 = symbolic_binding_pattern X, 0 [symbolic = %X.patt (constants.%X.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -633,7 +642,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type.c2c: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %X: %tuple.type.c2c = bind_symbolic_name X, 0 [symbolic] -// CHECK:STDOUT: %X.patt: %tuple.type.c2c = symbolic_binding_pattern X, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.073: type = pattern_type %tuple.type.c2c [concrete] +// CHECK:STDOUT: %X.patt: %pattern_type.073 = symbolic_binding_pattern X, 0 [symbolic] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -653,6 +663,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %int_4.ea3: %i32 = int_value 4 [concrete] // CHECK:STDOUT: %tuple.5de: %tuple.type.c2c = tuple_value (%int_3.d47, %int_4.ea3) [concrete] // CHECK:STDOUT: %C.ed5: type = class_type @C, @C(%tuple.5de) [concrete] +// CHECK:STDOUT: %pattern_type.b05: type = pattern_type %C.ed5 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %int_2: %i32 = int_value 2 [concrete] @@ -673,7 +684,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: %Implicit.import_ref.48d: %tuple.type.c2c = import_ref Implicit//default, loc7_9, loaded [symbolic = @C.%X (constants.%X)] // CHECK:STDOUT: %Implicit.import_ref.8f2: = import_ref Implicit//default, loc7_26, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Implicit.import_ref.964 = import_ref Implicit//default, inst1431 [no loc], unloaded +// CHECK:STDOUT: %Implicit.import_ref.964 = import_ref Implicit//default, inst1495 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -689,8 +700,8 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c_bad.patt: %C.ed5 = binding_pattern c_bad -// CHECK:STDOUT: %.loc11_1: %C.ed5 = var_pattern %c_bad.patt +// CHECK:STDOUT: %c_bad.patt: %pattern_type.b05 = binding_pattern c_bad +// CHECK:STDOUT: %.loc11_1: %pattern_type.b05 = var_pattern %c_bad.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c_bad.var: ref %C.ed5 = var c_bad // CHECK:STDOUT: %.loc11_20.1: type = splice_block %C [concrete = constants.%C.ed5] { @@ -721,7 +732,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(imports.%Implicit.import_ref.48d: %tuple.type.c2c) [from "implicit.carbon"] { // CHECK:STDOUT: %X: %tuple.type.c2c = bind_symbolic_name X, 0 [symbolic = %X (constants.%X)] -// CHECK:STDOUT: %X.patt: %tuple.type.c2c = symbolic_binding_pattern X, 0 [symbolic = %X.patt (constants.%X.patt)] +// CHECK:STDOUT: %X.patt: %pattern_type.073 = symbolic_binding_pattern X, 0 [symbolic = %X.patt (constants.%X.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: diff --git a/toolchain/check/testdata/tuple/min_prelude/tuple_pattern.carbon b/toolchain/check/testdata/tuple/min_prelude/tuple_pattern.carbon index 9172a433144d..efd902dd670c 100644 --- a/toolchain/check/testdata/tuple/min_prelude/tuple_pattern.carbon +++ b/toolchain/check/testdata/tuple/min_prelude/tuple_pattern.carbon @@ -61,7 +61,15 @@ let (x: {}, y: {}) = ({}, {}); library "[[@TEST_NAME]]"; interface I { - // CHECK:STDERR: fail_in_interface.carbon:[[@LINE+4]]:7: error: pattern in associated constant declaration must be a single `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] + // CHECK:STDERR: fail_in_interface.carbon:[[@LINE+12]]:8: error: found runtime binding pattern in associated constant declaration; expected a `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] + // CHECK:STDERR: let (x: {}, y: {}); + // CHECK:STDERR: ^~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_in_interface.carbon:[[@LINE+8]]:15: error: found runtime binding pattern in associated constant declaration; expected a `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] + // CHECK:STDERR: let (x: {}, y: {}); + // CHECK:STDERR: ^~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_in_interface.carbon:[[@LINE+4]]:7: error: found tuple pattern in associated constant declaration; expected symbolic binding pattern [ExpectedSingleBindingInAssociatedConstant] // CHECK:STDERR: let (x: {}, y: {}); // CHECK:STDERR: ^~~~~~~~~~~~~~ // CHECK:STDERR: @@ -106,7 +114,9 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple: %tuple.type.b6b = tuple_value (%empty_struct, %empty_struct) [concrete] // CHECK:STDOUT: } @@ -129,9 +139,9 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y -// CHECK:STDOUT: %.loc5_20: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = binding_pattern y +// CHECK:STDOUT: %.loc5_20: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) // CHECK:STDOUT: } // CHECK:STDOUT: %.loc5_26.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc5_30.1: %empty_struct_type = struct_literal () @@ -151,10 +161,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %.loc5_30.2: %empty_struct_type = converted %.loc5_30.1, %empty_struct.loc5_30 [concrete = constants.%empty_struct] // CHECK:STDOUT: %y: %empty_struct_type = bind_name y, %.loc5_30.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_struct_type = binding_pattern a -// CHECK:STDOUT: %b.patt: %empty_struct_type = binding_pattern b -// CHECK:STDOUT: %.loc6_20: %tuple.type.b6b = tuple_pattern (%a.patt, %b.patt) -// CHECK:STDOUT: %.loc6_3: %tuple.type.b6b = var_pattern %.loc6_20 +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = binding_pattern a +// CHECK:STDOUT: %b.patt: %pattern_type.a96 = binding_pattern b +// CHECK:STDOUT: %.loc6_20: %pattern_type.de4 = tuple_pattern (%a.patt, %b.patt) +// CHECK:STDOUT: %.loc6_3: %pattern_type.de4 = var_pattern %.loc6_20 // CHECK:STDOUT: } // CHECK:STDOUT: %.var.loc6: ref %tuple.type.b6b = var // CHECK:STDOUT: %tuple.elem0.loc6: ref %empty_struct_type = tuple_access %.var.loc6, element0 @@ -170,10 +180,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_struct_type = bind_name b, %tuple.elem1.loc6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %empty_struct_type = binding_pattern c -// CHECK:STDOUT: %d.patt: %empty_struct_type = binding_pattern d -// CHECK:STDOUT: %.loc7_20: %tuple.type.b6b = tuple_pattern (%c.patt, %d.patt) -// CHECK:STDOUT: %.loc7_3.1: %tuple.type.b6b = var_pattern %.loc7_20 +// CHECK:STDOUT: %c.patt: %pattern_type.a96 = binding_pattern c +// CHECK:STDOUT: %d.patt: %pattern_type.a96 = binding_pattern d +// CHECK:STDOUT: %.loc7_20: %pattern_type.de4 = tuple_pattern (%c.patt, %d.patt) +// CHECK:STDOUT: %.loc7_3.1: %pattern_type.de4 = var_pattern %.loc7_20 // CHECK:STDOUT: } // CHECK:STDOUT: %.var.loc7: ref %tuple.type.b6b = var // CHECK:STDOUT: %.loc7_26.1: %empty_struct_type = struct_literal () @@ -210,8 +220,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: %tuple: %tuple.type.b6b = tuple_value (%empty_struct, %empty_struct) [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %MakeTuple.type: type = fn_type @MakeTuple [concrete] @@ -238,8 +250,8 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: %MakeTuple.decl: %MakeTuple.type = fn_decl @MakeTuple [concrete = constants.%MakeTuple] { -// CHECK:STDOUT: %return.patt: %tuple.type.b6b = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.b6b = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.de4 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.de4 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_21: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc14_25: %empty_struct_type = struct_literal () @@ -256,8 +268,8 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %tuple.patt: %tuple.type.b6b = binding_pattern tuple -// CHECK:STDOUT: %.loc5_3.1: %tuple.type.b6b = var_pattern %tuple.patt +// CHECK:STDOUT: %tuple.patt: %pattern_type.de4 = binding_pattern tuple +// CHECK:STDOUT: %.loc5_3.1: %pattern_type.de4 = var_pattern %tuple.patt // CHECK:STDOUT: } // CHECK:STDOUT: %tuple.var: ref %tuple.type.b6b = var tuple // CHECK:STDOUT: %.loc5_27.1: %empty_struct_type = struct_literal () @@ -282,10 +294,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: } // CHECK:STDOUT: %tuple: ref %tuple.type.b6b = bind_name tuple, %tuple.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y -// CHECK:STDOUT: %.loc6_20: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) -// CHECK:STDOUT: %.loc6_3.1: %tuple.type.b6b = var_pattern %.loc6_20 +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = binding_pattern y +// CHECK:STDOUT: %.loc6_20: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %.loc6_3.1: %pattern_type.de4 = var_pattern %.loc6_20 // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type.b6b = var // CHECK:STDOUT: %tuple.ref: ref %tuple.type.b6b = name_ref tuple, %tuple @@ -318,7 +330,7 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %tuple.patt: %tuple.type.b6b = binding_pattern tuple +// CHECK:STDOUT: %tuple.patt: %pattern_type.de4 = binding_pattern tuple // CHECK:STDOUT: } // CHECK:STDOUT: %.loc10_27: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc10_31: %empty_struct_type = struct_literal () @@ -339,10 +351,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %.loc10_32.4: %tuple.type.b6b = converted %.loc10_32.1, %tuple.loc10_32 [concrete = constants.%tuple] // CHECK:STDOUT: %tuple.loc10_7: %tuple.type.b6b = bind_name tuple, %.loc10_32.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y -// CHECK:STDOUT: %.loc11_20: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) -// CHECK:STDOUT: %.loc11_3.1: %tuple.type.b6b = var_pattern %.loc11_20 +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = binding_pattern y +// CHECK:STDOUT: %.loc11_20: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %.loc11_3.1: %pattern_type.de4 = var_pattern %.loc11_20 // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type.b6b = var // CHECK:STDOUT: %tuple.ref: %tuple.type.b6b = name_ref tuple, %tuple.loc10_7 @@ -377,10 +389,10 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y -// CHECK:STDOUT: %.loc17_20: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) -// CHECK:STDOUT: %.loc17_3.1: %tuple.type.b6b = var_pattern %.loc17_20 +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = binding_pattern y +// CHECK:STDOUT: %.loc17_20: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %.loc17_3.1: %pattern_type.de4 = var_pattern %.loc17_20 // CHECK:STDOUT: } // CHECK:STDOUT: %.var: ref %tuple.type.b6b = var // CHECK:STDOUT: %MakeTuple.ref: %MakeTuple.type = name_ref MakeTuple, file.%MakeTuple.decl [concrete = constants.%MakeTuple] @@ -408,8 +420,11 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] // CHECK:STDOUT: %tuple.type.6ca: type = tuple_type (%empty_struct_type, %tuple.type.b6b) [concrete] +// CHECK:STDOUT: %pattern_type.361: type = pattern_type %tuple.type.6ca [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -431,11 +446,11 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y -// CHECK:STDOUT: %z.patt: %empty_struct_type = binding_pattern z -// CHECK:STDOUT: %.loc5_28: %tuple.type.b6b = tuple_pattern (%y.patt, %z.patt) -// CHECK:STDOUT: %.loc5_29: %tuple.type.6ca = tuple_pattern (%x.patt, %.loc5_28) +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = binding_pattern y +// CHECK:STDOUT: %z.patt: %pattern_type.a96 = binding_pattern z +// CHECK:STDOUT: %.loc5_28: %pattern_type.de4 = tuple_pattern (%y.patt, %z.patt) +// CHECK:STDOUT: %.loc5_29: %pattern_type.361 = tuple_pattern (%x.patt, %.loc5_28) // CHECK:STDOUT: } // CHECK:STDOUT: %.loc5_35.1: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc5_40.1: %empty_struct_type = struct_literal () @@ -470,7 +485,9 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -488,9 +505,9 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y -// CHECK:STDOUT: %.loc4_18: %tuple.type = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = binding_pattern y +// CHECK:STDOUT: %.loc4_18: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) // CHECK:STDOUT: } // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_struct_type] { // CHECK:STDOUT: %.loc4_10.2: %empty_struct_type = struct_literal () @@ -543,8 +560,6 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self -// CHECK:STDOUT: .x = .inst25.loc9_8 -// CHECK:STDOUT: .y = .inst29.loc9_15 // CHECK:STDOUT: has_error // CHECK:STDOUT: witness = () // CHECK:STDOUT: } @@ -568,7 +583,9 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %pattern_type.a96: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %pattern_type.de4: type = pattern_type %tuple.type.b6b [concrete] // CHECK:STDOUT: %tuple.type.572: type = tuple_type (%empty_struct_type) [concrete] // CHECK:STDOUT: %tuple.type.8d4: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] // CHECK:STDOUT: } @@ -583,20 +600,20 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: package: = namespace [concrete] { // CHECK:STDOUT: .Core = imports.%Core // CHECK:STDOUT: .x = .inst21.loc8_6 -// CHECK:STDOUT: .y = .inst25.loc8_13 -// CHECK:STDOUT: .a = .inst35.loc14_6 -// CHECK:STDOUT: .b = .inst39.loc14_13 +// CHECK:STDOUT: .y = .inst26.loc8_13 +// CHECK:STDOUT: .a = .inst37.loc14_6 +// CHECK:STDOUT: .b = .inst41.loc14_13 // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y -// CHECK:STDOUT: %.loc8: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %x.patt: %pattern_type.a96 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.a96 = binding_pattern y +// CHECK:STDOUT: %.loc8: %pattern_type.de4 = tuple_pattern (%x.patt, %y.patt) // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_struct_type = binding_pattern a -// CHECK:STDOUT: %b.patt: %empty_struct_type = binding_pattern b -// CHECK:STDOUT: %.loc14: %tuple.type.b6b = tuple_pattern (%a.patt, %b.patt) +// CHECK:STDOUT: %a.patt: %pattern_type.a96 = binding_pattern a +// CHECK:STDOUT: %b.patt: %pattern_type.a96 = binding_pattern b +// CHECK:STDOUT: %.loc14: %pattern_type.de4 = tuple_pattern (%a.patt, %b.patt) // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/tuple/nested_tuple.carbon b/toolchain/check/testdata/tuple/nested_tuple.carbon index 8f3c0b5a9b04..568e2f48f6ee 100644 --- a/toolchain/check/testdata/tuple/nested_tuple.carbon +++ b/toolchain/check/testdata/tuple/nested_tuple.carbon @@ -19,6 +19,7 @@ var x: ((i32, i32), i32) = ((12, 76), 6); // CHECK:STDOUT: %tuple.type.45d: type = tuple_type (%tuple.type.24b, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] // CHECK:STDOUT: %tuple.type.f72: type = tuple_type (%tuple.type.d07, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.7d3: type = pattern_type %tuple.type.f72 [concrete] // CHECK:STDOUT: %int_12.6a3: Core.IntLiteral = int_value 12 [concrete] // CHECK:STDOUT: %int_76.872: Core.IntLiteral = int_value 76 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -62,8 +63,8 @@ var x: ((i32, i32), i32) = ((12, 76), 6); // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type.f72 = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %tuple.type.f72 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.7d3 = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type.7d3 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.f72 = var x // CHECK:STDOUT: %.loc11_24.1: type = splice_block %.loc11_24.4 [concrete = constants.%tuple.type.f72] { diff --git a/toolchain/check/testdata/tuple/nested_tuple_in_place.carbon b/toolchain/check/testdata/tuple/nested_tuple_in_place.carbon index bbe031263061..06e46bba8176 100644 --- a/toolchain/check/testdata/tuple/nested_tuple_in_place.carbon +++ b/toolchain/check/testdata/tuple/nested_tuple_in_place.carbon @@ -25,16 +25,19 @@ fn H() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.ff9: type = tuple_type (type, type, type) [concrete] // CHECK:STDOUT: %tuple.type.189: type = tuple_type (%i32, %i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.b5a: type = pattern_type %tuple.type.189 [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.f9f: type = tuple_type (%tuple.type.ff9, %tuple.type.ff9) [concrete] // CHECK:STDOUT: %tuple.type.99b: type = tuple_type (%tuple.type.189, %tuple.type.189) [concrete] +// CHECK:STDOUT: %pattern_type.d88: type = pattern_type %tuple.type.99b [concrete] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %tuple.type.3a3: type = tuple_type (type, %tuple.type.ff9, type) [concrete] // CHECK:STDOUT: %tuple.type.516: type = tuple_type (%i32, %tuple.type.189, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.6b5: type = pattern_type %tuple.type.516 [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %tuple.type.667: type = tuple_type (Core.IntLiteral, %tuple.type.189, Core.IntLiteral) [concrete] @@ -73,8 +76,8 @@ fn H() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %tuple.type.189 = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type.189 = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.b5a = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.b5a = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %int_32.loc11_12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] // CHECK:STDOUT: %i32.loc11_12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] @@ -96,8 +99,8 @@ fn H() { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %tuple.type.99b = binding_pattern v -// CHECK:STDOUT: %.loc14_3.1: %tuple.type.99b = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.d88 = binding_pattern v +// CHECK:STDOUT: %.loc14_3.1: %pattern_type.d88 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %tuple.type.99b = var v // CHECK:STDOUT: %F.ref.loc14_48: %F.type = name_ref F, file.%F.decl [concrete = constants.%F] @@ -137,8 +140,8 @@ fn H() { // CHECK:STDOUT: fn @H() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %tuple.type.516 = binding_pattern v -// CHECK:STDOUT: %.loc18_3.1: %tuple.type.516 = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type.6b5 = binding_pattern v +// CHECK:STDOUT: %.loc18_3.1: %pattern_type.6b5 = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %tuple.type.516 = var v // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] diff --git a/toolchain/check/testdata/tuple/no_prelude/empty.carbon b/toolchain/check/testdata/tuple/no_prelude/empty.carbon index 692cb4bbba2a..076ed8514a06 100644 --- a/toolchain/check/testdata/tuple/no_prelude/empty.carbon +++ b/toolchain/check/testdata/tuple/no_prelude/empty.carbon @@ -15,6 +15,7 @@ var y: () = x; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -24,8 +25,8 @@ var y: () = x; // CHECK:STDOUT: .y = %y // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc11_9.1: type = splice_block %.loc11_9.3 [concrete = constants.%empty_tuple.type] { @@ -34,8 +35,8 @@ var y: () = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %empty_tuple.type = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %empty_tuple.type = binding_pattern y -// CHECK:STDOUT: %.loc12_1: %empty_tuple.type = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type = binding_pattern y +// CHECK:STDOUT: %.loc12_1: %pattern_type = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_tuple.type = var y // CHECK:STDOUT: %.loc12_9.1: type = splice_block %.loc12_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/tuple/no_prelude/fail_assign_empty.carbon b/toolchain/check/testdata/tuple/no_prelude/fail_assign_empty.carbon index f7918308bb42..ce5f82943134 100644 --- a/toolchain/check/testdata/tuple/no_prelude/fail_assign_empty.carbon +++ b/toolchain/check/testdata/tuple/no_prelude/fail_assign_empty.carbon @@ -19,6 +19,7 @@ var x: ((),) = (); // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type) [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -26,8 +27,8 @@ var x: ((),) = (); // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type = var x // CHECK:STDOUT: %.loc15_12.1: type = splice_block %.loc15_12.4 [concrete = constants.%tuple.type] { diff --git a/toolchain/check/testdata/tuple/no_prelude/fail_assign_to_empty.carbon b/toolchain/check/testdata/tuple/no_prelude/fail_assign_to_empty.carbon index 3ee8652d5758..98807aefe322 100644 --- a/toolchain/check/testdata/tuple/no_prelude/fail_assign_to_empty.carbon +++ b/toolchain/check/testdata/tuple/no_prelude/fail_assign_to_empty.carbon @@ -18,6 +18,7 @@ var x: () = ((),); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -26,8 +27,8 @@ var x: () = ((),); // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc15_9.1: type = splice_block %.loc15_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/tuple/one_element.carbon b/toolchain/check/testdata/tuple/one_element.carbon index c34d97a8d82f..8abafea991dd 100644 --- a/toolchain/check/testdata/tuple/one_element.carbon +++ b/toolchain/check/testdata/tuple/one_element.carbon @@ -18,6 +18,7 @@ var y: (i32,) = x; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] // CHECK:STDOUT: %tuple.type.a1c: type = tuple_type (%i32) [concrete] +// CHECK:STDOUT: %pattern_type.b74: type = pattern_type %tuple.type.a1c [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %tuple.type.985: type = tuple_type (Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] @@ -52,8 +53,8 @@ var y: (i32,) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type.a1c = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %tuple.type.a1c = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.b74 = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type.b74 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.a1c = var x // CHECK:STDOUT: %.loc11_13.1: type = splice_block %.loc11_13.3 [concrete = constants.%tuple.type.a1c] { @@ -64,8 +65,8 @@ var y: (i32,) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %tuple.type.a1c = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %tuple.type.a1c = binding_pattern y -// CHECK:STDOUT: %.loc12_1: %tuple.type.a1c = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.b74 = binding_pattern y +// CHECK:STDOUT: %.loc12_1: %pattern_type.b74 = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %tuple.type.a1c = var y // CHECK:STDOUT: %.loc12_13.1: type = splice_block %.loc12_13.3 [concrete = constants.%tuple.type.a1c] { diff --git a/toolchain/check/testdata/tuple/two_elements.carbon b/toolchain/check/testdata/tuple/two_elements.carbon index daf886ea89db..c3b8bfd9d840 100644 --- a/toolchain/check/testdata/tuple/two_elements.carbon +++ b/toolchain/check/testdata/tuple/two_elements.carbon @@ -21,6 +21,7 @@ var y: (i32, i32) = x; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %tuple.type.24b: type = tuple_type (type, type) [concrete] // CHECK:STDOUT: %tuple.type.d07: type = tuple_type (%i32, %i32) [concrete] +// CHECK:STDOUT: %pattern_type.511: type = pattern_type %tuple.type.d07 [concrete] // CHECK:STDOUT: %int_4.0c1: Core.IntLiteral = int_value 4 [concrete] // CHECK:STDOUT: %int_102.b54: Core.IntLiteral = int_value 102 [concrete] // CHECK:STDOUT: %tuple.type.f94: type = tuple_type (Core.IntLiteral, Core.IntLiteral) [concrete] @@ -61,7 +62,7 @@ var y: (i32, i32) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %tuple.type.d07 = binding_pattern v +// CHECK:STDOUT: %v.patt: %pattern_type.511 = binding_pattern v // CHECK:STDOUT: } // CHECK:STDOUT: %.loc11_17.1: type = splice_block %.loc11_17.3 [concrete = constants.%tuple.type.d07] { // CHECK:STDOUT: %int_32.loc11_9: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -89,7 +90,7 @@ var y: (i32, i32) = x; // CHECK:STDOUT: %.loc11_28.5: %tuple.type.d07 = converted @__global_init.%.loc11, %tuple [concrete = constants.%tuple] // CHECK:STDOUT: %v: %tuple.type.d07 = bind_name v, %.loc11_28.5 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %tuple.type.d07 = binding_pattern w +// CHECK:STDOUT: %w.patt: %pattern_type.511 = binding_pattern w // CHECK:STDOUT: } // CHECK:STDOUT: %.loc12_17.1: type = splice_block %.loc12_17.3 [concrete = constants.%tuple.type.d07] { // CHECK:STDOUT: %int_32.loc12_9: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -101,8 +102,8 @@ var y: (i32, i32) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %w: %tuple.type.d07 = bind_name w, @__global_init.%v.ref // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %tuple.type.d07 = binding_pattern x -// CHECK:STDOUT: %.loc14_1: %tuple.type.d07 = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type.511 = binding_pattern x +// CHECK:STDOUT: %.loc14_1: %pattern_type.511 = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %tuple.type.d07 = var x // CHECK:STDOUT: %.loc14_17.1: type = splice_block %.loc14_17.3 [concrete = constants.%tuple.type.d07] { @@ -115,8 +116,8 @@ var y: (i32, i32) = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %tuple.type.d07 = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %tuple.type.d07 = binding_pattern y -// CHECK:STDOUT: %.loc15_1: %tuple.type.d07 = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.511 = binding_pattern y +// CHECK:STDOUT: %.loc15_1: %pattern_type.511 = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %tuple.type.d07 = var y // CHECK:STDOUT: %.loc15_17.1: type = splice_block %.loc15_17.3 [concrete = constants.%tuple.type.d07] { diff --git a/toolchain/check/testdata/var/fail_not_copyable.carbon b/toolchain/check/testdata/var/fail_not_copyable.carbon index 9939d9b10a95..e8470486aecc 100644 --- a/toolchain/check/testdata/var/fail_not_copyable.carbon +++ b/toolchain/check/testdata/var/fail_not_copyable.carbon @@ -34,8 +34,10 @@ fn F(x: X) { // CHECK:STDOUT: %X: type = class_type @X [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.019: type = pattern_type %X [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.b05: type = pattern_type String [concrete] // CHECK:STDOUT: %str: String = string_literal "hello" [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -55,8 +57,8 @@ fn F(x: X) { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.patt: %X = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %X = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %x.patt: %pattern_type.019 = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type.019 = value_param_pattern %x.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %X = value_param call_param0 // CHECK:STDOUT: %X.ref.loc14: type = name_ref X, file.%X.decl [concrete = constants.%X] @@ -76,16 +78,16 @@ fn F(x: X) { // CHECK:STDOUT: fn @F(%x.param: %X) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: String = binding_pattern s -// CHECK:STDOUT: %.loc21: String = var_pattern %s.patt +// CHECK:STDOUT: %s.patt: %pattern_type.b05 = binding_pattern s +// CHECK:STDOUT: %.loc21: %pattern_type.b05 = var_pattern %s.patt // CHECK:STDOUT: } // CHECK:STDOUT: %s.var: ref String = var s // CHECK:STDOUT: %str: String = string_literal "hello" [concrete = constants.%str] // CHECK:STDOUT: assign %s.var, // CHECK:STDOUT: %s: ref String = bind_name s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %X = binding_pattern y -// CHECK:STDOUT: %.loc28: %X = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type.019 = binding_pattern y +// CHECK:STDOUT: %.loc28: %pattern_type.019 = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %X = var y // CHECK:STDOUT: %x.ref: %X = name_ref x, %x diff --git a/toolchain/check/testdata/var/min_prelude/decl.carbon b/toolchain/check/testdata/var/min_prelude/decl.carbon index f2c983f574d4..38ac71ed9f83 100644 --- a/toolchain/check/testdata/var/min_prelude/decl.carbon +++ b/toolchain/check/testdata/var/min_prelude/decl.carbon @@ -23,6 +23,7 @@ fn Main() { // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -43,8 +44,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc3_3: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc3_3: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc3_11.1: type = splice_block %.loc3_11.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/min_prelude/decl_with_init.carbon b/toolchain/check/testdata/var/min_prelude/decl_with_init.carbon index 6561d0ca5e01..0bea754e6b67 100644 --- a/toolchain/check/testdata/var/min_prelude/decl_with_init.carbon +++ b/toolchain/check/testdata/var/min_prelude/decl_with_init.carbon @@ -23,6 +23,7 @@ fn Main() { // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -44,8 +45,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc3_3.1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc3_3.1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc3_16.1: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/var/min_prelude/fail_duplicate_decl.carbon b/toolchain/check/testdata/var/min_prelude/fail_duplicate_decl.carbon index 716190995a7a..690c6e4a7b94 100644 --- a/toolchain/check/testdata/var/min_prelude/fail_duplicate_decl.carbon +++ b/toolchain/check/testdata/var/min_prelude/fail_duplicate_decl.carbon @@ -31,6 +31,7 @@ fn Main() { // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -52,8 +53,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt.loc3: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc3_3.1: %empty_tuple.type = var_pattern %x.patt.loc3 +// CHECK:STDOUT: %x.patt.loc3: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc3_3.1: %pattern_type = var_pattern %x.patt.loc3 // CHECK:STDOUT: } // CHECK:STDOUT: %x.var.loc3: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc3_16.1: %empty_tuple.type = tuple_literal () @@ -66,8 +67,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %x.loc3: ref %empty_tuple.type = bind_name x, %x.var.loc3 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt.loc11: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc11_3.1: %empty_tuple.type = var_pattern %x.patt.loc11 +// CHECK:STDOUT: %x.patt.loc11: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc11_3.1: %pattern_type = var_pattern %x.patt.loc11 // CHECK:STDOUT: } // CHECK:STDOUT: %x.var.loc11: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc11_16.1: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/var/min_prelude/fail_init_with_self.carbon b/toolchain/check/testdata/var/min_prelude/fail_init_with_self.carbon index 463d9cbad7f9..e6c1a88e93cb 100644 --- a/toolchain/check/testdata/var/min_prelude/fail_init_with_self.carbon +++ b/toolchain/check/testdata/var/min_prelude/fail_init_with_self.carbon @@ -27,6 +27,7 @@ fn Main() { // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -47,8 +48,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc7_3: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc7_3: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %x.ref: = name_ref x, [concrete = ] diff --git a/toolchain/check/testdata/var/min_prelude/fail_lookup_outside_scope.carbon b/toolchain/check/testdata/var/min_prelude/fail_lookup_outside_scope.carbon index 0d9e37af3e19..3028aacaf42a 100644 --- a/toolchain/check/testdata/var/min_prelude/fail_lookup_outside_scope.carbon +++ b/toolchain/check/testdata/var/min_prelude/fail_lookup_outside_scope.carbon @@ -29,6 +29,7 @@ var y: () = x; // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -47,8 +48,8 @@ var y: () = x; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %empty_tuple.type = binding_pattern y -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type = binding_pattern y +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_tuple.type = var y // CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] { @@ -61,8 +62,8 @@ var y: () = x; // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc3_3: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc3_3: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc3_11.1: type = splice_block %.loc3_11.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/min_prelude/global_lookup_in_scope.carbon b/toolchain/check/testdata/var/min_prelude/global_lookup_in_scope.carbon index 25a3dbc3d90c..0e3367d344f3 100644 --- a/toolchain/check/testdata/var/min_prelude/global_lookup_in_scope.carbon +++ b/toolchain/check/testdata/var/min_prelude/global_lookup_in_scope.carbon @@ -24,6 +24,7 @@ fn Main() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] @@ -44,8 +45,8 @@ fn Main() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.v = binding_pattern x -// CHECK:STDOUT: %.loc2_1: %struct_type.v = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc2_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var x // CHECK:STDOUT: %.loc2_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { @@ -60,8 +61,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %struct_type.v = binding_pattern y -// CHECK:STDOUT: %.loc5_3.1: %struct_type.v = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type = binding_pattern y +// CHECK:STDOUT: %.loc5_3.1: %pattern_type = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.v = var y // CHECK:STDOUT: %x.ref: ref %struct_type.v = name_ref x, file.%x diff --git a/toolchain/check/testdata/var/min_prelude/lookup.carbon b/toolchain/check/testdata/var/min_prelude/lookup.carbon index 8c83b6385591..52a1ac2f1238 100644 --- a/toolchain/check/testdata/var/min_prelude/lookup.carbon +++ b/toolchain/check/testdata/var/min_prelude/lookup.carbon @@ -22,6 +22,7 @@ fn Main() { // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -43,8 +44,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc15_3.1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc15_3.1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc15_16.1: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/var/min_prelude/shadowing.carbon b/toolchain/check/testdata/var/min_prelude/shadowing.carbon index 6fdbc19f886b..bb47a1071e86 100644 --- a/toolchain/check/testdata/var/min_prelude/shadowing.carbon +++ b/toolchain/check/testdata/var/min_prelude/shadowing.carbon @@ -34,6 +34,7 @@ fn Main() { // CHECK:STDOUT: %Main.type: type = fn_type @Main [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Main: %Main.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: } @@ -58,8 +59,8 @@ fn Main() { // CHECK:STDOUT: fn @Main() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %NS.patt: %empty_tuple.type = binding_pattern NS -// CHECK:STDOUT: %.loc5_3.1: %empty_tuple.type = var_pattern %NS.patt +// CHECK:STDOUT: %NS.patt: %pattern_type = binding_pattern NS +// CHECK:STDOUT: %.loc5_3.1: %pattern_type = var_pattern %NS.patt // CHECK:STDOUT: } // CHECK:STDOUT: %NS.var: ref %empty_tuple.type = var NS // CHECK:STDOUT: %.loc5_17.1: %empty_tuple.type = tuple_literal () @@ -77,8 +78,8 @@ fn Main() { // CHECK:STDOUT: %.loc6_6: init %empty_tuple.type = converted %.loc6_9.1, %.loc6_9.2 [concrete = constants.%empty_tuple] // CHECK:STDOUT: assign %NS.ref, %.loc6_6 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt.loc8: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc8_3.1: %empty_tuple.type = var_pattern %x.patt.loc8 +// CHECK:STDOUT: %x.patt.loc8: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc8_3.1: %pattern_type = var_pattern %x.patt.loc8 // CHECK:STDOUT: } // CHECK:STDOUT: %x.var.loc8: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc8_16.1: %empty_tuple.type = tuple_literal () @@ -95,8 +96,8 @@ fn Main() { // CHECK:STDOUT: // CHECK:STDOUT: !if.then: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt.loc10: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc10_5.1: %empty_tuple.type = var_pattern %x.patt.loc10 +// CHECK:STDOUT: %x.patt.loc10: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc10_5.1: %pattern_type = var_pattern %x.patt.loc10 // CHECK:STDOUT: } // CHECK:STDOUT: %x.var.loc10: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc10_18.1: %empty_tuple.type = tuple_literal () diff --git a/toolchain/check/testdata/var/min_prelude/var_pattern.carbon b/toolchain/check/testdata/var/min_prelude/var_pattern.carbon index 189c7c12d6d6..5381177e238f 100644 --- a/toolchain/check/testdata/var/min_prelude/var_pattern.carbon +++ b/toolchain/check/testdata/var/min_prelude/var_pattern.carbon @@ -101,6 +101,7 @@ class C { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -122,8 +123,8 @@ class C { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc5_7.1: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc5_7.1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc5_20.1: %empty_tuple.type = tuple_literal () @@ -144,7 +145,9 @@ class C { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] +// CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -166,10 +169,10 @@ class C { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_tuple.type = binding_pattern y -// CHECK:STDOUT: %.loc5_15.1: %empty_tuple.type = var_pattern %y.patt -// CHECK:STDOUT: %.loc5_24: %tuple.type = tuple_pattern (%x.patt, %.loc5_15.1) +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = binding_pattern y +// CHECK:STDOUT: %.loc5_15.1: %pattern_type.cb1 = var_pattern %y.patt +// CHECK:STDOUT: %.loc5_24: %pattern_type.5b8 = tuple_pattern (%x.patt, %.loc5_15.1) // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %empty_tuple.type = var y // CHECK:STDOUT: %.loc5_30.1: %empty_tuple.type = tuple_literal () @@ -197,6 +200,7 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] @@ -218,11 +222,11 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %x.param_patt: %empty_tuple.type = value_param_pattern %x.patt, call_param0 -// CHECK:STDOUT: %y.patt: %empty_tuple.type = binding_pattern y -// CHECK:STDOUT: %y.param_patt: %empty_tuple.type = ref_param_pattern %y.patt, call_param1 -// CHECK:STDOUT: %.loc4_13: %empty_tuple.type = var_pattern %y.param_patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 +// CHECK:STDOUT: %y.patt: %pattern_type = binding_pattern y +// CHECK:STDOUT: %y.param_patt: %pattern_type = ref_param_pattern %y.patt, call_param1 +// CHECK:STDOUT: %.loc4_13: %pattern_type = var_pattern %y.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0 // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { @@ -245,8 +249,8 @@ class C { // CHECK:STDOUT: fn @G() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %empty_tuple.type = binding_pattern v -// CHECK:STDOUT: %.loc7_3.1: %empty_tuple.type = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type = binding_pattern v +// CHECK:STDOUT: %.loc7_3.1: %pattern_type = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var v // CHECK:STDOUT: %.loc7_16.1: %empty_tuple.type = tuple_literal () @@ -277,8 +281,11 @@ class C { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %tuple.type.bcd: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] +// CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type.bcd [concrete] // CHECK:STDOUT: %tuple.type.a21: type = tuple_type (%empty_tuple.type, %tuple.type.bcd) [concrete] +// CHECK:STDOUT: %pattern_type.c6c: type = pattern_type %tuple.type.a21 [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %tuple: %tuple.type.bcd = tuple_value (%empty_tuple, %empty_tuple) [concrete] // CHECK:STDOUT: } @@ -301,13 +308,13 @@ class C { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %y.patt: %empty_tuple.type = binding_pattern y -// CHECK:STDOUT: %z.patt: %empty_tuple.type = binding_pattern z -// CHECK:STDOUT: %.loc9_27.1: %empty_tuple.type = var_pattern %z.patt -// CHECK:STDOUT: %.loc9_36: %tuple.type.bcd = tuple_pattern (%y.patt, %.loc9_27.1) -// CHECK:STDOUT: %.loc9_15.1: %tuple.type.bcd = var_pattern %.loc9_36 -// CHECK:STDOUT: %.loc9_37: %tuple.type.a21 = tuple_pattern (%x.patt, %.loc9_15.1) +// CHECK:STDOUT: %x.patt: %pattern_type.cb1 = binding_pattern x +// CHECK:STDOUT: %y.patt: %pattern_type.cb1 = binding_pattern y +// CHECK:STDOUT: %z.patt: %pattern_type.cb1 = binding_pattern z +// CHECK:STDOUT: %.loc9_27.1: %pattern_type.cb1 = var_pattern %z.patt +// CHECK:STDOUT: %.loc9_36: %pattern_type.5b8 = tuple_pattern (%y.patt, %.loc9_27.1) +// CHECK:STDOUT: %.loc9_15.1: %pattern_type.5b8 = var_pattern %.loc9_36 +// CHECK:STDOUT: %.loc9_37: %pattern_type.c6c = tuple_pattern (%x.patt, %.loc9_15.1) // CHECK:STDOUT: } // CHECK:STDOUT: %z.var: ref %empty_tuple.type = var z // CHECK:STDOUT: %.var: ref %tuple.type.bcd = var @@ -372,6 +379,7 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -395,9 +403,9 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %self.patt: %C = binding_pattern self -// CHECK:STDOUT: %self.param_patt: %C = ref_param_pattern %self.patt, call_param0 -// CHECK:STDOUT: %.loc5: %C = var_pattern %self.param_patt +// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self +// CHECK:STDOUT: %self.param_patt: %pattern_type = ref_param_pattern %self.patt, call_param0 +// CHECK:STDOUT: %.loc5: %pattern_type = var_pattern %self.param_patt // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %C = ref_param call_param0 // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] diff --git a/toolchain/check/testdata/var/no_prelude/export_name.carbon b/toolchain/check/testdata/var/no_prelude/export_name.carbon index 92407ad8595a..1c8e53339837 100644 --- a/toolchain/check/testdata/var/no_prelude/export_name.carbon +++ b/toolchain/check/testdata/var/no_prelude/export_name.carbon @@ -48,6 +48,7 @@ var w: () = v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -55,8 +56,8 @@ var w: () = v; // CHECK:STDOUT: .v = %v // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %empty_tuple.type = binding_pattern v -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type = binding_pattern v +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var v // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { @@ -88,6 +89,7 @@ var w: () = v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -102,8 +104,8 @@ var w: () = v; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %w.patt: %empty_tuple.type = binding_pattern w -// CHECK:STDOUT: %.loc12_1: %empty_tuple.type = var_pattern %w.patt +// CHECK:STDOUT: %w.patt: %pattern_type = binding_pattern w +// CHECK:STDOUT: %.loc12_1: %pattern_type = var_pattern %w.patt // CHECK:STDOUT: } // CHECK:STDOUT: %w.var: ref %empty_tuple.type = var w // CHECK:STDOUT: %.loc12_9.1: type = splice_block %.loc12_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/no_prelude/fail_in_interface.carbon b/toolchain/check/testdata/var/no_prelude/fail_in_interface.carbon index 15817bf8655f..df269113e0de 100644 --- a/toolchain/check/testdata/var/no_prelude/fail_in_interface.carbon +++ b/toolchain/check/testdata/var/no_prelude/fail_in_interface.carbon @@ -9,6 +9,10 @@ // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/var/no_prelude/fail_in_interface.carbon interface I { + // CHECK:STDERR: fail_in_interface.carbon:[[@LINE+8]]:7: error: found runtime binding pattern in associated constant declaration; expected a `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] + // CHECK:STDERR: var v: (); + // CHECK:STDERR: ^~~~~ + // CHECK:STDERR: // CHECK:STDERR: fail_in_interface.carbon:[[@LINE+4]]:3: error: `var` declaration in interface [VarInInterfaceDecl] // CHECK:STDERR: var v: (); // CHECK:STDERR: ^~~~~~~~~~ @@ -35,7 +39,6 @@ interface I { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self -// CHECK:STDOUT: .v = .inst22.loc16_7 // CHECK:STDOUT: witness = () // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/var/no_prelude/fail_init_type_mismatch.carbon b/toolchain/check/testdata/var/no_prelude/fail_init_type_mismatch.carbon index 856f79fd93e6..056935f123c1 100644 --- a/toolchain/check/testdata/var/no_prelude/fail_init_type_mismatch.carbon +++ b/toolchain/check/testdata/var/no_prelude/fail_init_type_mismatch.carbon @@ -19,6 +19,7 @@ var x: {} = (); // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_struct_type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -27,8 +28,8 @@ var x: {} = (); // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x -// CHECK:STDOUT: %.loc15_1: %empty_struct_type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc15_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_struct_type = var x // CHECK:STDOUT: %.loc15_9.1: type = splice_block %.loc15_9.3 [concrete = constants.%empty_struct_type] { diff --git a/toolchain/check/testdata/var/no_prelude/fail_modifiers.carbon b/toolchain/check/testdata/var/no_prelude/fail_modifiers.carbon index 9f4cf856702c..18804cfdaeed 100644 --- a/toolchain/check/testdata/var/no_prelude/fail_modifiers.carbon +++ b/toolchain/check/testdata/var/no_prelude/fail_modifiers.carbon @@ -46,6 +46,7 @@ abstract var e: (); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -56,8 +57,8 @@ abstract var e: (); // CHECK:STDOUT: .e = %e // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %b.patt: %empty_tuple.type = binding_pattern b -// CHECK:STDOUT: %.loc15_11: %empty_tuple.type = var_pattern %b.patt +// CHECK:STDOUT: %b.patt: %pattern_type = binding_pattern b +// CHECK:STDOUT: %.loc15_11: %pattern_type = var_pattern %b.patt // CHECK:STDOUT: } // CHECK:STDOUT: %b.var: ref %empty_tuple.type = var b // CHECK:STDOUT: %.loc15_19.1: type = splice_block %.loc15_19.3 [concrete = constants.%empty_tuple.type] { @@ -66,8 +67,8 @@ abstract var e: (); // CHECK:STDOUT: } // CHECK:STDOUT: %b: ref %empty_tuple.type = bind_name b, %b.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %empty_tuple.type = binding_pattern c -// CHECK:STDOUT: %.loc24_19: %empty_tuple.type = var_pattern %c.patt +// CHECK:STDOUT: %c.patt: %pattern_type = binding_pattern c +// CHECK:STDOUT: %.loc24_19: %pattern_type = var_pattern %c.patt // CHECK:STDOUT: } // CHECK:STDOUT: %c.var: ref %empty_tuple.type = var c // CHECK:STDOUT: %.loc24_27.1: type = splice_block %.loc24_27.3 [concrete = constants.%empty_tuple.type] { @@ -76,8 +77,8 @@ abstract var e: (); // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %empty_tuple.type = bind_name c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %d.patt: %empty_tuple.type = binding_pattern d -// CHECK:STDOUT: %.loc37_21: %empty_tuple.type = var_pattern %d.patt +// CHECK:STDOUT: %d.patt: %pattern_type = binding_pattern d +// CHECK:STDOUT: %.loc37_21: %pattern_type = var_pattern %d.patt // CHECK:STDOUT: } // CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d // CHECK:STDOUT: %.loc37_29.1: type = splice_block %.loc37_29.3 [concrete = constants.%empty_tuple.type] { @@ -86,8 +87,8 @@ abstract var e: (); // CHECK:STDOUT: } // CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %e.patt: %empty_tuple.type = binding_pattern e -// CHECK:STDOUT: %.loc43_10: %empty_tuple.type = var_pattern %e.patt +// CHECK:STDOUT: %e.patt: %pattern_type = binding_pattern e +// CHECK:STDOUT: %.loc43_10: %pattern_type = var_pattern %e.patt // CHECK:STDOUT: } // CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e // CHECK:STDOUT: %.loc43_18.1: type = splice_block %.loc43_18.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/no_prelude/fail_namespace_conflict.carbon b/toolchain/check/testdata/var/no_prelude/fail_namespace_conflict.carbon index f9baf7001b4d..23a5ee547d41 100644 --- a/toolchain/check/testdata/var/no_prelude/fail_namespace_conflict.carbon +++ b/toolchain/check/testdata/var/no_prelude/fail_namespace_conflict.carbon @@ -32,6 +32,7 @@ var A: () = (); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -41,8 +42,8 @@ var A: () = (); // CHECK:STDOUT: } // CHECK:STDOUT: %A.loc11: = namespace [concrete] {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %A.patt.loc20: %empty_tuple.type = binding_pattern A -// CHECK:STDOUT: %.loc20_1: %empty_tuple.type = var_pattern %A.patt.loc20 +// CHECK:STDOUT: %A.patt.loc20: %pattern_type = binding_pattern A +// CHECK:STDOUT: %.loc20_1: %pattern_type = var_pattern %A.patt.loc20 // CHECK:STDOUT: } // CHECK:STDOUT: %A.var.loc20: ref %empty_tuple.type = var A // CHECK:STDOUT: %.loc20_9.1: type = splice_block %.loc20_9.3 [concrete = constants.%empty_tuple.type] { @@ -51,8 +52,8 @@ var A: () = (); // CHECK:STDOUT: } // CHECK:STDOUT: %A.loc20: ref %empty_tuple.type = bind_name A, %A.var.loc20 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %A.patt.loc29: %empty_tuple.type = binding_pattern A -// CHECK:STDOUT: %.loc29_1: %empty_tuple.type = var_pattern %A.patt.loc29 +// CHECK:STDOUT: %A.patt.loc29: %pattern_type = binding_pattern A +// CHECK:STDOUT: %.loc29_1: %pattern_type = var_pattern %A.patt.loc29 // CHECK:STDOUT: } // CHECK:STDOUT: %A.var.loc29: ref %empty_tuple.type = var A // CHECK:STDOUT: %.loc29_9.1: type = splice_block %.loc29_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/no_prelude/global_decl.carbon b/toolchain/check/testdata/var/no_prelude/global_decl.carbon index ba80cc715b14..4006895acfb2 100644 --- a/toolchain/check/testdata/var/no_prelude/global_decl.carbon +++ b/toolchain/check/testdata/var/no_prelude/global_decl.carbon @@ -15,6 +15,7 @@ var x: {.v: ()}; // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -22,8 +23,8 @@ var x: {.v: ()}; // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.v = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %struct_type.v = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var x // CHECK:STDOUT: %.loc11_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { diff --git a/toolchain/check/testdata/var/no_prelude/global_decl_with_init.carbon b/toolchain/check/testdata/var/no_prelude/global_decl_with_init.carbon index 5d42c8d199fb..5b5eef327900 100644 --- a/toolchain/check/testdata/var/no_prelude/global_decl_with_init.carbon +++ b/toolchain/check/testdata/var/no_prelude/global_decl_with_init.carbon @@ -15,6 +15,7 @@ var x: {.v: ()} = {.v = ()}; // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -24,8 +25,8 @@ var x: {.v: ()} = {.v = ()}; // CHECK:STDOUT: .x = %x // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.v = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %struct_type.v = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var x // CHECK:STDOUT: %.loc11_15: type = splice_block %struct_type.v [concrete = constants.%struct_type.v] { diff --git a/toolchain/check/testdata/var/no_prelude/global_lookup.carbon b/toolchain/check/testdata/var/no_prelude/global_lookup.carbon index 410bd1060e3a..b3392e56d692 100644 --- a/toolchain/check/testdata/var/no_prelude/global_lookup.carbon +++ b/toolchain/check/testdata/var/no_prelude/global_lookup.carbon @@ -16,6 +16,7 @@ var y: {.v: ()} = x; // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.v [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: %struct: %struct_type.v = struct_value (%empty_tuple) [concrete] // CHECK:STDOUT: } @@ -26,8 +27,8 @@ var y: {.v: ()} = x; // CHECK:STDOUT: .y = %y // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %struct_type.v = binding_pattern x -// CHECK:STDOUT: %.loc11_1: %struct_type.v = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc11_1: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %struct_type.v = var x // CHECK:STDOUT: %.loc11_15: type = splice_block %struct_type.v.loc11 [concrete = constants.%struct_type.v] { @@ -37,8 +38,8 @@ var y: {.v: ()} = x; // CHECK:STDOUT: } // CHECK:STDOUT: %x: ref %struct_type.v = bind_name x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %y.patt: %struct_type.v = binding_pattern y -// CHECK:STDOUT: %.loc12_1: %struct_type.v = var_pattern %y.patt +// CHECK:STDOUT: %y.patt: %pattern_type = binding_pattern y +// CHECK:STDOUT: %.loc12_1: %pattern_type = var_pattern %y.patt // CHECK:STDOUT: } // CHECK:STDOUT: %y.var: ref %struct_type.v = var y // CHECK:STDOUT: %.loc12_15: type = splice_block %struct_type.v.loc12 [concrete = constants.%struct_type.v] { diff --git a/toolchain/check/testdata/var/no_prelude/import.carbon b/toolchain/check/testdata/var/no_prelude/import.carbon index 298b42318189..032237d59ba0 100644 --- a/toolchain/check/testdata/var/no_prelude/import.carbon +++ b/toolchain/check/testdata/var/no_prelude/import.carbon @@ -24,6 +24,7 @@ var a: () = a_ref; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -32,8 +33,8 @@ var a: () = a_ref; // CHECK:STDOUT: .a_ref = %a_ref // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a_ref.patt: %empty_tuple.type = binding_pattern a_ref -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %a_ref.patt +// CHECK:STDOUT: %a_ref.patt: %pattern_type = binding_pattern a_ref +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %a_ref.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a_ref.var: ref %empty_tuple.type = var a_ref // CHECK:STDOUT: %.loc4_13.1: type = splice_block %.loc4_13.3 [concrete = constants.%empty_tuple.type] { @@ -56,6 +57,7 @@ var a: () = a_ref; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -71,8 +73,8 @@ var a: () = a_ref; // CHECK:STDOUT: %Implicit.import = import Implicit // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %empty_tuple.type = binding_pattern a -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %a.patt +// CHECK:STDOUT: %a.patt: %pattern_type = binding_pattern a +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %a.patt // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a // CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/var/no_prelude/import_access.carbon b/toolchain/check/testdata/var/no_prelude/import_access.carbon index 4e33d4b9dfc8..02d434a4eadf 100644 --- a/toolchain/check/testdata/var/no_prelude/import_access.carbon +++ b/toolchain/check/testdata/var/no_prelude/import_access.carbon @@ -56,6 +56,7 @@ var v2: () = Test.v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -64,8 +65,8 @@ var v2: () = Test.v; // CHECK:STDOUT: .v [private] = %v // CHECK:STDOUT: } // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v.patt: %empty_tuple.type = binding_pattern v -// CHECK:STDOUT: %.loc4_9: %empty_tuple.type = var_pattern %v.patt +// CHECK:STDOUT: %v.patt: %pattern_type = binding_pattern v +// CHECK:STDOUT: %.loc4_9: %pattern_type = var_pattern %v.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v.var: ref %empty_tuple.type = var v // CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.3 [concrete = constants.%empty_tuple.type] { @@ -88,6 +89,7 @@ var v2: () = Test.v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -103,8 +105,8 @@ var v2: () = Test.v; // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %empty_tuple.type = binding_pattern v2 -// CHECK:STDOUT: %.loc4_1: %empty_tuple.type = var_pattern %v2.patt +// CHECK:STDOUT: %v2.patt: %pattern_type = binding_pattern v2 +// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %v2.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref %empty_tuple.type = var v2 // CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_tuple.type] { @@ -127,6 +129,7 @@ var v2: () = Test.v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -136,8 +139,8 @@ var v2: () = Test.v; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %empty_tuple.type = binding_pattern v2 -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %v2.patt +// CHECK:STDOUT: %v2.patt: %pattern_type = binding_pattern v2 +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %v2.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref %empty_tuple.type = var v2 // CHECK:STDOUT: %.loc10_10.1: type = splice_block %.loc10_10.3 [concrete = constants.%empty_tuple.type] { @@ -158,6 +161,7 @@ var v2: () = Test.v; // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -174,8 +178,8 @@ var v2: () = Test.v; // CHECK:STDOUT: } // CHECK:STDOUT: %Test.import = import Test // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %v2.patt: %empty_tuple.type = binding_pattern v2 -// CHECK:STDOUT: %.loc10_1: %empty_tuple.type = var_pattern %v2.patt +// CHECK:STDOUT: %v2.patt: %pattern_type = binding_pattern v2 +// CHECK:STDOUT: %.loc10_1: %pattern_type = var_pattern %v2.patt // CHECK:STDOUT: } // CHECK:STDOUT: %v2.var: ref %empty_tuple.type = var v2 // CHECK:STDOUT: %.loc10_10.1: type = splice_block %.loc10_10.3 [concrete = constants.%empty_tuple.type] { diff --git a/toolchain/check/testdata/where_expr/constraints.carbon b/toolchain/check/testdata/where_expr/constraints.carbon index f96b62109cc1..391c52d9944c 100644 --- a/toolchain/check/testdata/where_expr/constraints.carbon +++ b/toolchain/check/testdata/where_expr/constraints.carbon @@ -135,14 +135,16 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I_where.type.cad: type = facet_type <@I where TODO> [concrete] // CHECK:STDOUT: %U: %I_where.type.cad = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %I_where.type.cad = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.f03: type = pattern_type %I_where.type.cad [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.f03 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %EqualEqual.type: type = fn_type @EqualEqual [concrete] // CHECK:STDOUT: %EqualEqual: %EqualEqual.type = struct_value () [concrete] // CHECK:STDOUT: %.Self.968: %J.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %.Self.as_type.78d: type = facet_access_type %.Self.968 [symbolic_self] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where .Self impls @I> [concrete] // CHECK:STDOUT: %V: %J_where.type = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %J_where.type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.d2b: type = pattern_type %J_where.type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.d2b = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %Impls.type: type = fn_type @Impls [concrete] // CHECK:STDOUT: %Impls: %Impls.type = struct_value () [concrete] // CHECK:STDOUT: %.Self.as_type.541: type = facet_access_type %.Self.258 [symbolic_self] @@ -151,7 +153,8 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] // CHECK:STDOUT: %I_where.type.427: type = facet_type <@I where .Self impls @J and TODO> [concrete] // CHECK:STDOUT: %W: %I_where.type.427 = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: %I_where.type.427 = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.127: type = pattern_type %I_where.type.427 [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type.127 = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %And.type: type = fn_type @And [concrete] // CHECK:STDOUT: %And: %And.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -176,7 +179,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %EqualEqual.decl: %EqualEqual.type = fn_decl @EqualEqual [concrete = constants.%EqualEqual] { -// CHECK:STDOUT: %U.patt.loc11_15.1: %I_where.type.cad = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc11_15.1: %pattern_type.f03 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_21.1: type = splice_block %.loc11_21.2 [concrete = constants.%I_where.type.cad] { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -190,7 +193,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %U.loc11_15.1: %I_where.type.cad = bind_symbolic_name U, 0 [symbolic = %U.loc11_15.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %Impls.decl: %Impls.type = fn_decl @Impls [concrete = constants.%Impls] { -// CHECK:STDOUT: %V.patt.loc13_10.1: %J_where.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc13_10.1: %pattern_type.d2b = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc13_16.1: type = splice_block %.loc13_16.2 [concrete = constants.%J_where.type] { // CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type] @@ -206,7 +209,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %V.loc13_10.1: %J_where.type = bind_symbolic_name V, 0 [symbolic = %V.loc13_10.2 (constants.%V)] // CHECK:STDOUT: } // CHECK:STDOUT: %And.decl: %And.type = fn_decl @And [concrete = constants.%And] { -// CHECK:STDOUT: %W.patt.loc15_8.1: %I_where.type.427 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc15_8.1: %pattern_type.127 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_14.1: type = splice_block %.loc15_14.2 [concrete = constants.%I_where.type.427] { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -265,21 +268,21 @@ fn NotEmptyStruct() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @EqualEqual(%U.loc11_15.1: %I_where.type.cad) { // CHECK:STDOUT: %U.loc11_15.2: %I_where.type.cad = bind_symbolic_name U, 0 [symbolic = %U.loc11_15.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc11_15.2: %I_where.type.cad = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc11_15.2: %pattern_type.f03 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Impls(%V.loc13_10.1: %J_where.type) { // CHECK:STDOUT: %V.loc13_10.2: %J_where.type = bind_symbolic_name V, 0 [symbolic = %V.loc13_10.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc13_10.2: %J_where.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc13_10.2: %pattern_type.d2b = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @And(%W.loc15_8.1: %I_where.type.427) { // CHECK:STDOUT: %W.loc15_8.2: %I_where.type.427 = bind_symbolic_name W, 0 [symbolic = %W.loc15_8.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc15_8.2: %I_where.type.427 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc15_8.2: %pattern_type.127 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -324,7 +327,8 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0 [symbolic_self] // CHECK:STDOUT: %K_where.type: type = facet_type <@K where TODO> [concrete] // CHECK:STDOUT: %W: %K_where.type = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: %K_where.type = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %K_where.type [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %AssociatedTypeImpls.type: type = fn_type @AssociatedTypeImpls [concrete] // CHECK:STDOUT: %AssociatedTypeImpls: %AssociatedTypeImpls.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -349,7 +353,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %M.decl: type = interface_decl @M [concrete = constants.%M.type] {} {} // CHECK:STDOUT: %K.decl: type = interface_decl @K [concrete = constants.%K.type] {} {} // CHECK:STDOUT: %AssociatedTypeImpls.decl: %AssociatedTypeImpls.type = fn_decl @AssociatedTypeImpls [concrete = constants.%AssociatedTypeImpls] { -// CHECK:STDOUT: %W.patt.loc11_24.1: %K_where.type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc11_24.1: %pattern_type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_30.1: type = splice_block %.loc11_30.2 [concrete = constants.%K_where.type] { // CHECK:STDOUT: %K.ref: type = name_ref K, file.%K.decl [concrete = constants.%K.type] @@ -405,7 +409,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @AssociatedTypeImpls(%W.loc11_24.1: %K_where.type) { // CHECK:STDOUT: %W.loc11_24.2: %K_where.type = bind_symbolic_name W, 0 [symbolic = %W.loc11_24.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc11_24.2: %K_where.type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc11_24.2: %pattern_type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -426,7 +430,8 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete] // CHECK:STDOUT: %type_where: type = facet_type [concrete] // CHECK:STDOUT: %U: %type_where = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %type_where = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.344: type = pattern_type %type_where [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %NonTypeImpls.type: type = fn_type @NonTypeImpls [concrete] // CHECK:STDOUT: %NonTypeImpls: %NonTypeImpls.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -446,7 +451,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %NonTypeImpls.decl: %NonTypeImpls.type = fn_decl @NonTypeImpls [concrete = constants.%NonTypeImpls] { -// CHECK:STDOUT: %U.patt.loc11_17.1: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc11_17.1: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_26.1: type = splice_block %.loc11_26.2 [concrete = constants.%type_where] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -462,7 +467,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @NonTypeImpls(%U.loc11_17.1: %type_where) { // CHECK:STDOUT: %U.loc11_17.2: %type_where = bind_symbolic_name U, 0 [symbolic = %U.loc11_17.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc11_17.2: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc11_17.2: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -479,7 +484,8 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [concrete] // CHECK:STDOUT: %type_where: type = facet_type [concrete] // CHECK:STDOUT: %U: %type_where = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %type_where = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.344: type = pattern_type %type_where [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %ImplsNonType.type: type = fn_type @ImplsNonType [concrete] // CHECK:STDOUT: %ImplsNonType: %ImplsNonType.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -499,7 +505,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ImplsNonType.decl: %ImplsNonType.type = fn_decl @ImplsNonType [concrete = constants.%ImplsNonType] { -// CHECK:STDOUT: %U.patt.loc11_17.1: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc11_17.1: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_26.1: type = splice_block %.loc11_26.2 [concrete = constants.%type_where] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -516,7 +522,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ImplsNonType(%U.loc11_17.1: %type_where) { // CHECK:STDOUT: %U.loc11_17.2: %type_where = bind_symbolic_name U, 0 [symbolic = %U.loc11_17.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc11_17.2: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc11_17.2: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -534,7 +540,8 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %type_where: type = facet_type [concrete] // CHECK:STDOUT: %U: %type_where = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %type_where = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.344: type = pattern_type %type_where [concrete] +// CHECK:STDOUT: %U.patt: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %ImplsOfNonFacetType.type: type = fn_type @ImplsOfNonFacetType [concrete] // CHECK:STDOUT: %ImplsOfNonFacetType: %ImplsOfNonFacetType.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -554,7 +561,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %ImplsOfNonFacetType.decl: %ImplsOfNonFacetType.type = fn_decl @ImplsOfNonFacetType [concrete = constants.%ImplsOfNonFacetType] { -// CHECK:STDOUT: %U.patt.loc8_24.1: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_24.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc8_24.1: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_24.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_33.1: type = splice_block %.loc8_33.2 [concrete = constants.%type_where] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -571,7 +578,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ImplsOfNonFacetType(%U.loc8_24.1: %type_where) { // CHECK:STDOUT: %U.loc8_24.2: %type_where = bind_symbolic_name U, 0 [symbolic = %U.loc8_24.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc8_24.2: %type_where = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_24.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc8_24.2: %pattern_type.344 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_24.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -594,7 +601,8 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %Impls.type: type = fn_type @Impls [concrete] // CHECK:STDOUT: %Impls: %Impls.type = struct_value () [concrete] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where .Self impls @I> [concrete] -// CHECK:STDOUT: %V.patt: %J_where.type = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %J_where.type [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %V: %J_where.type = bind_symbolic_name V, 0 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -677,7 +685,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Impls(imports.%Main.import_ref.d1a: %J_where.type) [from "state_constraints.carbon"] { // CHECK:STDOUT: %V: %J_where.type = bind_symbolic_name V, 0 [symbolic = %V (constants.%V)] -// CHECK:STDOUT: %V.patt: %J_where.type = symbolic_binding_pattern V, 0 [symbolic = %V.patt (constants.%V.patt)] +// CHECK:STDOUT: %V.patt: %pattern_type = symbolic_binding_pattern V, 0 [symbolic = %V.patt (constants.%V.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -698,7 +706,8 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where TODO> [concrete] // CHECK:STDOUT: %Y: %J_where.type = bind_symbolic_name Y, 0 [symbolic] -// CHECK:STDOUT: %Y.patt: %J_where.type = symbolic_binding_pattern Y, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %J_where.type [concrete] +// CHECK:STDOUT: %Y.patt: %pattern_type = symbolic_binding_pattern Y, 0 [symbolic] // CHECK:STDOUT: %EmptyStruct.type: type = fn_type @EmptyStruct [concrete] // CHECK:STDOUT: %EmptyStruct: %EmptyStruct.type = struct_value () [concrete] // CHECK:STDOUT: %NotEmptyStruct.type: type = fn_type @NotEmptyStruct [concrete] @@ -740,7 +749,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: %J.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %J.impl_witness: = impl_witness %J.impl_witness_table [concrete = constants.%J.impl_witness] // CHECK:STDOUT: %EmptyStruct.decl: %EmptyStruct.type = fn_decl @EmptyStruct [concrete = constants.%EmptyStruct] { -// CHECK:STDOUT: %Y.patt.loc9_16.1: %J_where.type = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc9_16.2 (constants.%Y.patt)] +// CHECK:STDOUT: %Y.patt.loc9_16.1: %pattern_type = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc9_16.2 (constants.%Y.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_22.1: type = splice_block %.loc9_22.2 [concrete = constants.%J_where.type] { // CHECK:STDOUT: %J.ref: type = name_ref J, imports.%Main.J [concrete = constants.%J.type] @@ -778,7 +787,7 @@ fn NotEmptyStruct() { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @EmptyStruct(%Y.loc9_16.1: %J_where.type) { // CHECK:STDOUT: %Y.loc9_16.2: %J_where.type = bind_symbolic_name Y, 0 [symbolic = %Y.loc9_16.2 (constants.%Y)] -// CHECK:STDOUT: %Y.patt.loc9_16.2: %J_where.type = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc9_16.2 (constants.%Y.patt)] +// CHECK:STDOUT: %Y.patt.loc9_16.2: %pattern_type = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc9_16.2 (constants.%Y.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/where_expr/designator.carbon b/toolchain/check/testdata/where_expr/designator.carbon index 55375324b8b9..07c6642676c5 100644 --- a/toolchain/check/testdata/where_expr/designator.carbon +++ b/toolchain/check/testdata/where_expr/designator.carbon @@ -98,7 +98,8 @@ class D { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [concrete] // CHECK:STDOUT: %T: %I_where.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I_where.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.f03: type = pattern_type %I_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.f03 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %PeriodSelf.type: type = fn_type @PeriodSelf [concrete] // CHECK:STDOUT: %PeriodSelf: %PeriodSelf.type = struct_value () [concrete] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.258 [symbolic_self] @@ -106,13 +107,14 @@ class D { // CHECK:STDOUT: %I.facet: %I.type = facet_value %.Self.as_type, (%I.lookup_impl_witness) [symbolic_self] // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self] // CHECK:STDOUT: %U: %I_where.type = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %I_where.type = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %U.patt: %pattern_type.f03 = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %PeriodMember.type: type = fn_type @PeriodMember [concrete] // CHECK:STDOUT: %PeriodMember: %PeriodMember.type = struct_value () [concrete] // CHECK:STDOUT: %.Self.644: type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %type_where: type = facet_type [concrete] // CHECK:STDOUT: %V: %type_where = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %type_where = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.2b5: type = pattern_type %type_where [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.2b5 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %TypeSelfImpls.type: type = fn_type @TypeSelfImpls [concrete] // CHECK:STDOUT: %TypeSelfImpls: %TypeSelfImpls.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -135,7 +137,7 @@ class D { // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %PeriodSelf.decl: %PeriodSelf.type = fn_decl @PeriodSelf [concrete = constants.%PeriodSelf] { -// CHECK:STDOUT: %T.patt.loc8_15.1: %I_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_15.1: %pattern_type.f03 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_21.1: type = splice_block %.loc8_21.2 [concrete = constants.%I_where.type] { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -149,7 +151,7 @@ class D { // CHECK:STDOUT: %T.loc8_15.1: %I_where.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %PeriodMember.decl: %PeriodMember.type = fn_decl @PeriodMember [concrete = constants.%PeriodMember] { -// CHECK:STDOUT: %U.patt.loc10_17.1: %I_where.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc10_17.1: %pattern_type.f03 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_23.1: type = splice_block %.loc10_23.2 [concrete = constants.%I_where.type] { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -167,7 +169,7 @@ class D { // CHECK:STDOUT: %U.loc10_17.1: %I_where.type = bind_symbolic_name U, 0 [symbolic = %U.loc10_17.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %TypeSelfImpls.decl: %TypeSelfImpls.type = fn_decl @TypeSelfImpls [concrete = constants.%TypeSelfImpls] { -// CHECK:STDOUT: %V.patt.loc12_18.1: %type_where = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc12_18.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc12_18.1: %pattern_type.2b5 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc12_18.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc12_27.1: type = splice_block %.loc12_27.2 [concrete = constants.%type_where] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self.644] @@ -199,21 +201,21 @@ class D { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @PeriodSelf(%T.loc8_15.1: %I_where.type) { // CHECK:STDOUT: %T.loc8_15.2: %I_where.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_15.2: %I_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_15.2: %pattern_type.f03 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @PeriodMember(%U.loc10_17.1: %I_where.type) { // CHECK:STDOUT: %U.loc10_17.2: %I_where.type = bind_symbolic_name U, 0 [symbolic = %U.loc10_17.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc10_17.2: %I_where.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc10_17.2: %pattern_type.f03 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TypeSelfImpls(%V.loc12_18.1: %type_where) { // CHECK:STDOUT: %V.loc12_18.2: %type_where = bind_symbolic_name V, 0 [symbolic = %V.loc12_18.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc12_18.2: %type_where = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc12_18.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc12_18.2: %pattern_type.2b5 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc12_18.2 (constants.%V.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -311,6 +313,7 @@ class D { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -329,8 +332,8 @@ class D { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc4_14.2: type = converted %.loc4_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -342,8 +345,8 @@ class D { // CHECK:STDOUT: fn @Foo() -> %empty_tuple.type { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %empty_tuple.type = binding_pattern x -// CHECK:STDOUT: %.loc5_3: %empty_tuple.type = var_pattern %x.patt +// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x +// CHECK:STDOUT: %.loc5_3: %pattern_type = var_pattern %x.patt // CHECK:STDOUT: } // CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x // CHECK:STDOUT: %.loc5_11.1: type = splice_block %.loc5_11.3 [concrete = constants.%empty_tuple.type] { @@ -360,6 +363,7 @@ class D { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %Bar.type: type = fn_type @Bar [concrete] // CHECK:STDOUT: %Bar: %Bar.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -378,8 +382,8 @@ class D { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Bar.decl: %Bar.type = fn_decl @Bar [concrete = constants.%Bar] { -// CHECK:STDOUT: %return.patt: %empty_tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %empty_tuple.type = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4_14.1: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc4_14.2: type = converted %.loc4_14.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] @@ -399,6 +403,7 @@ class D { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] @@ -423,8 +428,8 @@ class D { // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: %C = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %C = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] // CHECK:STDOUT: %return.param: ref %C = out_param call_param0 diff --git a/toolchain/check/testdata/where_expr/dot_self_index.carbon b/toolchain/check/testdata/where_expr/dot_self_index.carbon index c1d101c09bbf..c0fda342da8f 100644 --- a/toolchain/check/testdata/where_expr/dot_self_index.carbon +++ b/toolchain/check/testdata/where_expr/dot_self_index.carbon @@ -25,7 +25,8 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %W: type = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: type = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type.98f = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %Empty.type.d5a: type = generic_interface_type @Empty [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Empty.generic: %Empty.type.d5a = struct_value () [concrete] @@ -34,7 +35,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %Empty.assoc_type.3cf698.1: type = assoc_entity_type @Empty, @Empty(%W) [symbolic] // CHECK:STDOUT: %assoc0.3715ce.1: %Empty.assoc_type.3cf698.1 = assoc_entity element0, @Empty.%A [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Empty.type.3e5fde.2: type = facet_type <@Empty, @Empty(%T)> [symbolic] // CHECK:STDOUT: %.Self.c95: %Empty.type.3e5fde.2 = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %Self.8c5170.2: %Empty.type.3e5fde.2 = bind_symbolic_name Self, 1 [symbolic] @@ -47,8 +48,9 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %impl.elem0.c6e: type = impl_witness_access %Empty.lookup_impl_witness.b1d, element0 [symbolic] // CHECK:STDOUT: %ptr.79f: type = ptr_type %T [symbolic] // CHECK:STDOUT: %Empty_where.type.b73: type = facet_type <@Empty, @Empty(%T) where %impl.elem0.c6e = %ptr.79f> [symbolic] +// CHECK:STDOUT: %pattern_type.668: type = pattern_type %Empty_where.type.b73 [symbolic] // CHECK:STDOUT: %V: type = bind_symbolic_name V, 1 [symbolic] -// CHECK:STDOUT: %V.patt: type = symbolic_binding_pattern V, 1 [symbolic] +// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 1 [symbolic] // CHECK:STDOUT: %H.type: type = fn_type @H [concrete] // CHECK:STDOUT: %H: %H.type = struct_value () [concrete] // CHECK:STDOUT: %require_complete.af8: = require_complete_type %Empty_where.type.b73 [symbolic] @@ -65,6 +67,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %impl.elem0.64a: type = impl_witness_access %Empty.lookup_impl_witness.4e3, element0 [symbolic_self] // CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete] // CHECK:STDOUT: %Empty_where.type.fc2: type = facet_type <@Empty, @Empty(%i32) where %impl.elem0.64a = %ptr.235> [concrete] +// CHECK:STDOUT: %pattern_type.012: type = pattern_type %Empty_where.type.fc2 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] @@ -92,15 +95,15 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Empty.decl: %Empty.type.d5a = interface_decl @Empty [concrete = constants.%Empty.generic] { -// CHECK:STDOUT: %W.patt.loc11_17.1: type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_17.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc11_17.1: %pattern_type.98f = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_17.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %W.loc11_17.1: type = bind_symbolic_name W, 0 [symbolic = %W.loc11_17.2 (constants.%W)] // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %T.patt.loc18_6.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_6.2 (constants.%T.patt)] -// CHECK:STDOUT: %U.patt: @H.%Empty_where.type (%Empty_where.type.b73) = binding_pattern U -// CHECK:STDOUT: %U.param_patt: @H.%Empty_where.type (%Empty_where.type.b73) = value_param_pattern %U.patt, call_param0 -// CHECK:STDOUT: %V.patt.loc18_43.1: type = symbolic_binding_pattern V, 1 [symbolic = %V.patt.loc18_43.2 (constants.%V.patt)] +// CHECK:STDOUT: %T.patt.loc18_6.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt: @H.%pattern_type (%pattern_type.668) = binding_pattern U +// CHECK:STDOUT: %U.param_patt: @H.%pattern_type (%pattern_type.668) = value_param_pattern %U.patt, call_param0 +// CHECK:STDOUT: %V.patt.loc18_43.1: %pattern_type.98f = symbolic_binding_pattern V, 1 [symbolic = %V.patt.loc18_43.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %T.loc18_6.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc18_6.2 (constants.%T)] // CHECK:STDOUT: %U.param: @H.%Empty_where.type (%Empty_where.type.b73) = value_param call_param0 @@ -125,8 +128,8 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %V.loc18_43.1: type = bind_symbolic_name V, 1 [symbolic = %V.loc18_43.2 (constants.%V)] // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %U.patt: %Empty_where.type.fc2 = binding_pattern U -// CHECK:STDOUT: %U.param_patt: %Empty_where.type.fc2 = value_param_pattern %U.patt, call_param0 +// CHECK:STDOUT: %U.patt: %pattern_type.012 = binding_pattern U +// CHECK:STDOUT: %U.param_patt: %pattern_type.012 = value_param_pattern %U.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.param: %Empty_where.type.fc2 = value_param call_param0 // CHECK:STDOUT: %.loc20_20.1: type = splice_block %.loc20_20.2 [concrete = constants.%Empty_where.type.fc2] { @@ -154,7 +157,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Empty(%W.loc11_17.1: type) { // CHECK:STDOUT: %W.loc11_17.2: type = bind_symbolic_name W, 0 [symbolic = %W.loc11_17.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc11_17.2: type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_17.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc11_17.2: %pattern_type.98f = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_17.2 (constants.%W.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Empty.type: type = facet_type <@Empty, @Empty(%W.loc11_17.2)> [symbolic = %Empty.type (constants.%Empty.type.3e5fde.1)] @@ -181,7 +184,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: // CHECK:STDOUT: generic fn @H(%T.loc18_6.1: type, %V.loc18_43.1: type) { // CHECK:STDOUT: %T.loc18_6.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc18_6.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc18_6.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc18_6.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_6.2 (constants.%T.patt)] // CHECK:STDOUT: %Empty.type.loc18_26.2: type = facet_type <@Empty, @Empty(%T.loc18_6.2)> [symbolic = %Empty.type.loc18_26.2 (constants.%Empty.type.3e5fde.2)] // CHECK:STDOUT: %.Self.2: @H.%Empty.type.loc18_26.2 (%Empty.type.3e5fde.2) = bind_symbolic_name .Self [symbolic = %.Self.2 (constants.%.Self.c95)] // CHECK:STDOUT: %require_complete.loc18_34: = require_complete_type %Empty.type.loc18_26.2 [symbolic = %require_complete.loc18_34 (constants.%require_complete.22f)] @@ -192,8 +195,9 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %impl.elem0.loc18_34.2: type = impl_witness_access %Empty.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc18_34.2 (constants.%impl.elem0.c6e)] // CHECK:STDOUT: %ptr.loc18_40.2: type = ptr_type %T.loc18_6.2 [symbolic = %ptr.loc18_40.2 (constants.%ptr.79f)] // CHECK:STDOUT: %Empty_where.type: type = facet_type <@Empty, @Empty(%T.loc18_6.2) where %impl.elem0.loc18_34.2 = %ptr.loc18_40.2> [symbolic = %Empty_where.type (constants.%Empty_where.type.b73)] +// CHECK:STDOUT: %pattern_type: type = pattern_type %Empty_where.type [symbolic = %pattern_type (constants.%pattern_type.668)] // CHECK:STDOUT: %V.loc18_43.2: type = bind_symbolic_name V, 1 [symbolic = %V.loc18_43.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc18_43.2: type = symbolic_binding_pattern V, 1 [symbolic = %V.patt.loc18_43.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc18_43.2: %pattern_type.98f = symbolic_binding_pattern V, 1 [symbolic = %V.patt.loc18_43.2 (constants.%V.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc18_17: = require_complete_type %Empty_where.type [symbolic = %require_complete.loc18_17 (constants.%require_complete.af8)] @@ -253,6 +257,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %impl.elem0.loc18_34.2 => constants.%impl.elem0.c6e // CHECK:STDOUT: %ptr.loc18_40.2 => constants.%ptr.79f // CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.b73 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.668 // CHECK:STDOUT: %V.loc18_43.2 => constants.%V // CHECK:STDOUT: %V.patt.loc18_43.2 => constants.%V.patt // CHECK:STDOUT: } @@ -285,6 +290,7 @@ fn G(U: Empty(i32) where .A = i32*) { // CHECK:STDOUT: %impl.elem0.loc18_34.2 => constants.%impl.elem0.64a // CHECK:STDOUT: %ptr.loc18_40.2 => constants.%ptr.235 // CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.fc2 +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.012 // CHECK:STDOUT: %V.loc18_43.2 => bool // CHECK:STDOUT: %V.patt.loc18_43.2 => constants.%V.patt // CHECK:STDOUT: diff --git a/toolchain/check/testdata/where_expr/equal_rewrite.carbon b/toolchain/check/testdata/where_expr/equal_rewrite.carbon index 1a95cb5b2aa1..29c0974b718c 100644 --- a/toolchain/check/testdata/where_expr/equal_rewrite.carbon +++ b/toolchain/check/testdata/where_expr/equal_rewrite.carbon @@ -212,7 +212,8 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %N_where.type: type = facet_type <@N where %impl.elem0 = %empty_struct_type> [concrete] // CHECK:STDOUT: %T: %N_where.type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %N_where.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type: type = pattern_type %N_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -233,7 +234,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %N.decl: type = interface_decl @N [concrete = constants.%N.type] {} {} // CHECK:STDOUT: %Equal.decl: %Equal.type = fn_decl @Equal [concrete = constants.%Equal] { -// CHECK:STDOUT: %T.patt.loc8_10.1: %N_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_10.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_16.1: type = splice_block %.loc8_16.2 [concrete = constants.%N_where.type] { // CHECK:STDOUT: %N.ref: type = name_ref N, file.%N.decl [concrete = constants.%N.type] @@ -271,7 +272,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Equal(%T.loc8_10.1: %N_where.type) { // CHECK:STDOUT: %T.loc8_10.2: %N_where.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_10.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_10.2: %N_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] +// CHECK:STDOUT: %T.patt.loc8_10.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -309,7 +310,8 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %impl.elem1: type = impl_witness_access %A.lookup_impl_witness.138, element1 [symbolic_self] // CHECK:STDOUT: %A_where.type.2d0: type = facet_type <@A where %impl.elem0 = bool and %impl.elem1 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %D: %A_where.type.2d0 = bind_symbolic_name D, 0 [symbolic] -// CHECK:STDOUT: %D.patt: %A_where.type.2d0 = symbolic_binding_pattern D, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.24c: type = pattern_type %A_where.type.2d0 [concrete] +// CHECK:STDOUT: %D.patt: %pattern_type.24c = symbolic_binding_pattern D, 0 [symbolic] // CHECK:STDOUT: %NestedRewrite.type: type = fn_type @NestedRewrite [concrete] // CHECK:STDOUT: %NestedRewrite: %NestedRewrite.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -331,7 +333,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: type = interface_decl @A [concrete = constants.%A.type] {} {} // CHECK:STDOUT: %NestedRewrite.decl: %NestedRewrite.type = fn_decl @NestedRewrite [concrete = constants.%NestedRewrite] { -// CHECK:STDOUT: %D.patt.loc9_18.1: %A_where.type.2d0 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc9_18.2 (constants.%D.patt)] +// CHECK:STDOUT: %D.patt.loc9_18.1: %pattern_type.24c = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc9_18.2 (constants.%D.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_42.1: type = splice_block %.loc9_42.2 [concrete = constants.%A_where.type.2d0] { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A.type] @@ -389,7 +391,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @NestedRewrite(%D.loc9_18.1: %A_where.type.2d0) { // CHECK:STDOUT: %D.loc9_18.2: %A_where.type.2d0 = bind_symbolic_name D, 0 [symbolic = %D.loc9_18.2 (constants.%D)] -// CHECK:STDOUT: %D.patt.loc9_18.2: %A_where.type.2d0 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc9_18.2 (constants.%D.patt)] +// CHECK:STDOUT: %D.patt.loc9_18.2: %pattern_type.24c = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc9_18.2 (constants.%D.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -424,16 +426,17 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %E_where.type: type = facet_type <@E where %impl.elem0 = %i32> [concrete] // CHECK:STDOUT: %G: %E_where.type = bind_symbolic_name G, 0 [symbolic] -// CHECK:STDOUT: %G.patt: %E_where.type = symbolic_binding_pattern G, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.c64: type = pattern_type %E_where.type [concrete] +// CHECK:STDOUT: %G.patt: %pattern_type.c64 = symbolic_binding_pattern G, 0 [symbolic] // CHECK:STDOUT: %OneRewrite.type: type = fn_type @OneRewrite [concrete] // CHECK:STDOUT: %OneRewrite: %OneRewrite.type = struct_value () [concrete] // CHECK:STDOUT: %H: %E_where.type = bind_symbolic_name H, 0 [symbolic] -// CHECK:STDOUT: %H.patt: %E_where.type = symbolic_binding_pattern H, 0 [symbolic] +// CHECK:STDOUT: %H.patt: %pattern_type.c64 = symbolic_binding_pattern H, 0 [symbolic] // CHECK:STDOUT: %RepeatedRewrite.type: type = fn_type @RepeatedRewrite [concrete] // CHECK:STDOUT: %RepeatedRewrite: %RepeatedRewrite.type = struct_value () [concrete] // CHECK:STDOUT: %OneRewrite.specific_fn.7fa5d5.1: = specific_function %OneRewrite, @OneRewrite(%H) [symbolic] // CHECK:STDOUT: %I: %E_where.type = bind_symbolic_name I, 0 [symbolic] -// CHECK:STDOUT: %I.patt: %E_where.type = symbolic_binding_pattern I, 0 [symbolic] +// CHECK:STDOUT: %I.patt: %pattern_type.c64 = symbolic_binding_pattern I, 0 [symbolic] // CHECK:STDOUT: %OneRewriteAgain.type: type = fn_type @OneRewriteAgain [concrete] // CHECK:STDOUT: %OneRewriteAgain: %OneRewriteAgain.type = struct_value () [concrete] // CHECK:STDOUT: %RepeatedRewrite.specific_fn: = specific_function %RepeatedRewrite, @RepeatedRewrite(%I) [symbolic] @@ -459,7 +462,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %E.decl: type = interface_decl @E [concrete = constants.%E.type] {} {} // CHECK:STDOUT: %OneRewrite.decl: %OneRewrite.type = fn_decl @OneRewrite [concrete = constants.%OneRewrite] { -// CHECK:STDOUT: %G.patt.loc8_15.1: %E_where.type = symbolic_binding_pattern G, 0 [symbolic = %G.patt.loc8_15.2 (constants.%G.patt)] +// CHECK:STDOUT: %G.patt.loc8_15.1: %pattern_type.c64 = symbolic_binding_pattern G, 0 [symbolic = %G.patt.loc8_15.2 (constants.%G.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_21.1: type = splice_block %.loc8_21.2 [concrete = constants.%E_where.type] { // CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [concrete = constants.%E.type] @@ -478,7 +481,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %G.loc8_15.1: %E_where.type = bind_symbolic_name G, 0 [symbolic = %G.loc8_15.2 (constants.%G)] // CHECK:STDOUT: } // CHECK:STDOUT: %RepeatedRewrite.decl: %RepeatedRewrite.type = fn_decl @RepeatedRewrite [concrete = constants.%RepeatedRewrite] { -// CHECK:STDOUT: %H.patt.loc10_20.1: %E_where.type = symbolic_binding_pattern H, 0 [symbolic = %H.patt.loc10_20.2 (constants.%H.patt)] +// CHECK:STDOUT: %H.patt.loc10_20.1: %pattern_type.c64 = symbolic_binding_pattern H, 0 [symbolic = %H.patt.loc10_20.2 (constants.%H.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_26.1: type = splice_block %.loc10_26.2 [concrete = constants.%E_where.type] { // CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [concrete = constants.%E.type] @@ -505,7 +508,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %H.loc10_20.1: %E_where.type = bind_symbolic_name H, 0 [symbolic = %H.loc10_20.2 (constants.%H)] // CHECK:STDOUT: } // CHECK:STDOUT: %OneRewriteAgain.decl: %OneRewriteAgain.type = fn_decl @OneRewriteAgain [concrete = constants.%OneRewriteAgain] { -// CHECK:STDOUT: %I.patt.loc14_20.1: %E_where.type = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc14_20.2 (constants.%I.patt)] +// CHECK:STDOUT: %I.patt.loc14_20.1: %pattern_type.c64 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc14_20.2 (constants.%I.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc14_26.1: type = splice_block %.loc14_26.2 [concrete = constants.%E_where.type] { // CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [concrete = constants.%E.type] @@ -543,7 +546,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @OneRewrite(%G.loc8_15.1: %E_where.type) { // CHECK:STDOUT: %G.loc8_15.2: %E_where.type = bind_symbolic_name G, 0 [symbolic = %G.loc8_15.2 (constants.%G)] -// CHECK:STDOUT: %G.patt.loc8_15.2: %E_where.type = symbolic_binding_pattern G, 0 [symbolic = %G.patt.loc8_15.2 (constants.%G.patt)] +// CHECK:STDOUT: %G.patt.loc8_15.2: %pattern_type.c64 = symbolic_binding_pattern G, 0 [symbolic = %G.patt.loc8_15.2 (constants.%G.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -555,7 +558,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @RepeatedRewrite(%H.loc10_20.1: %E_where.type) { // CHECK:STDOUT: %H.loc10_20.2: %E_where.type = bind_symbolic_name H, 0 [symbolic = %H.loc10_20.2 (constants.%H)] -// CHECK:STDOUT: %H.patt.loc10_20.2: %E_where.type = symbolic_binding_pattern H, 0 [symbolic = %H.patt.loc10_20.2 (constants.%H.patt)] +// CHECK:STDOUT: %H.patt.loc10_20.2: %pattern_type.c64 = symbolic_binding_pattern H, 0 [symbolic = %H.patt.loc10_20.2 (constants.%H.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %OneRewrite.specific_fn.loc11_3.2: = specific_function constants.%OneRewrite, @OneRewrite(%H.loc10_20.2) [symbolic = %OneRewrite.specific_fn.loc11_3.2 (constants.%OneRewrite.specific_fn.7fa5d5.1)] @@ -572,7 +575,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @OneRewriteAgain(%I.loc14_20.1: %E_where.type) { // CHECK:STDOUT: %I.loc14_20.2: %E_where.type = bind_symbolic_name I, 0 [symbolic = %I.loc14_20.2 (constants.%I)] -// CHECK:STDOUT: %I.patt.loc14_20.2: %E_where.type = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc14_20.2 (constants.%I.patt)] +// CHECK:STDOUT: %I.patt.loc14_20.2: %pattern_type.c64 = symbolic_binding_pattern I, 0 [symbolic = %I.patt.loc14_20.2 (constants.%I.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %RepeatedRewrite.specific_fn.loc15_3.2: = specific_function constants.%RepeatedRewrite, @RepeatedRewrite(%I.loc14_20.2) [symbolic = %RepeatedRewrite.specific_fn.loc15_3.2 (constants.%RepeatedRewrite.specific_fn)] @@ -651,11 +654,12 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %J_where.type: type = facet_type <@J where %impl.elem0 = %empty_tuple.type and %impl.elem1 = bool> [concrete] // CHECK:STDOUT: %M: %J_where.type = bind_symbolic_name M, 0 [symbolic] -// CHECK:STDOUT: %M.patt: %J_where.type = symbolic_binding_pattern M, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.49f: type = pattern_type %J_where.type [concrete] +// CHECK:STDOUT: %M.patt: %pattern_type.49f = symbolic_binding_pattern M, 0 [symbolic] // CHECK:STDOUT: %Alphabetical.type: type = fn_type @Alphabetical [concrete] // CHECK:STDOUT: %Alphabetical: %Alphabetical.type = struct_value () [concrete] // CHECK:STDOUT: %N: %J_where.type = bind_symbolic_name N, 0 [symbolic] -// CHECK:STDOUT: %N.patt: %J_where.type = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %N.patt: %pattern_type.49f = symbolic_binding_pattern N, 0 [symbolic] // CHECK:STDOUT: %Reversed.type: type = fn_type @Reversed [concrete] // CHECK:STDOUT: %Reversed: %Reversed.type = struct_value () [concrete] // CHECK:STDOUT: %Alphabetical.specific_fn: = specific_function %Alphabetical, @Alphabetical(%N) [symbolic] @@ -679,7 +683,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {} // CHECK:STDOUT: %Alphabetical.decl: %Alphabetical.type = fn_decl @Alphabetical [concrete = constants.%Alphabetical] { -// CHECK:STDOUT: %M.patt.loc9_17.1: %J_where.type = symbolic_binding_pattern M, 0 [symbolic = %M.patt.loc9_17.2 (constants.%M.patt)] +// CHECK:STDOUT: %M.patt.loc9_17.1: %pattern_type.49f = symbolic_binding_pattern M, 0 [symbolic = %M.patt.loc9_17.2 (constants.%M.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_23.1: type = splice_block %.loc9_23.2 [concrete = constants.%J_where.type] { // CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type] @@ -707,7 +711,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %M.loc9_17.1: %J_where.type = bind_symbolic_name M, 0 [symbolic = %M.loc9_17.2 (constants.%M)] // CHECK:STDOUT: } // CHECK:STDOUT: %Reversed.decl: %Reversed.type = fn_decl @Reversed [concrete = constants.%Reversed] { -// CHECK:STDOUT: %N.patt.loc11_13.1: %J_where.type = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc11_13.1: %pattern_type.49f = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_19.1: type = splice_block %.loc11_19.2 [concrete = constants.%J_where.type] { // CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type] @@ -762,7 +766,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Alphabetical(%M.loc9_17.1: %J_where.type) { // CHECK:STDOUT: %M.loc9_17.2: %J_where.type = bind_symbolic_name M, 0 [symbolic = %M.loc9_17.2 (constants.%M)] -// CHECK:STDOUT: %M.patt.loc9_17.2: %J_where.type = symbolic_binding_pattern M, 0 [symbolic = %M.patt.loc9_17.2 (constants.%M.patt)] +// CHECK:STDOUT: %M.patt.loc9_17.2: %pattern_type.49f = symbolic_binding_pattern M, 0 [symbolic = %M.patt.loc9_17.2 (constants.%M.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -774,7 +778,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Reversed(%N.loc11_13.1: %J_where.type) { // CHECK:STDOUT: %N.loc11_13.2: %J_where.type = bind_symbolic_name N, 0 [symbolic = %N.loc11_13.2 (constants.%N)] -// CHECK:STDOUT: %N.patt.loc11_13.2: %J_where.type = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc11_13.2: %pattern_type.49f = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Alphabetical.specific_fn.loc12_3.2: = specific_function constants.%Alphabetical, @Alphabetical(%N.loc11_13.2) [symbolic = %Alphabetical.specific_fn.loc12_3.2 (constants.%Alphabetical.specific_fn)] @@ -833,14 +837,16 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %O_where.type.e27: type = facet_type <@O where %impl.elem0 = %i32> [concrete] // CHECK:STDOUT: %Q: %O_where.type.e27 = bind_symbolic_name Q, 0 [symbolic] -// CHECK:STDOUT: %Q.patt: %O_where.type.e27 = symbolic_binding_pattern Q, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7eb: type = pattern_type %O_where.type.e27 [concrete] +// CHECK:STDOUT: %Q.patt: %pattern_type.7eb = symbolic_binding_pattern Q, 0 [symbolic] // CHECK:STDOUT: %WithInteger.type: type = fn_type @WithInteger [concrete] // CHECK:STDOUT: %WithInteger: %WithInteger.type = struct_value () [concrete] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %O_where.type.e45: type = facet_type <@O where %impl.elem0 = bool> [concrete] // CHECK:STDOUT: %R: %O_where.type.e45 = bind_symbolic_name R, 0 [symbolic] -// CHECK:STDOUT: %R.patt: %O_where.type.e45 = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.9d2: type = pattern_type %O_where.type.e45 [concrete] +// CHECK:STDOUT: %R.patt: %pattern_type.9d2 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %WithBool.type: type = fn_type @WithBool [concrete] // CHECK:STDOUT: %WithBool: %WithBool.type = struct_value () [concrete] // CHECK:STDOUT: %O.lookup_impl_witness.c41: = lookup_impl_witness %R, @O [symbolic] @@ -868,7 +874,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %O.decl: type = interface_decl @O [concrete = constants.%O.type] {} {} // CHECK:STDOUT: %WithInteger.decl: %WithInteger.type = fn_decl @WithInteger [concrete = constants.%WithInteger] { -// CHECK:STDOUT: %Q.patt.loc8_16.1: %O_where.type.e27 = symbolic_binding_pattern Q, 0 [symbolic = %Q.patt.loc8_16.2 (constants.%Q.patt)] +// CHECK:STDOUT: %Q.patt.loc8_16.1: %pattern_type.7eb = symbolic_binding_pattern Q, 0 [symbolic = %Q.patt.loc8_16.2 (constants.%Q.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc8_22.1: type = splice_block %.loc8_22.2 [concrete = constants.%O_where.type.e27] { // CHECK:STDOUT: %O.ref: type = name_ref O, file.%O.decl [concrete = constants.%O.type] @@ -887,7 +893,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Q.loc8_16.1: %O_where.type.e27 = bind_symbolic_name Q, 0 [symbolic = %Q.loc8_16.2 (constants.%Q)] // CHECK:STDOUT: } // CHECK:STDOUT: %WithBool.decl: %WithBool.type = fn_decl @WithBool [concrete = constants.%WithBool] { -// CHECK:STDOUT: %R.patt.loc10_13.1: %O_where.type.e45 = symbolic_binding_pattern R, 0 [symbolic = %R.patt.loc10_13.2 (constants.%R.patt)] +// CHECK:STDOUT: %R.patt.loc10_13.1: %pattern_type.9d2 = symbolic_binding_pattern R, 0 [symbolic = %R.patt.loc10_13.2 (constants.%R.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc10_19.1: type = splice_block %.loc10_19.2 [concrete = constants.%O_where.type.e45] { // CHECK:STDOUT: %O.ref: type = name_ref O, file.%O.decl [concrete = constants.%O.type] @@ -926,7 +932,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WithInteger(%Q.loc8_16.1: %O_where.type.e27) { // CHECK:STDOUT: %Q.loc8_16.2: %O_where.type.e27 = bind_symbolic_name Q, 0 [symbolic = %Q.loc8_16.2 (constants.%Q)] -// CHECK:STDOUT: %Q.patt.loc8_16.2: %O_where.type.e27 = symbolic_binding_pattern Q, 0 [symbolic = %Q.patt.loc8_16.2 (constants.%Q.patt)] +// CHECK:STDOUT: %Q.patt.loc8_16.2: %pattern_type.7eb = symbolic_binding_pattern Q, 0 [symbolic = %Q.patt.loc8_16.2 (constants.%Q.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -938,7 +944,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WithBool(%R.loc10_13.1: %O_where.type.e45) { // CHECK:STDOUT: %R.loc10_13.2: %O_where.type.e45 = bind_symbolic_name R, 0 [symbolic = %R.loc10_13.2 (constants.%R)] -// CHECK:STDOUT: %R.patt.loc10_13.2: %O_where.type.e45 = symbolic_binding_pattern R, 0 [symbolic = %R.patt.loc10_13.2 (constants.%R.patt)] +// CHECK:STDOUT: %R.patt.loc10_13.2: %pattern_type.9d2 = symbolic_binding_pattern R, 0 [symbolic = %R.patt.loc10_13.2 (constants.%R.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %O.lookup_impl_witness: = lookup_impl_witness %R.loc10_13.2, @O [symbolic = %O.lookup_impl_witness (constants.%O.lookup_impl_witness.c41)] @@ -998,13 +1004,15 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %S_where.type.4c2: type = facet_type <@S where %impl.elem0 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %V: %S_where.type.4c2 = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %S_where.type.4c2 = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.7b9: type = pattern_type %S_where.type.4c2 [concrete] +// CHECK:STDOUT: %V.patt: %pattern_type.7b9 = symbolic_binding_pattern V, 0 [symbolic] // CHECK:STDOUT: %WithT.type: type = fn_type @WithT [concrete] // CHECK:STDOUT: %WithT: %WithT.type = struct_value () [concrete] // CHECK:STDOUT: %impl.elem1: type = impl_witness_access %S.lookup_impl_witness.ffa, element1 [symbolic_self] // CHECK:STDOUT: %S_where.type.592: type = facet_type <@S where %impl.elem1 = %empty_tuple.type> [concrete] // CHECK:STDOUT: %W: %S_where.type.592 = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: %S_where.type.592 = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.4aa: type = pattern_type %S_where.type.592 [concrete] +// CHECK:STDOUT: %W.patt: %pattern_type.4aa = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %WithU.type: type = fn_type @WithU [concrete] // CHECK:STDOUT: %WithU: %WithU.type = struct_value () [concrete] // CHECK:STDOUT: %S.lookup_impl_witness.6f2: = lookup_impl_witness %W, @S [symbolic] @@ -1030,7 +1038,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %S.decl: type = interface_decl @S [concrete = constants.%S.type] {} {} // CHECK:STDOUT: %WithT.decl: %WithT.type = fn_decl @WithT [concrete = constants.%WithT] { -// CHECK:STDOUT: %V.patt.loc9_10.1: %S_where.type.4c2 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_10.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc9_10.1: %pattern_type.7b9 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_10.2 (constants.%V.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc9_16.1: type = splice_block %.loc9_16.2 [concrete = constants.%S_where.type.4c2] { // CHECK:STDOUT: %S.ref: type = name_ref S, file.%S.decl [concrete = constants.%S.type] @@ -1049,7 +1057,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %V.loc9_10.1: %S_where.type.4c2 = bind_symbolic_name V, 0 [symbolic = %V.loc9_10.2 (constants.%V)] // CHECK:STDOUT: } // CHECK:STDOUT: %WithU.decl: %WithU.type = fn_decl @WithU [concrete = constants.%WithU] { -// CHECK:STDOUT: %W.patt.loc11_10.1: %S_where.type.592 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_10.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc11_10.1: %pattern_type.4aa = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_10.2 (constants.%W.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc11_16.1: type = splice_block %.loc11_16.2 [concrete = constants.%S_where.type.592] { // CHECK:STDOUT: %S.ref: type = name_ref S, file.%S.decl [concrete = constants.%S.type] @@ -1095,7 +1103,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WithT(%V.loc9_10.1: %S_where.type.4c2) { // CHECK:STDOUT: %V.loc9_10.2: %S_where.type.4c2 = bind_symbolic_name V, 0 [symbolic = %V.loc9_10.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc9_10.2: %S_where.type.4c2 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_10.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.patt.loc9_10.2: %pattern_type.7b9 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_10.2 (constants.%V.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: @@ -1107,7 +1115,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @WithU(%W.loc11_10.1: %S_where.type.592) { // CHECK:STDOUT: %W.loc11_10.2: %S_where.type.592 = bind_symbolic_name W, 0 [symbolic = %W.loc11_10.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc11_10.2: %S_where.type.592 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_10.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc11_10.2: %pattern_type.4aa = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_10.2 (constants.%W.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %S.lookup_impl_witness: = lookup_impl_witness %W.loc11_10.2, @S [symbolic = %S.lookup_impl_witness (constants.%S.lookup_impl_witness.6f2)] @@ -1169,7 +1177,8 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %N.lookup_impl_witness: = lookup_impl_witness %.Self.9aa, @N [symbolic_self] // CHECK:STDOUT: %impl.elem0.abf: type = impl_witness_access %N.lookup_impl_witness, element0 [symbolic_self] // CHECK:STDOUT: %N_where.type: type = facet_type <@N where %impl.elem0.abf = %empty_struct_type> [concrete] -// CHECK:STDOUT: %T.patt: %N_where.type = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.822: type = pattern_type %N_where.type [concrete] +// CHECK:STDOUT: %T.patt: %pattern_type.822 = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %T: %N_where.type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] @@ -1184,7 +1193,8 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %A.lookup_impl_witness.138: = lookup_impl_witness %.Self.60a, @A [symbolic_self] // CHECK:STDOUT: %impl.elem1: type = impl_witness_access %A.lookup_impl_witness.138, element1 [symbolic_self] // CHECK:STDOUT: %A_where.type.2d0: type = facet_type <@A where %impl.elem0.2e8 = bool and %impl.elem1 = %empty_tuple.type> [concrete] -// CHECK:STDOUT: %D.patt: %A_where.type.2d0 = symbolic_binding_pattern D, 0 [symbolic] +// CHECK:STDOUT: %pattern_type.24c: type = pattern_type %A_where.type.2d0 [concrete] +// CHECK:STDOUT: %D.patt: %pattern_type.24c = symbolic_binding_pattern D, 0 [symbolic] // CHECK:STDOUT: %D: %A_where.type.2d0 = bind_symbolic_name D, 0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] @@ -1254,14 +1264,14 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Equal.1(imports.%Main.import_ref.0bb: %N_where.type) [from "equal_constraint.carbon"] { // CHECK:STDOUT: %T: %N_where.type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] -// CHECK:STDOUT: %T.patt: %N_where.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] +// CHECK:STDOUT: %T.patt: %pattern_type.822 = symbolic_binding_pattern T, 0 [symbolic = %T.patt (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @NestedRewrite(imports.%Main.import_ref.5fe: %A_where.type.2d0) [from "nested_rewrites.carbon"] { // CHECK:STDOUT: %D: %A_where.type.2d0 = bind_symbolic_name D, 0 [symbolic = %D (constants.%D)] -// CHECK:STDOUT: %D.patt: %A_where.type.2d0 = symbolic_binding_pattern D, 0 [symbolic = %D.patt (constants.%D.patt)] +// CHECK:STDOUT: %D.patt: %pattern_type.24c = symbolic_binding_pattern D, 0 [symbolic = %D.patt (constants.%D.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn; // CHECK:STDOUT: } @@ -1367,11 +1377,12 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %A.impl_witness: = impl_witness file.%A.impl_witness_table [concrete] // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %type_where: type = facet_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %type_where [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %D, (%A.impl_witness) [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %E: %type_where = bind_symbolic_name E, 0 [symbolic] -// CHECK:STDOUT: %E.patt: %type_where = symbolic_binding_pattern E, 0 [symbolic] +// CHECK:STDOUT: %E.patt: %pattern_type = symbolic_binding_pattern E, 0 [symbolic] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1399,7 +1410,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %A.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %A.impl_witness: = impl_witness %A.impl_witness_table [concrete = constants.%A.impl_witness] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %B.patt: %type_where = binding_pattern B +// CHECK:STDOUT: %B.patt: %pattern_type = binding_pattern B // CHECK:STDOUT: } // CHECK:STDOUT: %.loc8_13.1: type = splice_block %.loc8_13.2 [concrete = constants.%type_where] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -1440,7 +1451,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %E.patt: %type_where = symbolic_binding_pattern E, 0 [symbolic = constants.%E.patt] +// CHECK:STDOUT: %E.patt: %pattern_type = symbolic_binding_pattern E, 0 [symbolic = constants.%E.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [concrete = constants.%D] // CHECK:STDOUT: %.loc11_16.1: type = splice_block %.loc11_16.2 [concrete = constants.%type_where] { @@ -1474,6 +1485,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %A.impl_witness: = impl_witness file.%A.impl_witness_table [concrete] // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self] // CHECK:STDOUT: %type_where: type = facet_type [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %type_where [concrete] // CHECK:STDOUT: %facet_value: %type_where = facet_value %D, (%A.impl_witness) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1501,7 +1513,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %A.impl_witness_table = impl_witness_table (), @impl [concrete] // CHECK:STDOUT: %A.impl_witness: = impl_witness %A.impl_witness_table [concrete = constants.%A.impl_witness] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %B.patt: %type_where = binding_pattern B +// CHECK:STDOUT: %B.patt: %pattern_type = binding_pattern B // CHECK:STDOUT: } // CHECK:STDOUT: %.loc12_14.1: type = splice_block %.loc12_14.2 [concrete = constants.%type_where] { // CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self] @@ -1562,6 +1574,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %impl.elem1.c11: type = impl_witness_access %E.lookup_impl_witness.004, element1 [symbolic_self] // CHECK:STDOUT: %E_where.type.82c: type = facet_type <@E where %impl.elem0 = bool and %impl.elem1.c11 = %empty_tuple.type> [concrete] +// CHECK:STDOUT: %pattern_type.826: type = pattern_type %E_where.type.82c [concrete] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %Float.type: type = fn_type @Float [concrete] // CHECK:STDOUT: %Float: %Float.type = struct_value () [concrete] @@ -1575,7 +1588,9 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %E_where.type.a0d: type = facet_type <@E where %impl.elem0 = %empty_struct_type and %impl.elem1.072 = %i32> [concrete] +// CHECK:STDOUT: %pattern_type.562: type = pattern_type %E_where.type.a0d [concrete] // CHECK:STDOUT: %E_where.type.0ba: type = facet_type <@E where %impl.elem0 = %impl.elem1.c11> [concrete] +// CHECK:STDOUT: %pattern_type.e21: type = pattern_type %E_where.type.0ba [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1599,7 +1614,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %E.decl: type = interface_decl @E [concrete = constants.%E.type] {} {} // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %H.patt: %E_where.type.82c = binding_pattern H +// CHECK:STDOUT: %H.patt: %pattern_type.826 = binding_pattern H // CHECK:STDOUT: } // CHECK:STDOUT: %.loc15_11.1: type = splice_block %.loc15_11.2 [concrete = constants.%E_where.type.82c] { // CHECK:STDOUT: %E.ref.loc15: type = name_ref E, %E.decl [concrete = constants.%E.type] @@ -1626,7 +1641,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: %H: %E_where.type.82c = bind_name H, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %J.patt: %E_where.type.a0d = binding_pattern J +// CHECK:STDOUT: %J.patt: %pattern_type.562 = binding_pattern J // CHECK:STDOUT: } // CHECK:STDOUT: %.loc21_27.1: type = splice_block %.loc21_27.2 [concrete = constants.%E_where.type.a0d] { // CHECK:STDOUT: %E.ref.loc21: type = name_ref E, %E.decl [concrete = constants.%E.type] @@ -1655,7 +1670,7 @@ let K: (E where .F = .Self.G) = bool; // CHECK:STDOUT: } // CHECK:STDOUT: %J: %E_where.type.a0d = bind_name J, // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %K.patt: %E_where.type.0ba = binding_pattern K +// CHECK:STDOUT: %K.patt: %pattern_type.e21 = binding_pattern K // CHECK:STDOUT: } // CHECK:STDOUT: %.loc27_11.1: type = splice_block %.loc27_11.2 [concrete = constants.%E_where.type.0ba] { // CHECK:STDOUT: %E.ref.loc27: type = name_ref E, %E.decl [concrete = constants.%E.type] diff --git a/toolchain/check/testdata/where_expr/non_generic.carbon b/toolchain/check/testdata/where_expr/non_generic.carbon index 260cd58e15cb..77b0dda396d9 100644 --- a/toolchain/check/testdata/where_expr/non_generic.carbon +++ b/toolchain/check/testdata/where_expr/non_generic.carbon @@ -28,6 +28,7 @@ fn NotGenericF(U: I where .T == i32) {} // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [concrete] +// CHECK:STDOUT: %pattern_type.f03: type = pattern_type %I_where.type [concrete] // CHECK:STDOUT: %NotGenericF.type: type = fn_type @NotGenericF [concrete] // CHECK:STDOUT: %NotGenericF: %NotGenericF.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -49,8 +50,8 @@ fn NotGenericF(U: I where .T == i32) {} // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %NotGenericF.decl: %NotGenericF.type = fn_decl @NotGenericF [concrete = constants.%NotGenericF] { -// CHECK:STDOUT: %U.patt: %I_where.type = binding_pattern U -// CHECK:STDOUT: %U.param_patt: %I_where.type = value_param_pattern %U.patt, call_param0 +// CHECK:STDOUT: %U.patt: %pattern_type.f03 = binding_pattern U +// CHECK:STDOUT: %U.param_patt: %pattern_type.f03 = value_param_pattern %U.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %U.param: %I_where.type = value_param call_param0 // CHECK:STDOUT: %.loc14_21.1: type = splice_block %.loc14_21.2 [concrete = constants.%I_where.type] { diff --git a/toolchain/check/testdata/while/break_continue.carbon b/toolchain/check/testdata/while/break_continue.carbon index 0783e432ae57..a8a1a160af7e 100644 --- a/toolchain/check/testdata/while/break_continue.carbon +++ b/toolchain/check/testdata/while/break_continue.carbon @@ -35,6 +35,7 @@ fn While() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %A.type: type = fn_type @A [concrete] // CHECK:STDOUT: %A: %A.type = struct_value () [concrete] // CHECK:STDOUT: %B.type: type = fn_type @B [concrete] @@ -78,8 +79,8 @@ fn While() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc11_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -88,8 +89,8 @@ fn While() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc12_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -98,8 +99,8 @@ fn While() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc13_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -108,8 +109,8 @@ fn While() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc14_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -118,8 +119,8 @@ fn While() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %E.decl: %E.type = fn_decl @E [concrete = constants.%E] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc15_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -128,8 +129,8 @@ fn While() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc16_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -138,8 +139,8 @@ fn While() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc17_11.1: type = value_of_initializer %bool.make_type [concrete = bool] @@ -148,8 +149,8 @@ fn While() { // CHECK:STDOUT: %return: ref bool = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc18_11.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/while/unreachable_end.carbon b/toolchain/check/testdata/while/unreachable_end.carbon index 243b9bea03b7..ce32bffb8229 100644 --- a/toolchain/check/testdata/while/unreachable_end.carbon +++ b/toolchain/check/testdata/while/unreachable_end.carbon @@ -29,6 +29,7 @@ fn While() { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Cond.type: type = fn_type @Cond [concrete] // CHECK:STDOUT: %Cond: %Cond.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -60,8 +61,8 @@ fn While() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Cond.decl: %Cond.type = fn_decl @Cond [concrete = constants.%Cond] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc11_14.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/testdata/while/while.carbon b/toolchain/check/testdata/while/while.carbon index 3e4e4ef1a9e5..f2bb3e1d9d91 100644 --- a/toolchain/check/testdata/while/while.carbon +++ b/toolchain/check/testdata/while/while.carbon @@ -28,6 +28,7 @@ fn While() { // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Cond.type: type = fn_type @Cond [concrete] // CHECK:STDOUT: %Cond: %Cond.type = struct_value () [concrete] // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] @@ -59,8 +60,8 @@ fn While() { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %Cond.decl: %Cond.type = fn_decl @Cond [concrete = constants.%Cond] { -// CHECK:STDOUT: %return.patt: bool = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: bool = out_param_pattern %return.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.831 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 // CHECK:STDOUT: } { // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] // CHECK:STDOUT: %.loc11_14.1: type = value_of_initializer %bool.make_type [concrete = bool] diff --git a/toolchain/check/type.cpp b/toolchain/check/type.cpp index 86a5bf807569..2905a8e41344 100644 --- a/toolchain/check/type.cpp +++ b/toolchain/check/type.cpp @@ -157,6 +157,17 @@ auto GetPointerType(Context& context, SemIR::TypeInstId pointee_type_id) return GetTypeImpl(context, pointee_type_id); } +auto GetPatternType(Context& context, SemIR::TypeId scrutinee_type_id) + -> SemIR::TypeId { + CARBON_CHECK(!context.types().Is(scrutinee_type_id), + "Type is already a pattern type"); + if (scrutinee_type_id == SemIR::ErrorInst::TypeId) { + return SemIR::ErrorInst::TypeId; + } + return GetTypeImpl( + context, context.types().GetInstId(scrutinee_type_id)); +} + auto GetUnboundElementType(Context& context, SemIR::TypeInstId class_type_id, SemIR::TypeInstId element_type_id) -> SemIR::TypeId { return GetTypeImpl(context, class_type_id, diff --git a/toolchain/check/type.h b/toolchain/check/type.h index b900094997ae..21812ec0d9b9 100644 --- a/toolchain/check/type.h +++ b/toolchain/check/type.h @@ -82,6 +82,10 @@ auto GetStructType(Context& context, SemIR::StructTypeFieldsId fields_id) auto GetTupleType(Context& context, llvm::ArrayRef type_inst_ids) -> SemIR::TypeId; +// Returns a pattern type with the given scrutinee type. +auto GetPatternType(Context& context, SemIR::TypeId scrutinee_type_id) + -> SemIR::TypeId; + // Returns an unbound element type. auto GetUnboundElementType(Context& context, SemIR::TypeInstId class_type_id, SemIR::TypeInstId element_type_id) -> SemIR::TypeId; diff --git a/toolchain/check/type_completion.cpp b/toolchain/check/type_completion.cpp index a1cb8bf50211..5341545a1fa0 100644 --- a/toolchain/check/type_completion.cpp +++ b/toolchain/check/type_completion.cpp @@ -89,7 +89,7 @@ class TypeCompleter { SemIR::AutoType, SemIR::BoolType, SemIR::BoundMethodType, SemIR::ErrorInst, SemIR::FacetType, SemIR::FloatType, SemIR::IntType, SemIR::IntLiteralType, SemIR::LegacyFloatType, - SemIR::NamespaceType, SemIR::PointerType, + SemIR::NamespaceType, SemIR::PatternType, SemIR::PointerType, SemIR::SpecificFunctionType, SemIR::TypeType, SemIR::VtableType, SemIR::WitnessType>()) auto BuildInfoForInst(SemIR::TypeId type_id, InstT /*inst*/) const diff --git a/toolchain/diagnostics/diagnostic_kind.def b/toolchain/diagnostics/diagnostic_kind.def index 2220f07c3854..53b5bb9bdac4 100644 --- a/toolchain/diagnostics/diagnostic_kind.def +++ b/toolchain/diagnostics/diagnostic_kind.def @@ -319,6 +319,7 @@ CARBON_DIAGNOSTIC_KIND(MissingImplInMemberAccessNote) // Let declaration checking. CARBON_DIAGNOSTIC_KIND(ExpectedInitializerAfterLet) CARBON_DIAGNOSTIC_KIND(ExpectedSymbolicBindingInAssociatedConstant) +CARBON_DIAGNOSTIC_KIND(ExpectedSingleBindingInAssociatedConstant) // Pattern checking. CARBON_DIAGNOSTIC_KIND(TemplateBindingInAssociatedConstantDecl) diff --git a/toolchain/driver/testdata/compile/raw_and_textual_ir.carbon b/toolchain/driver/testdata/compile/raw_and_textual_ir.carbon index 4b3568a474ec..d72383c2edf5 100644 --- a/toolchain/driver/testdata/compile/raw_and_textual_ir.carbon +++ b/toolchain/driver/testdata/compile/raw_and_textual_ir.carbon @@ -24,11 +24,11 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: ir1: {decl_id: inst, is_export: false} // CHECK:STDOUT: import_ir_insts: {} // CHECK:STDOUT: name_scopes: -// CHECK:STDOUT: name_scope0: {inst: inst14, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name0: inst34}} +// CHECK:STDOUT: name_scope0: {inst: inst14, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name0: inst36}} // CHECK:STDOUT: entity_names: // CHECK:STDOUT: entity_name0: {name: name1, parent_scope: name_scope, index: -1, is_template: 0} // CHECK:STDOUT: functions: -// CHECK:STDOUT: function0: {name: name0, parent_scope: name_scope0, call_params_id: inst_block9, return_slot_pattern: inst29, body: [inst_block12]} +// CHECK:STDOUT: function0: {name: name0, parent_scope: name_scope0, call_params_id: inst_block9, return_slot_pattern: inst31, body: [inst_block12]} // CHECK:STDOUT: classes: {} // CHECK:STDOUT: generics: {} // CHECK:STDOUT: specifics: {} @@ -41,148 +41,154 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: value_repr: {kind: copy, type: type(Error)} // CHECK:STDOUT: 'type(inst(NamespaceType))': // CHECK:STDOUT: value_repr: {kind: copy, type: type(inst(NamespaceType))} -// CHECK:STDOUT: 'type(inst35)': +// CHECK:STDOUT: 'type(inst37)': // CHECK:STDOUT: value_repr: {kind: none, type: type(inst15)} // CHECK:STDOUT: 'type(inst15)': // CHECK:STDOUT: value_repr: {kind: none, type: type(inst15)} -// CHECK:STDOUT: 'type(inst23)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst37)} -// CHECK:STDOUT: 'type(inst37)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst37)} +// CHECK:STDOUT: 'type(inst24)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(inst39)} +// CHECK:STDOUT: 'type(inst39)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(inst39)} // CHECK:STDOUT: insts: // CHECK:STDOUT: inst14: {kind: Namespace, arg0: name_scope0, arg1: inst, type: type(inst(NamespaceType))} // CHECK:STDOUT: inst15: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} // CHECK:STDOUT: inst16: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst15)} // CHECK:STDOUT: inst17: {kind: Converted, arg0: inst16, arg1: inst15, type: type(TypeType)} -// CHECK:STDOUT: inst18: {kind: BindName, arg0: entity_name0, arg1: inst30, type: type(inst15)} -// CHECK:STDOUT: inst19: {kind: BindingPattern, arg0: entity_name0, type: type(inst15)} -// CHECK:STDOUT: inst20: {kind: ValueParamPattern, arg0: inst19, arg1: call_param0, type: type(inst15)} -// CHECK:STDOUT: inst21: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst15)} +// CHECK:STDOUT: inst18: {kind: BindName, arg0: entity_name0, arg1: inst32, type: type(inst15)} +// CHECK:STDOUT: inst19: {kind: PatternType, arg0: inst15, type: type(TypeType)} +// CHECK:STDOUT: inst20: {kind: BindingPattern, arg0: entity_name0, type: type(inst19)} +// CHECK:STDOUT: inst21: {kind: ValueParamPattern, arg0: inst20, arg1: call_param0, type: type(inst19)} // CHECK:STDOUT: inst22: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst15)} -// CHECK:STDOUT: inst23: {kind: TupleType, arg0: inst_block7, type: type(TypeType)} -// CHECK:STDOUT: inst24: {kind: TupleLiteral, arg0: inst_block6, type: type(inst23)} -// CHECK:STDOUT: inst25: {kind: Converted, arg0: inst21, arg1: inst15, type: type(TypeType)} +// CHECK:STDOUT: inst23: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst15)} +// CHECK:STDOUT: inst24: {kind: TupleType, arg0: inst_block7, type: type(TypeType)} +// CHECK:STDOUT: inst25: {kind: TupleLiteral, arg0: inst_block6, type: type(inst24)} // CHECK:STDOUT: inst26: {kind: Converted, arg0: inst22, arg1: inst15, type: type(TypeType)} -// CHECK:STDOUT: inst27: {kind: Converted, arg0: inst24, arg1: inst23, type: type(TypeType)} -// CHECK:STDOUT: inst28: {kind: ReturnSlotPattern, arg0: inst27, type: type(inst23)} -// CHECK:STDOUT: inst29: {kind: OutParamPattern, arg0: inst28, arg1: call_param1, type: type(inst23)} -// CHECK:STDOUT: inst30: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst15)} -// CHECK:STDOUT: inst31: {kind: SpliceBlock, arg0: inst_block4, arg1: inst17, type: type(TypeType)} -// CHECK:STDOUT: inst32: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(inst23)} -// CHECK:STDOUT: inst33: {kind: ReturnSlot, arg0: inst27, arg1: inst32, type: type(inst23)} -// CHECK:STDOUT: inst34: {kind: FunctionDecl, arg0: function0, arg1: inst_block11, type: type(inst35)} -// CHECK:STDOUT: inst35: {kind: FunctionType, arg0: function0, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst36: {kind: StructValue, arg0: inst_block_empty, type: type(inst35)} -// CHECK:STDOUT: inst37: {kind: PointerType, arg0: inst23, type: type(TypeType)} -// CHECK:STDOUT: inst38: {kind: NameRef, arg0: name1, arg1: inst18, type: type(inst15)} -// CHECK:STDOUT: inst39: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst15)} -// CHECK:STDOUT: inst40: {kind: TupleLiteral, arg0: inst_block13, type: type(inst23)} -// CHECK:STDOUT: inst41: {kind: TupleAccess, arg0: inst33, arg1: element0, type: type(inst15)} -// CHECK:STDOUT: inst42: {kind: TupleInit, arg0: inst_block14, arg1: inst41, type: type(inst15)} -// CHECK:STDOUT: inst43: {kind: TupleValue, arg0: inst_block_empty, type: type(inst15)} -// CHECK:STDOUT: inst44: {kind: Converted, arg0: inst38, arg1: inst42, type: type(inst15)} -// CHECK:STDOUT: inst45: {kind: TupleAccess, arg0: inst33, arg1: element1, type: type(inst15)} -// CHECK:STDOUT: inst46: {kind: TupleInit, arg0: inst_block_empty, arg1: inst45, type: type(inst15)} -// CHECK:STDOUT: inst47: {kind: Converted, arg0: inst39, arg1: inst46, type: type(inst15)} -// CHECK:STDOUT: inst48: {kind: TupleInit, arg0: inst_block15, arg1: inst33, type: type(inst23)} -// CHECK:STDOUT: inst49: {kind: TupleValue, arg0: inst_block16, type: type(inst23)} -// CHECK:STDOUT: inst50: {kind: Converted, arg0: inst40, arg1: inst48, type: type(inst23)} -// CHECK:STDOUT: inst51: {kind: ReturnExpr, arg0: inst50, arg1: inst33} +// CHECK:STDOUT: inst27: {kind: Converted, arg0: inst23, arg1: inst15, type: type(TypeType)} +// CHECK:STDOUT: inst28: {kind: Converted, arg0: inst25, arg1: inst24, type: type(TypeType)} +// CHECK:STDOUT: inst29: {kind: PatternType, arg0: inst24, type: type(TypeType)} +// CHECK:STDOUT: inst30: {kind: ReturnSlotPattern, arg0: inst28, type: type(inst29)} +// CHECK:STDOUT: inst31: {kind: OutParamPattern, arg0: inst30, arg1: call_param1, type: type(inst29)} +// CHECK:STDOUT: inst32: {kind: ValueParam, arg0: call_param0, arg1: name1, type: type(inst15)} +// CHECK:STDOUT: inst33: {kind: SpliceBlock, arg0: inst_block4, arg1: inst17, type: type(TypeType)} +// CHECK:STDOUT: inst34: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(inst24)} +// CHECK:STDOUT: inst35: {kind: ReturnSlot, arg0: inst24, arg1: inst34, type: type(inst24)} +// CHECK:STDOUT: inst36: {kind: FunctionDecl, arg0: function0, arg1: inst_block11, type: type(inst37)} +// CHECK:STDOUT: inst37: {kind: FunctionType, arg0: function0, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst38: {kind: StructValue, arg0: inst_block_empty, type: type(inst37)} +// CHECK:STDOUT: inst39: {kind: PointerType, arg0: inst24, type: type(TypeType)} +// CHECK:STDOUT: inst40: {kind: NameRef, arg0: name1, arg1: inst18, type: type(inst15)} +// CHECK:STDOUT: inst41: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst15)} +// CHECK:STDOUT: inst42: {kind: TupleLiteral, arg0: inst_block13, type: type(inst24)} +// CHECK:STDOUT: inst43: {kind: TupleAccess, arg0: inst35, arg1: element0, type: type(inst15)} +// CHECK:STDOUT: inst44: {kind: TupleInit, arg0: inst_block14, arg1: inst43, type: type(inst15)} +// CHECK:STDOUT: inst45: {kind: TupleValue, arg0: inst_block_empty, type: type(inst15)} +// CHECK:STDOUT: inst46: {kind: Converted, arg0: inst40, arg1: inst44, type: type(inst15)} +// CHECK:STDOUT: inst47: {kind: TupleAccess, arg0: inst35, arg1: element1, type: type(inst15)} +// CHECK:STDOUT: inst48: {kind: TupleInit, arg0: inst_block_empty, arg1: inst47, type: type(inst15)} +// CHECK:STDOUT: inst49: {kind: Converted, arg0: inst41, arg1: inst48, type: type(inst15)} +// CHECK:STDOUT: inst50: {kind: TupleInit, arg0: inst_block15, arg1: inst35, type: type(inst24)} +// CHECK:STDOUT: inst51: {kind: TupleValue, arg0: inst_block16, type: type(inst24)} +// CHECK:STDOUT: inst52: {kind: Converted, arg0: inst42, arg1: inst50, type: type(inst24)} +// CHECK:STDOUT: inst53: {kind: ReturnExpr, arg0: inst52, arg1: inst35} // CHECK:STDOUT: constant_values: // CHECK:STDOUT: inst14: concrete_constant(inst14) // CHECK:STDOUT: inst15: concrete_constant(inst15) // CHECK:STDOUT: inst17: concrete_constant(inst15) -// CHECK:STDOUT: inst23: concrete_constant(inst23) -// CHECK:STDOUT: inst25: concrete_constant(inst15) +// CHECK:STDOUT: inst19: concrete_constant(inst19) +// CHECK:STDOUT: inst24: concrete_constant(inst24) // CHECK:STDOUT: inst26: concrete_constant(inst15) -// CHECK:STDOUT: inst27: concrete_constant(inst23) -// CHECK:STDOUT: inst31: concrete_constant(inst15) -// CHECK:STDOUT: inst34: concrete_constant(inst36) -// CHECK:STDOUT: inst35: concrete_constant(inst35) -// CHECK:STDOUT: inst36: concrete_constant(inst36) +// CHECK:STDOUT: inst27: concrete_constant(inst15) +// CHECK:STDOUT: inst28: concrete_constant(inst24) +// CHECK:STDOUT: inst29: concrete_constant(inst29) +// CHECK:STDOUT: inst33: concrete_constant(inst15) +// CHECK:STDOUT: inst36: concrete_constant(inst38) // CHECK:STDOUT: inst37: concrete_constant(inst37) -// CHECK:STDOUT: inst42: concrete_constant(inst43) -// CHECK:STDOUT: inst43: concrete_constant(inst43) -// CHECK:STDOUT: inst44: concrete_constant(inst43) -// CHECK:STDOUT: inst46: concrete_constant(inst43) -// CHECK:STDOUT: inst47: concrete_constant(inst43) -// CHECK:STDOUT: inst48: concrete_constant(inst49) -// CHECK:STDOUT: inst49: concrete_constant(inst49) -// CHECK:STDOUT: inst50: concrete_constant(inst49) +// CHECK:STDOUT: inst38: concrete_constant(inst38) +// CHECK:STDOUT: inst39: concrete_constant(inst39) +// CHECK:STDOUT: inst44: concrete_constant(inst45) +// CHECK:STDOUT: inst45: concrete_constant(inst45) +// CHECK:STDOUT: inst46: concrete_constant(inst45) +// CHECK:STDOUT: inst48: concrete_constant(inst45) +// CHECK:STDOUT: inst49: concrete_constant(inst45) +// CHECK:STDOUT: inst50: concrete_constant(inst51) +// CHECK:STDOUT: inst51: concrete_constant(inst51) +// CHECK:STDOUT: inst52: concrete_constant(inst51) // CHECK:STDOUT: symbolic_constants: {} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: inst_block_empty: {} // CHECK:STDOUT: exports: -// CHECK:STDOUT: 0: inst34 +// CHECK:STDOUT: 0: inst36 // CHECK:STDOUT: import_refs: {} // CHECK:STDOUT: global_init: {} // CHECK:STDOUT: inst_block4: // CHECK:STDOUT: 0: inst16 // CHECK:STDOUT: 1: inst17 // CHECK:STDOUT: inst_block5: -// CHECK:STDOUT: 0: inst20 -// CHECK:STDOUT: inst_block6: // CHECK:STDOUT: 0: inst21 -// CHECK:STDOUT: 1: inst22 +// CHECK:STDOUT: inst_block6: +// CHECK:STDOUT: 0: inst22 +// CHECK:STDOUT: 1: inst23 // CHECK:STDOUT: inst_block7: // CHECK:STDOUT: 0: inst15 // CHECK:STDOUT: 1: inst15 // CHECK:STDOUT: inst_block8: -// CHECK:STDOUT: 0: inst25 -// CHECK:STDOUT: 1: inst26 +// CHECK:STDOUT: 0: inst26 +// CHECK:STDOUT: 1: inst27 // CHECK:STDOUT: inst_block9: -// CHECK:STDOUT: 0: inst30 -// CHECK:STDOUT: 1: inst32 +// CHECK:STDOUT: 0: inst32 +// CHECK:STDOUT: 1: inst34 // CHECK:STDOUT: inst_block10: -// CHECK:STDOUT: 0: inst19 -// CHECK:STDOUT: 1: inst20 -// CHECK:STDOUT: 2: inst28 -// CHECK:STDOUT: 3: inst29 +// CHECK:STDOUT: 0: inst20 +// CHECK:STDOUT: 1: inst21 +// CHECK:STDOUT: 2: inst30 +// CHECK:STDOUT: 3: inst31 // CHECK:STDOUT: inst_block11: -// CHECK:STDOUT: 0: inst21 -// CHECK:STDOUT: 1: inst22 -// CHECK:STDOUT: 2: inst24 -// CHECK:STDOUT: 3: inst25 -// CHECK:STDOUT: 4: inst26 -// CHECK:STDOUT: 5: inst27 -// CHECK:STDOUT: 6: inst30 -// CHECK:STDOUT: 7: inst31 +// CHECK:STDOUT: 0: inst22 +// CHECK:STDOUT: 1: inst23 +// CHECK:STDOUT: 2: inst25 +// CHECK:STDOUT: 3: inst26 +// CHECK:STDOUT: 4: inst27 +// CHECK:STDOUT: 5: inst28 +// CHECK:STDOUT: 6: inst32 +// CHECK:STDOUT: 7: inst33 // CHECK:STDOUT: 8: inst18 -// CHECK:STDOUT: 9: inst32 -// CHECK:STDOUT: 10: inst33 +// CHECK:STDOUT: 9: inst34 +// CHECK:STDOUT: 10: inst35 // CHECK:STDOUT: inst_block12: -// CHECK:STDOUT: 0: inst38 -// CHECK:STDOUT: 1: inst39 -// CHECK:STDOUT: 2: inst40 -// CHECK:STDOUT: 3: inst41 -// CHECK:STDOUT: 4: inst42 -// CHECK:STDOUT: 5: inst44 -// CHECK:STDOUT: 6: inst45 -// CHECK:STDOUT: 7: inst46 -// CHECK:STDOUT: 8: inst47 -// CHECK:STDOUT: 9: inst48 -// CHECK:STDOUT: 10: inst50 -// CHECK:STDOUT: 11: inst51 +// CHECK:STDOUT: 0: inst40 +// CHECK:STDOUT: 1: inst41 +// CHECK:STDOUT: 2: inst42 +// CHECK:STDOUT: 3: inst43 +// CHECK:STDOUT: 4: inst44 +// CHECK:STDOUT: 5: inst46 +// CHECK:STDOUT: 6: inst47 +// CHECK:STDOUT: 7: inst48 +// CHECK:STDOUT: 8: inst49 +// CHECK:STDOUT: 9: inst50 +// CHECK:STDOUT: 10: inst52 +// CHECK:STDOUT: 11: inst53 // CHECK:STDOUT: inst_block13: -// CHECK:STDOUT: 0: inst38 -// CHECK:STDOUT: 1: inst39 +// CHECK:STDOUT: 0: inst40 +// CHECK:STDOUT: 1: inst41 // CHECK:STDOUT: inst_block14: {} // CHECK:STDOUT: inst_block15: -// CHECK:STDOUT: 0: inst44 -// CHECK:STDOUT: 1: inst47 +// CHECK:STDOUT: 0: inst46 +// CHECK:STDOUT: 1: inst49 // CHECK:STDOUT: inst_block16: -// CHECK:STDOUT: 0: inst43 -// CHECK:STDOUT: 1: inst43 +// CHECK:STDOUT: 0: inst45 +// CHECK:STDOUT: 1: inst45 // CHECK:STDOUT: inst_block17: // CHECK:STDOUT: 0: inst14 -// CHECK:STDOUT: 1: inst34 +// CHECK:STDOUT: 1: inst36 // CHECK:STDOUT: ... // CHECK:STDOUT: // CHECK:STDOUT: --- raw_and_textual_ir.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] +// CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -194,10 +200,10 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: .Foo = %Foo.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %n.patt: %empty_tuple.type = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %empty_tuple.type = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.cb1 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.cb1 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5b8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5b8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_20: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc15_24: %empty_tuple.type = tuple_literal () diff --git a/toolchain/driver/testdata/compile/raw_ir.carbon b/toolchain/driver/testdata/compile/raw_ir.carbon index d58ea3bbf1e0..50e9005f789e 100644 --- a/toolchain/driver/testdata/compile/raw_ir.carbon +++ b/toolchain/driver/testdata/compile/raw_ir.carbon @@ -24,15 +24,15 @@ fn Foo[T:! type](n: T) -> (T, ()) { // CHECK:STDOUT: ir1: {decl_id: inst, is_export: false} // CHECK:STDOUT: import_ir_insts: {} // CHECK:STDOUT: name_scopes: -// CHECK:STDOUT: name_scope0: {inst: inst14, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name0: inst36}} +// CHECK:STDOUT: name_scope0: {inst: inst14, parent_scope: name_scope, has_error: false, extended_scopes: [], names: {name0: inst39}} // CHECK:STDOUT: entity_names: // CHECK:STDOUT: entity_name0: {name: name1, parent_scope: name_scope, index: 0, is_template: 0} // CHECK:STDOUT: entity_name1: {name: name2, parent_scope: name_scope, index: -1, is_template: 0} // CHECK:STDOUT: functions: -// CHECK:STDOUT: function0: {name: name0, parent_scope: name_scope0, call_params_id: inst_block12, return_slot_pattern: inst32, body: [inst_block20]} +// CHECK:STDOUT: function0: {name: name0, parent_scope: name_scope0, call_params_id: inst_block12, return_slot_pattern: inst35, body: [inst_block20]} // CHECK:STDOUT: classes: {} // CHECK:STDOUT: generics: -// CHECK:STDOUT: generic0: {decl: inst36, bindings: inst_block15} +// CHECK:STDOUT: generic0: {decl: inst39, bindings: inst_block15} // CHECK:STDOUT: specifics: // CHECK:STDOUT: specific0: {generic: generic0, args: inst_block16} // CHECK:STDOUT: struct_type_fields: @@ -44,198 +44,216 @@ fn Foo[T:! type](n: T) -> (T, ()) { // CHECK:STDOUT: value_repr: {kind: copy, type: type(Error)} // CHECK:STDOUT: 'type(inst(NamespaceType))': // CHECK:STDOUT: value_repr: {kind: copy, type: type(inst(NamespaceType))} -// CHECK:STDOUT: 'type(inst40)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst24)} -// CHECK:STDOUT: 'type(inst24)': -// CHECK:STDOUT: value_repr: {kind: none, type: type(inst24)} +// CHECK:STDOUT: 'type(inst45)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst26)} +// CHECK:STDOUT: 'type(inst26)': +// CHECK:STDOUT: value_repr: {kind: none, type: type(inst26)} // CHECK:STDOUT: 'type(symbolic_constant0)': // CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant0)} -// CHECK:STDOUT: 'type(symbolic_constant2)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant6)} -// CHECK:STDOUT: 'type(symbolic_constant6)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant6)} +// CHECK:STDOUT: 'type(symbolic_constant3)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant10)} +// CHECK:STDOUT: 'type(symbolic_constant10)': +// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant10)} // CHECK:STDOUT: 'type(inst(WitnessType))': // CHECK:STDOUT: value_repr: {kind: copy, type: type(inst(WitnessType))} -// CHECK:STDOUT: 'type(symbolic_constant3)': -// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant3)} // CHECK:STDOUT: 'type(symbolic_constant5)': -// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant6)} +// CHECK:STDOUT: value_repr: {kind: copy, type: type(symbolic_constant5)} +// CHECK:STDOUT: 'type(symbolic_constant8)': +// CHECK:STDOUT: value_repr: {kind: pointer, type: type(symbolic_constant10)} // CHECK:STDOUT: insts: // CHECK:STDOUT: inst14: {kind: Namespace, arg0: name_scope0, arg1: inst, type: type(inst(NamespaceType))} // CHECK:STDOUT: inst15: {kind: BindSymbolicName, arg0: entity_name0, arg1: inst, type: type(TypeType)} // CHECK:STDOUT: inst16: {kind: BindSymbolicName, arg0: entity_name0, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst17: {kind: SymbolicBindingPattern, arg0: entity_name0, type: type(TypeType)} -// CHECK:STDOUT: inst18: {kind: SymbolicBindingPattern, arg0: entity_name0, type: type(TypeType)} -// CHECK:STDOUT: inst19: {kind: NameRef, arg0: name1, arg1: inst15, type: type(TypeType)} -// CHECK:STDOUT: inst20: {kind: BindName, arg0: entity_name1, arg1: inst33, type: type(symbolic_constant3)} -// CHECK:STDOUT: inst21: {kind: BindingPattern, arg0: entity_name1, type: type(symbolic_constant3)} -// CHECK:STDOUT: inst22: {kind: ValueParamPattern, arg0: inst21, arg1: call_param0, type: type(symbolic_constant3)} -// CHECK:STDOUT: inst23: {kind: NameRef, arg0: name1, arg1: inst15, type: type(TypeType)} -// CHECK:STDOUT: inst24: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} -// CHECK:STDOUT: inst25: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst24)} -// CHECK:STDOUT: inst26: {kind: TupleType, arg0: inst_block9, type: type(TypeType)} -// CHECK:STDOUT: inst27: {kind: TupleLiteral, arg0: inst_block8, type: type(inst26)} -// CHECK:STDOUT: inst28: {kind: Converted, arg0: inst25, arg1: inst24, type: type(TypeType)} -// CHECK:STDOUT: inst29: {kind: TupleType, arg0: inst_block11, type: type(TypeType)} -// CHECK:STDOUT: inst30: {kind: Converted, arg0: inst27, arg1: inst29, type: type(TypeType)} -// CHECK:STDOUT: inst31: {kind: ReturnSlotPattern, arg0: inst30, type: type(symbolic_constant5)} -// CHECK:STDOUT: inst32: {kind: OutParamPattern, arg0: inst31, arg1: call_param1, type: type(symbolic_constant5)} -// CHECK:STDOUT: inst33: {kind: ValueParam, arg0: call_param0, arg1: name2, type: type(symbolic_constant3)} -// CHECK:STDOUT: inst34: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(symbolic_constant5)} -// CHECK:STDOUT: inst35: {kind: ReturnSlot, arg0: inst30, arg1: inst34, type: type(symbolic_constant5)} -// CHECK:STDOUT: inst36: {kind: FunctionDecl, arg0: function0, arg1: inst_block14, type: type(inst40)} -// CHECK:STDOUT: inst37: {kind: BindSymbolicName, arg0: entity_name0, arg1: inst, type: type(TypeType)} -// CHECK:STDOUT: inst38: {kind: SymbolicBindingPattern, arg0: entity_name0, type: type(TypeType)} -// CHECK:STDOUT: inst39: {kind: TupleType, arg0: inst_block17, type: type(TypeType)} -// CHECK:STDOUT: inst40: {kind: FunctionType, arg0: function0, arg1: specific, type: type(TypeType)} -// CHECK:STDOUT: inst41: {kind: StructValue, arg0: inst_block_empty, type: type(inst40)} -// CHECK:STDOUT: inst42: {kind: PointerType, arg0: inst29, type: type(TypeType)} -// CHECK:STDOUT: inst43: {kind: RequireCompleteType, arg0: inst29, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst44: {kind: RequireCompleteType, arg0: inst29, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst45: {kind: RequireCompleteType, arg0: inst16, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst46: {kind: RequireCompleteType, arg0: inst16, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst47: {kind: NameRef, arg0: name2, arg1: inst20, type: type(symbolic_constant3)} -// CHECK:STDOUT: inst48: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst24)} -// CHECK:STDOUT: inst49: {kind: TupleLiteral, arg0: inst_block21, type: type(symbolic_constant5)} -// CHECK:STDOUT: inst50: {kind: RequireCompleteType, arg0: inst29, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst51: {kind: TupleAccess, arg0: inst35, arg1: element0, type: type(symbolic_constant3)} -// CHECK:STDOUT: inst52: {kind: RequireCompleteType, arg0: inst16, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst53: {kind: InitializeFrom, arg0: inst47, arg1: inst51, type: type(symbolic_constant3)} -// CHECK:STDOUT: inst54: {kind: TupleAccess, arg0: inst35, arg1: element1, type: type(inst24)} -// CHECK:STDOUT: inst55: {kind: TupleInit, arg0: inst_block_empty, arg1: inst54, type: type(inst24)} -// CHECK:STDOUT: inst56: {kind: TupleValue, arg0: inst_block_empty, type: type(inst24)} -// CHECK:STDOUT: inst57: {kind: Converted, arg0: inst48, arg1: inst55, type: type(inst24)} -// CHECK:STDOUT: inst58: {kind: TupleInit, arg0: inst_block22, arg1: inst35, type: type(symbolic_constant5)} -// CHECK:STDOUT: inst59: {kind: Converted, arg0: inst49, arg1: inst58, type: type(symbolic_constant5)} -// CHECK:STDOUT: inst60: {kind: ReturnExpr, arg0: inst59, arg1: inst35} -// CHECK:STDOUT: inst61: {kind: RequireCompleteType, arg0: inst39, type: type(inst(WitnessType))} -// CHECK:STDOUT: inst62: {kind: RequireCompleteType, arg0: inst37, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst17: {kind: PatternType, arg0: inst(TypeType), type: type(TypeType)} +// CHECK:STDOUT: inst18: {kind: SymbolicBindingPattern, arg0: entity_name0, type: type(inst17)} +// CHECK:STDOUT: inst19: {kind: SymbolicBindingPattern, arg0: entity_name0, type: type(inst17)} +// CHECK:STDOUT: inst20: {kind: NameRef, arg0: name1, arg1: inst15, type: type(TypeType)} +// CHECK:STDOUT: inst21: {kind: BindName, arg0: entity_name1, arg1: inst36, type: type(symbolic_constant5)} +// CHECK:STDOUT: inst22: {kind: PatternType, arg0: inst16, type: type(TypeType)} +// CHECK:STDOUT: inst23: {kind: BindingPattern, arg0: entity_name1, type: type(symbolic_constant7)} +// CHECK:STDOUT: inst24: {kind: ValueParamPattern, arg0: inst23, arg1: call_param0, type: type(symbolic_constant7)} +// CHECK:STDOUT: inst25: {kind: NameRef, arg0: name1, arg1: inst15, type: type(TypeType)} +// CHECK:STDOUT: inst26: {kind: TupleType, arg0: inst_block_empty, type: type(TypeType)} +// CHECK:STDOUT: inst27: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst26)} +// CHECK:STDOUT: inst28: {kind: TupleType, arg0: inst_block9, type: type(TypeType)} +// CHECK:STDOUT: inst29: {kind: TupleLiteral, arg0: inst_block8, type: type(inst28)} +// CHECK:STDOUT: inst30: {kind: Converted, arg0: inst27, arg1: inst26, type: type(TypeType)} +// CHECK:STDOUT: inst31: {kind: TupleType, arg0: inst_block11, type: type(TypeType)} +// CHECK:STDOUT: inst32: {kind: Converted, arg0: inst29, arg1: inst31, type: type(TypeType)} +// CHECK:STDOUT: inst33: {kind: PatternType, arg0: inst31, type: type(TypeType)} +// CHECK:STDOUT: inst34: {kind: ReturnSlotPattern, arg0: inst32, type: type(symbolic_constant9)} +// CHECK:STDOUT: inst35: {kind: OutParamPattern, arg0: inst34, arg1: call_param1, type: type(symbolic_constant9)} +// CHECK:STDOUT: inst36: {kind: ValueParam, arg0: call_param0, arg1: name2, type: type(symbolic_constant5)} +// CHECK:STDOUT: inst37: {kind: OutParam, arg0: call_param1, arg1: name(ReturnSlot), type: type(symbolic_constant8)} +// CHECK:STDOUT: inst38: {kind: ReturnSlot, arg0: inst31, arg1: inst37, type: type(symbolic_constant8)} +// CHECK:STDOUT: inst39: {kind: FunctionDecl, arg0: function0, arg1: inst_block14, type: type(inst45)} +// CHECK:STDOUT: inst40: {kind: BindSymbolicName, arg0: entity_name0, arg1: inst, type: type(TypeType)} +// CHECK:STDOUT: inst41: {kind: SymbolicBindingPattern, arg0: entity_name0, type: type(inst17)} +// CHECK:STDOUT: inst42: {kind: PatternType, arg0: inst40, type: type(TypeType)} +// CHECK:STDOUT: inst43: {kind: TupleType, arg0: inst_block17, type: type(TypeType)} +// CHECK:STDOUT: inst44: {kind: PatternType, arg0: inst43, type: type(TypeType)} +// CHECK:STDOUT: inst45: {kind: FunctionType, arg0: function0, arg1: specific, type: type(TypeType)} +// CHECK:STDOUT: inst46: {kind: StructValue, arg0: inst_block_empty, type: type(inst45)} +// CHECK:STDOUT: inst47: {kind: PointerType, arg0: inst31, type: type(TypeType)} +// CHECK:STDOUT: inst48: {kind: RequireCompleteType, arg0: inst31, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst49: {kind: RequireCompleteType, arg0: inst31, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst50: {kind: RequireCompleteType, arg0: inst16, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst51: {kind: RequireCompleteType, arg0: inst16, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst52: {kind: NameRef, arg0: name2, arg1: inst21, type: type(symbolic_constant5)} +// CHECK:STDOUT: inst53: {kind: TupleLiteral, arg0: inst_block_empty, type: type(inst26)} +// CHECK:STDOUT: inst54: {kind: TupleLiteral, arg0: inst_block21, type: type(symbolic_constant8)} +// CHECK:STDOUT: inst55: {kind: RequireCompleteType, arg0: inst31, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst56: {kind: TupleAccess, arg0: inst38, arg1: element0, type: type(symbolic_constant5)} +// CHECK:STDOUT: inst57: {kind: RequireCompleteType, arg0: inst16, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst58: {kind: InitializeFrom, arg0: inst52, arg1: inst56, type: type(symbolic_constant5)} +// CHECK:STDOUT: inst59: {kind: TupleAccess, arg0: inst38, arg1: element1, type: type(inst26)} +// CHECK:STDOUT: inst60: {kind: TupleInit, arg0: inst_block_empty, arg1: inst59, type: type(inst26)} +// CHECK:STDOUT: inst61: {kind: TupleValue, arg0: inst_block_empty, type: type(inst26)} +// CHECK:STDOUT: inst62: {kind: Converted, arg0: inst53, arg1: inst60, type: type(inst26)} +// CHECK:STDOUT: inst63: {kind: TupleInit, arg0: inst_block22, arg1: inst38, type: type(symbolic_constant8)} +// CHECK:STDOUT: inst64: {kind: Converted, arg0: inst54, arg1: inst63, type: type(symbolic_constant8)} +// CHECK:STDOUT: inst65: {kind: ReturnExpr, arg0: inst64, arg1: inst38} +// CHECK:STDOUT: inst66: {kind: RequireCompleteType, arg0: inst43, type: type(inst(WitnessType))} +// CHECK:STDOUT: inst67: {kind: RequireCompleteType, arg0: inst40, type: type(inst(WitnessType))} // CHECK:STDOUT: constant_values: // CHECK:STDOUT: inst14: concrete_constant(inst14) -// CHECK:STDOUT: inst15: symbolic_constant3 +// CHECK:STDOUT: inst15: symbolic_constant5 // CHECK:STDOUT: inst16: symbolic_constant0 -// CHECK:STDOUT: inst17: symbolic_constant4 -// CHECK:STDOUT: inst18: symbolic_constant1 -// CHECK:STDOUT: inst19: symbolic_constant3 -// CHECK:STDOUT: inst23: symbolic_constant3 -// CHECK:STDOUT: inst24: concrete_constant(inst24) +// CHECK:STDOUT: inst17: concrete_constant(inst17) +// CHECK:STDOUT: inst18: symbolic_constant6 +// CHECK:STDOUT: inst19: symbolic_constant1 +// CHECK:STDOUT: inst20: symbolic_constant5 +// CHECK:STDOUT: inst22: symbolic_constant2 +// CHECK:STDOUT: inst25: symbolic_constant5 // CHECK:STDOUT: inst26: concrete_constant(inst26) -// CHECK:STDOUT: inst28: concrete_constant(inst24) -// CHECK:STDOUT: inst29: symbolic_constant2 -// CHECK:STDOUT: inst30: symbolic_constant5 -// CHECK:STDOUT: inst36: concrete_constant(inst41) -// CHECK:STDOUT: inst37: symbolic_constant3 -// CHECK:STDOUT: inst38: symbolic_constant4 -// CHECK:STDOUT: inst39: symbolic_constant5 -// CHECK:STDOUT: inst40: concrete_constant(inst40) -// CHECK:STDOUT: inst41: concrete_constant(inst41) -// CHECK:STDOUT: inst42: symbolic_constant6 -// CHECK:STDOUT: inst43: symbolic_constant9 -// CHECK:STDOUT: inst44: symbolic_constant7 -// CHECK:STDOUT: inst45: symbolic_constant10 -// CHECK:STDOUT: inst46: symbolic_constant8 -// CHECK:STDOUT: inst50: symbolic_constant9 -// CHECK:STDOUT: inst52: symbolic_constant10 -// CHECK:STDOUT: inst55: concrete_constant(inst56) -// CHECK:STDOUT: inst56: concrete_constant(inst56) -// CHECK:STDOUT: inst57: concrete_constant(inst56) -// CHECK:STDOUT: inst61: symbolic_constant9 -// CHECK:STDOUT: inst62: symbolic_constant10 +// CHECK:STDOUT: inst28: concrete_constant(inst28) +// CHECK:STDOUT: inst30: concrete_constant(inst26) +// CHECK:STDOUT: inst31: symbolic_constant3 +// CHECK:STDOUT: inst32: symbolic_constant8 +// CHECK:STDOUT: inst33: symbolic_constant4 +// CHECK:STDOUT: inst39: concrete_constant(inst46) +// CHECK:STDOUT: inst40: symbolic_constant5 +// CHECK:STDOUT: inst41: symbolic_constant6 +// CHECK:STDOUT: inst42: symbolic_constant7 +// CHECK:STDOUT: inst43: symbolic_constant8 +// CHECK:STDOUT: inst44: symbolic_constant9 +// CHECK:STDOUT: inst45: concrete_constant(inst45) +// CHECK:STDOUT: inst46: concrete_constant(inst46) +// CHECK:STDOUT: inst47: symbolic_constant10 +// CHECK:STDOUT: inst48: symbolic_constant13 +// CHECK:STDOUT: inst49: symbolic_constant11 +// CHECK:STDOUT: inst50: symbolic_constant14 +// CHECK:STDOUT: inst51: symbolic_constant12 +// CHECK:STDOUT: inst55: symbolic_constant13 +// CHECK:STDOUT: inst57: symbolic_constant14 +// CHECK:STDOUT: inst60: concrete_constant(inst61) +// CHECK:STDOUT: inst61: concrete_constant(inst61) +// CHECK:STDOUT: inst62: concrete_constant(inst61) +// CHECK:STDOUT: inst66: symbolic_constant13 +// CHECK:STDOUT: inst67: symbolic_constant14 // CHECK:STDOUT: symbolic_constants: // CHECK:STDOUT: symbolic_constant0: {inst: inst16, generic: generic, index: generic_inst, kind: checked} -// CHECK:STDOUT: symbolic_constant1: {inst: inst18, generic: generic, index: generic_inst, kind: checked} -// CHECK:STDOUT: symbolic_constant2: {inst: inst29, generic: generic, index: generic_inst, kind: checked} -// CHECK:STDOUT: symbolic_constant3: {inst: inst16, generic: generic0, index: generic_inst_in_decl0, kind: checked} -// CHECK:STDOUT: symbolic_constant4: {inst: inst18, generic: generic0, index: generic_inst_in_decl1, kind: checked} -// CHECK:STDOUT: symbolic_constant5: {inst: inst29, generic: generic0, index: generic_inst_in_decl2, kind: checked} -// CHECK:STDOUT: symbolic_constant6: {inst: inst42, generic: generic, index: generic_inst, kind: checked} -// CHECK:STDOUT: symbolic_constant7: {inst: inst44, generic: generic, index: generic_inst, kind: checked} -// CHECK:STDOUT: symbolic_constant8: {inst: inst46, generic: generic, index: generic_inst, kind: checked} -// CHECK:STDOUT: symbolic_constant9: {inst: inst44, generic: generic0, index: generic_inst_in_def0, kind: checked} -// CHECK:STDOUT: symbolic_constant10: {inst: inst46, generic: generic0, index: generic_inst_in_def1, kind: checked} +// CHECK:STDOUT: symbolic_constant1: {inst: inst19, generic: generic, index: generic_inst, kind: checked} +// CHECK:STDOUT: symbolic_constant2: {inst: inst22, generic: generic, index: generic_inst, kind: checked} +// CHECK:STDOUT: symbolic_constant3: {inst: inst31, generic: generic, index: generic_inst, kind: checked} +// CHECK:STDOUT: symbolic_constant4: {inst: inst33, generic: generic, index: generic_inst, kind: checked} +// CHECK:STDOUT: symbolic_constant5: {inst: inst16, generic: generic0, index: generic_inst_in_decl0, kind: checked} +// CHECK:STDOUT: symbolic_constant6: {inst: inst19, generic: generic0, index: generic_inst_in_decl1, kind: checked} +// CHECK:STDOUT: symbolic_constant7: {inst: inst22, generic: generic0, index: generic_inst_in_decl2, kind: checked} +// CHECK:STDOUT: symbolic_constant8: {inst: inst31, generic: generic0, index: generic_inst_in_decl3, kind: checked} +// CHECK:STDOUT: symbolic_constant9: {inst: inst33, generic: generic0, index: generic_inst_in_decl4, kind: checked} +// CHECK:STDOUT: symbolic_constant10: {inst: inst47, generic: generic, index: generic_inst, kind: checked} +// CHECK:STDOUT: symbolic_constant11: {inst: inst49, generic: generic, index: generic_inst, kind: checked} +// CHECK:STDOUT: symbolic_constant12: {inst: inst51, generic: generic, index: generic_inst, kind: checked} +// CHECK:STDOUT: symbolic_constant13: {inst: inst49, generic: generic0, index: generic_inst_in_def0, kind: checked} +// CHECK:STDOUT: symbolic_constant14: {inst: inst51, generic: generic0, index: generic_inst_in_def1, kind: checked} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: inst_block_empty: {} // CHECK:STDOUT: exports: -// CHECK:STDOUT: 0: inst36 +// CHECK:STDOUT: 0: inst39 // CHECK:STDOUT: import_refs: {} // CHECK:STDOUT: global_init: {} // CHECK:STDOUT: inst_block4: {} // CHECK:STDOUT: inst_block5: -// CHECK:STDOUT: 0: inst17 +// CHECK:STDOUT: 0: inst18 // CHECK:STDOUT: inst_block6: -// CHECK:STDOUT: 0: inst19 +// CHECK:STDOUT: 0: inst20 // CHECK:STDOUT: inst_block7: -// CHECK:STDOUT: 0: inst22 +// CHECK:STDOUT: 0: inst24 // CHECK:STDOUT: inst_block8: -// CHECK:STDOUT: 0: inst23 -// CHECK:STDOUT: 1: inst25 +// CHECK:STDOUT: 0: inst25 +// CHECK:STDOUT: 1: inst27 // CHECK:STDOUT: inst_block9: // CHECK:STDOUT: 0: inst(TypeType) -// CHECK:STDOUT: 1: inst24 +// CHECK:STDOUT: 1: inst26 // CHECK:STDOUT: inst_block10: -// CHECK:STDOUT: 0: inst23 -// CHECK:STDOUT: 1: inst28 +// CHECK:STDOUT: 0: inst25 +// CHECK:STDOUT: 1: inst30 // CHECK:STDOUT: inst_block11: // CHECK:STDOUT: 0: inst16 -// CHECK:STDOUT: 1: inst24 +// CHECK:STDOUT: 1: inst26 // CHECK:STDOUT: inst_block12: -// CHECK:STDOUT: 0: inst33 -// CHECK:STDOUT: 1: inst34 +// CHECK:STDOUT: 0: inst36 +// CHECK:STDOUT: 1: inst37 // CHECK:STDOUT: inst_block13: -// CHECK:STDOUT: 0: inst17 -// CHECK:STDOUT: 1: inst21 -// CHECK:STDOUT: 2: inst22 -// CHECK:STDOUT: 3: inst31 -// CHECK:STDOUT: 4: inst32 +// CHECK:STDOUT: 0: inst18 +// CHECK:STDOUT: 1: inst23 +// CHECK:STDOUT: 2: inst24 +// CHECK:STDOUT: 3: inst34 +// CHECK:STDOUT: 4: inst35 // CHECK:STDOUT: inst_block14: -// CHECK:STDOUT: 0: inst23 -// CHECK:STDOUT: 1: inst25 -// CHECK:STDOUT: 2: inst27 -// CHECK:STDOUT: 3: inst28 -// CHECK:STDOUT: 4: inst30 +// CHECK:STDOUT: 0: inst25 +// CHECK:STDOUT: 1: inst27 +// CHECK:STDOUT: 2: inst29 +// CHECK:STDOUT: 3: inst30 +// CHECK:STDOUT: 4: inst32 // CHECK:STDOUT: 5: inst15 -// CHECK:STDOUT: 6: inst33 -// CHECK:STDOUT: 7: inst19 -// CHECK:STDOUT: 8: inst20 -// CHECK:STDOUT: 9: inst34 -// CHECK:STDOUT: 10: inst35 +// CHECK:STDOUT: 6: inst36 +// CHECK:STDOUT: 7: inst20 +// CHECK:STDOUT: 8: inst21 +// CHECK:STDOUT: 9: inst37 +// CHECK:STDOUT: 10: inst38 // CHECK:STDOUT: inst_block15: // CHECK:STDOUT: 0: inst15 // CHECK:STDOUT: inst_block16: // CHECK:STDOUT: 0: inst16 // CHECK:STDOUT: inst_block17: -// CHECK:STDOUT: 0: inst37 -// CHECK:STDOUT: 1: inst24 +// CHECK:STDOUT: 0: inst40 +// CHECK:STDOUT: 1: inst26 // CHECK:STDOUT: inst_block18: -// CHECK:STDOUT: 0: inst37 -// CHECK:STDOUT: 1: inst38 -// CHECK:STDOUT: 2: inst39 +// CHECK:STDOUT: 0: inst40 +// CHECK:STDOUT: 1: inst41 +// CHECK:STDOUT: 2: inst42 +// CHECK:STDOUT: 3: inst43 +// CHECK:STDOUT: 4: inst44 // CHECK:STDOUT: inst_block19: // CHECK:STDOUT: 0: inst16 -// CHECK:STDOUT: 1: inst18 -// CHECK:STDOUT: 2: inst29 +// CHECK:STDOUT: 1: inst19 +// CHECK:STDOUT: 2: inst22 +// CHECK:STDOUT: 3: inst31 +// CHECK:STDOUT: 4: inst33 // CHECK:STDOUT: inst_block20: -// CHECK:STDOUT: 0: inst47 -// CHECK:STDOUT: 1: inst48 -// CHECK:STDOUT: 2: inst49 -// CHECK:STDOUT: 3: inst51 -// CHECK:STDOUT: 4: inst53 -// CHECK:STDOUT: 5: inst54 -// CHECK:STDOUT: 6: inst55 -// CHECK:STDOUT: 7: inst57 -// CHECK:STDOUT: 8: inst58 -// CHECK:STDOUT: 9: inst59 -// CHECK:STDOUT: 10: inst60 +// CHECK:STDOUT: 0: inst52 +// CHECK:STDOUT: 1: inst53 +// CHECK:STDOUT: 2: inst54 +// CHECK:STDOUT: 3: inst56 +// CHECK:STDOUT: 4: inst58 +// CHECK:STDOUT: 5: inst59 +// CHECK:STDOUT: 6: inst60 +// CHECK:STDOUT: 7: inst62 +// CHECK:STDOUT: 8: inst63 +// CHECK:STDOUT: 9: inst64 +// CHECK:STDOUT: 10: inst65 // CHECK:STDOUT: inst_block21: -// CHECK:STDOUT: 0: inst47 -// CHECK:STDOUT: 1: inst48 +// CHECK:STDOUT: 0: inst52 +// CHECK:STDOUT: 1: inst53 // CHECK:STDOUT: inst_block22: -// CHECK:STDOUT: 0: inst53 -// CHECK:STDOUT: 1: inst57 -// CHECK:STDOUT: inst_block23: -// CHECK:STDOUT: 0: inst61 +// CHECK:STDOUT: 0: inst58 // CHECK:STDOUT: 1: inst62 +// CHECK:STDOUT: inst_block23: +// CHECK:STDOUT: 0: inst66 +// CHECK:STDOUT: 1: inst67 // CHECK:STDOUT: inst_block24: // CHECK:STDOUT: 0: inst14 -// CHECK:STDOUT: 1: inst36 +// CHECK:STDOUT: 1: inst39 // CHECK:STDOUT: ... diff --git a/toolchain/driver/testdata/compile/textual_ir.carbon b/toolchain/driver/testdata/compile/textual_ir.carbon index ab5de37fc1de..036299b3cd39 100644 --- a/toolchain/driver/testdata/compile/textual_ir.carbon +++ b/toolchain/driver/testdata/compile/textual_ir.carbon @@ -20,7 +20,9 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete] // CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_tuple.type, %empty_tuple.type) [concrete] +// CHECK:STDOUT: %pattern_type.5b8: type = pattern_type %tuple.type [concrete] // CHECK:STDOUT: %Foo.type: type = fn_type @Foo [concrete] // CHECK:STDOUT: %Foo: %Foo.type = struct_value () [concrete] // CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete] @@ -32,10 +34,10 @@ fn Foo(n: ()) -> ((), ()) { // CHECK:STDOUT: .Foo = %Foo.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { -// CHECK:STDOUT: %n.patt: %empty_tuple.type = binding_pattern n -// CHECK:STDOUT: %n.param_patt: %empty_tuple.type = value_param_pattern %n.patt, call_param0 -// CHECK:STDOUT: %return.patt: %tuple.type = return_slot_pattern -// CHECK:STDOUT: %return.param_patt: %tuple.type = out_param_pattern %return.patt, call_param1 +// CHECK:STDOUT: %n.patt: %pattern_type.cb1 = binding_pattern n +// CHECK:STDOUT: %n.param_patt: %pattern_type.cb1 = value_param_pattern %n.patt, call_param0 +// CHECK:STDOUT: %return.patt: %pattern_type.5b8 = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %pattern_type.5b8 = out_param_pattern %return.patt, call_param1 // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc15_20: %empty_tuple.type = tuple_literal () // CHECK:STDOUT: %.loc15_24: %empty_tuple.type = tuple_literal () diff --git a/toolchain/lower/file_context.cpp b/toolchain/lower/file_context.cpp index 0d84d441f6e3..2891a908ab30 100644 --- a/toolchain/lower/file_context.cpp +++ b/toolchain/lower/file_context.cpp @@ -275,8 +275,9 @@ auto FileContext::BuildFunctionTypeInfo(const SemIR::Function& function, if (!param_pattern_info) { continue; } - auto param_type_id = SemIR::GetTypeOfInstInSpecific( - sem_ir(), specific_id, param_pattern_info->inst_id); + auto param_type_id = ExtractScrutineeType( + sem_ir(), SemIR::GetTypeOfInstInSpecific(sem_ir(), specific_id, + param_pattern_info->inst_id)); CARBON_CHECK( !param_type_id.AsConstantId().is_symbolic(), "Found symbolic type id after resolution when lowering type {0}.", @@ -611,6 +612,11 @@ static auto BuildTypeForInst(FileContext& context, SemIR::PointerType /*inst*/) return llvm::PointerType::get(context.llvm_context(), /*AddressSpace=*/0); } +static auto BuildTypeForInst(FileContext& /*context*/, + SemIR::PatternType /*inst*/) -> llvm::Type* { + CARBON_FATAL("Unexpected pattern type in lowering"); +} + static auto BuildTypeForInst(FileContext& context, SemIR::StructType inst) -> llvm::Type* { auto fields = context.sem_ir().struct_type_fields().Get(inst.fields_id); diff --git a/toolchain/sem_ir/expr_info.cpp b/toolchain/sem_ir/expr_info.cpp index 9e73a88de765..0067694a6873 100644 --- a/toolchain/sem_ir/expr_info.cpp +++ b/toolchain/sem_ir/expr_info.cpp @@ -132,6 +132,7 @@ auto GetExprCategory(const File& file, InstId inst_id) -> ExprCategory { case InterfaceDecl::Kind: case LegacyFloatType::Kind: case NamespaceType::Kind: + case PatternType::Kind: case PointerType::Kind: case RefineTypeAction::Kind: case RequireCompleteType::Kind: diff --git a/toolchain/sem_ir/function.cpp b/toolchain/sem_ir/function.cpp index 243c371f0eba..b164a450d958 100644 --- a/toolchain/sem_ir/function.cpp +++ b/toolchain/sem_ir/function.cpp @@ -95,7 +95,8 @@ auto Function::GetDeclaredReturnType(const File& file, if (!return_slot_pattern_id.has_value()) { return TypeId::None; } - return GetTypeOfInstInSpecific(file, specific_id, return_slot_pattern_id); + return ExtractScrutineeType( + file, GetTypeOfInstInSpecific(file, specific_id, return_slot_pattern_id)); } } // namespace Carbon::SemIR diff --git a/toolchain/sem_ir/inst_kind.def b/toolchain/sem_ir/inst_kind.def index 6d1e821bb3e8..61e23ff27774 100644 --- a/toolchain/sem_ir/inst_kind.def +++ b/toolchain/sem_ir/inst_kind.def @@ -94,6 +94,7 @@ CARBON_SEM_IR_INST_KIND(Namespace) CARBON_SEM_IR_INST_KIND(NamespaceType) CARBON_SEM_IR_INST_KIND(OutParam) CARBON_SEM_IR_INST_KIND(OutParamPattern) +CARBON_SEM_IR_INST_KIND(PatternType) CARBON_SEM_IR_INST_KIND(PointerType) CARBON_SEM_IR_INST_KIND(RefParam) CARBON_SEM_IR_INST_KIND(RefParamPattern) diff --git a/toolchain/sem_ir/inst_namer.cpp b/toolchain/sem_ir/inst_namer.cpp index 38ea0369f854..b4d3827600b9 100644 --- a/toolchain/sem_ir/inst_namer.cpp +++ b/toolchain/sem_ir/inst_namer.cpp @@ -820,6 +820,10 @@ auto InstNamer::CollectNamesInBlock(ScopeId top_scope_id, ".param_patt"); continue; } + case PatternType::Kind: { + add_inst_name("pattern_type"); + continue; + } case PointerType::Kind: { add_inst_name("ptr"); continue; diff --git a/toolchain/sem_ir/stringify.cpp b/toolchain/sem_ir/stringify.cpp index ea7a8491cbea..a343b488d6dc 100644 --- a/toolchain/sem_ir/stringify.cpp +++ b/toolchain/sem_ir/stringify.cpp @@ -501,6 +501,11 @@ class Stringifier { name_scope.name_id()); } + auto StringifyInst(InstId /*inst_id*/, PatternType inst) -> void { + *out_ << "Push(inst.scrutinee_type_inst_id, ">"); + } + auto StringifyInst(InstId /*inst_id*/, PointerType inst) -> void { step_stack_->Push(inst.pointee_id, "*"); } diff --git a/toolchain/sem_ir/type.cpp b/toolchain/sem_ir/type.cpp index 96993be625c8..9ad7a996d18e 100644 --- a/toolchain/sem_ir/type.cpp +++ b/toolchain/sem_ir/type.cpp @@ -107,4 +107,17 @@ auto TypeStore::GetIntTypeInfo(TypeId int_type_id) const -> IntTypeInfo { return *int_info; } +auto ExtractScrutineeType(const File& sem_ir, SemIR::TypeId type_id) + -> SemIR::TypeId { + if (auto pattern_type = + sem_ir.types().TryGetAs(type_id)) { + return sem_ir.types().GetTypeIdForTypeInstId( + pattern_type->scrutinee_type_inst_id); + } + CARBON_CHECK(type_id == SemIR::ErrorInst::TypeId, + "Inst kind doesn't have scrutinee type: {0}", + sem_ir.types().GetAsInst(type_id).kind()); + return type_id; +} + } // namespace Carbon::SemIR diff --git a/toolchain/sem_ir/type.h b/toolchain/sem_ir/type.h index b5335227c928..b009e5c50c78 100644 --- a/toolchain/sem_ir/type.h +++ b/toolchain/sem_ir/type.h @@ -207,6 +207,10 @@ class TypeStore : public Yaml::Printable { llvm::SmallVector complete_types_; }; +// Returns the scrutinee type of `type_id`, which must be a `PatternType`. +auto ExtractScrutineeType(const File& sem_ir, SemIR::TypeId type_id) + -> SemIR::TypeId; + } // namespace Carbon::SemIR #endif // CARBON_TOOLCHAIN_SEM_IR_TYPE_H_ diff --git a/toolchain/sem_ir/typed_insts.h b/toolchain/sem_ir/typed_insts.h index ff9033212c96..0be8f9113214 100644 --- a/toolchain/sem_ir/typed_insts.h +++ b/toolchain/sem_ir/typed_insts.h @@ -118,6 +118,8 @@ struct AddrPattern { .constant_kind = InstConstantKind::Never, .is_lowered = false}); + // Always a PatternType whose scrutinee type represents the pointee type + // corresponding to the pointer type of `inner_id`. TypeId type_id; // The `self` binding. InstId inner_id; @@ -369,6 +371,9 @@ struct AnyBindingPattern { InstKind::SymbolicBindingPattern}; InstKind kind; + + // Always a PatternType whose scrutinee type is the declared type of the + // binding. TypeId type_id; // The name declared by the binding pattern. `None` indicates that the @@ -1277,6 +1282,9 @@ struct AnyParamPattern { InstKind::ValueParamPattern}; InstKind kind; + + // Always a PatternType that represents the same type as the type of + // `subpattern_id`. TypeId type_id; InstId subpattern_id; CallParamIndex index; @@ -1320,6 +1328,19 @@ struct ValueParamPattern { CallParamIndex index; }; +// The type of a pattern that matches scrutinees of type +// `scrutinee_type_inst_id`. +struct PatternType { + static constexpr auto Kind = InstKind::PatternType.Define( + {.ir_name = "pattern_type", + .is_type = InstIsType::Always, + .constant_kind = InstConstantKind::Always}); + + // Always the builtin type TypeType. + TypeId type_id; + TypeInstId scrutinee_type_inst_id; +}; + // Modifies a pointee type to be a pointer. This is tracking the `*` in // `x: i32*`, where `pointee_id` is `i32` and `type_id` is `type`. struct PointerType { @@ -1422,8 +1443,8 @@ struct ReturnSlotPattern { .constant_kind = InstConstantKind::Never, .is_lowered = false}); - // The type of the value that will be stored in this slot (i.e. the return - // type of the function). + // Always a PatternType whose scrutinee type is the return type of the + // function. TypeId type_id; // The function return type as originally written by the user. For diagnostics @@ -1720,6 +1741,8 @@ struct TuplePattern { .constant_kind = InstConstantKind::Never, .is_lowered = false}); + // Always a PatternType whose scrutinee type is a tuple of the scrutinee + // types of the elements. TypeId type_id; InstBlockId elements_id; }; @@ -1839,6 +1862,8 @@ struct VarPattern { .constant_kind = InstConstantKind::Never, .is_lowered = false}); + // Always a PatternType that represents the same type as the type of + // `subpattern_id`. TypeId type_id; InstId subpattern_id; };