diff --git a/toolchain/check/context.cpp b/toolchain/check/context.cpp index a8b351e810136..775dd4eeecf09 100644 --- a/toolchain/check/context.cpp +++ b/toolchain/check/context.cpp @@ -115,7 +115,8 @@ auto Context::FinishInst(SemIR::InstId inst_id, SemIR::Inst inst) -> void { // If the instruction has a symbolic constant type, track that we need to // substitute into it. - if (types().GetConstantId(inst.type_id()).is_symbolic()) { + if (constant_values().DependsOnGenericParameter( + types().GetConstantId(inst.type_id()))) { dep_kind |= GenericRegionStack::DependencyKind::SymbolicType; } @@ -128,7 +129,7 @@ auto Context::FinishInst(SemIR::InstId inst_id, SemIR::Inst inst) -> void { // If the constant value is symbolic, track that we need to substitute into // it. - if (const_id.is_symbolic()) { + if (constant_values().DependsOnGenericParameter(const_id)) { dep_kind |= GenericRegionStack::DependencyKind::SymbolicConstant; } } @@ -1281,7 +1282,7 @@ auto Context::TryToDefineType(SemIR::TypeId type_id, ResolveSpecificDefinition(*this, interface.specific_id); } } - // TODO: Process other requirements. + // TODO: Finish facet type resolution. } return true; @@ -1304,9 +1305,9 @@ auto Context::GetTypeIdForTypeConstant(SemIR::ConstantId constant_id) auto Context::FacetTypeFromInterface(SemIR::InterfaceId interface_id, SemIR::SpecificId specific_id) -> SemIR::FacetType { - SemIR::FacetTypeId facet_type_id = facet_types().Add(SemIR::FacetTypeInfo{ - .impls_constraints = {{interface_id, specific_id}}, - .requirement_block_id = SemIR::InstBlockId::Invalid}); + SemIR::FacetTypeId facet_type_id = facet_types().Add( + SemIR::FacetTypeInfo{.impls_constraints = {{interface_id, specific_id}}, + .other_requirements = false}); return {.type_id = SemIR::TypeId::TypeType, .facet_type_id = facet_type_id}; } diff --git a/toolchain/check/context.h b/toolchain/check/context.h index 2857223bf55d4..6160b791575df 100644 --- a/toolchain/check/context.h +++ b/toolchain/check/context.h @@ -162,13 +162,6 @@ class Context { return AddPatternInst(SemIR::LocIdAndInst(node_id, inst)); } - // Adds an instruction to the constants block, returning the produced ID. - auto AddConstant(SemIR::Inst inst, bool is_symbolic) -> SemIR::ConstantId { - auto const_id = constants().GetOrAdd(inst, is_symbolic); - CARBON_VLOG("AddConstant: {0}\n", inst); - return const_id; - } - // Pushes a parse tree node onto the stack, storing the SemIR::Inst as the // result. template diff --git a/toolchain/check/eval.cpp b/toolchain/check/eval.cpp index 4cc491637ec74..83f893a7c50e4 100644 --- a/toolchain/check/eval.cpp +++ b/toolchain/check/eval.cpp @@ -178,6 +178,9 @@ namespace { enum class Phase : uint8_t { // Value could be entirely and concretely computed. Template, + // Evaluation phase is symbolic because the expression involves specifically a + // reference to `.Self`. + PeriodSelfSymbolic, // Evaluation phase is symbolic because the expression involves a reference to // a symbolic binding. Symbolic, @@ -191,16 +194,20 @@ enum class Phase : uint8_t { } // namespace // Gets the phase in which the value of a constant will become available. -static auto GetPhase(SemIR::ConstantId constant_id) -> Phase { +static auto GetPhase(EvalContext& eval_context, SemIR::ConstantId constant_id) + -> Phase { if (!constant_id.is_constant()) { return Phase::Runtime; } else if (constant_id == SemIR::ConstantId::Error) { return Phase::UnknownDueToError; } else if (constant_id.is_template()) { return Phase::Template; + } else if (eval_context.constant_values().DependsOnGenericParameter( + constant_id)) { + return Phase::Symbolic; } else { CARBON_CHECK(constant_id.is_symbolic()); - return Phase::Symbolic; + return Phase::PeriodSelfSymbolic; } } @@ -210,14 +217,34 @@ static auto LatestPhase(Phase a, Phase b) -> Phase { std::max(static_cast(a), static_cast(b))); } +// `where` expressions using `.Self` should not be considered symbolic +// - `Interface where .Self impls I and .A = bool` -> template +// - `T:! type` ... `Interface where .A = T` -> symbolic, since uses `T` which +// is symbolic and not due to `.Self`. +static auto UpdatePhaseIgnorePeriodSelf(EvalContext& eval_context, + SemIR::ConstantId constant_id, + Phase* phase) { + Phase constant_phase = GetPhase(eval_context, constant_id); + // Since LatestPhase(x, Phase::Template) == x, this is equivalent to replacing + // Phase::PeriodSelfSymbolic with Phase::Template. + if (constant_phase != Phase::PeriodSelfSymbolic) { + *phase = LatestPhase(*phase, constant_phase); + } +} + // Forms a `constant_id` describing a given evaluation result. static auto MakeConstantResult(Context& context, SemIR::Inst inst, Phase phase) -> SemIR::ConstantId { switch (phase) { case Phase::Template: - return context.AddConstant(inst, /*is_symbolic=*/false); + return context.constants().GetOrAdd(inst, + SemIR::ConstantStore::IsTemplate); + case Phase::PeriodSelfSymbolic: + return context.constants().GetOrAdd( + inst, SemIR::ConstantStore::IsPeriodSelfSymbolic); case Phase::Symbolic: - return context.AddConstant(inst, /*is_symbolic=*/true); + return context.constants().GetOrAdd(inst, + SemIR::ConstantStore::IsSymbolic); case Phase::UnknownDueToError: return SemIR::ConstantId::Error; case Phase::Runtime: @@ -270,7 +297,7 @@ static auto MakeFloatResult(Context& context, SemIR::TypeId type_id, static auto GetConstantValue(EvalContext& eval_context, SemIR::InstId inst_id, Phase* phase) -> SemIR::InstId { auto const_id = eval_context.GetConstantValue(inst_id); - *phase = LatestPhase(*phase, GetPhase(const_id)); + *phase = LatestPhase(*phase, GetPhase(eval_context, const_id)); return eval_context.constant_values().GetInstId(const_id); } @@ -279,7 +306,7 @@ static auto GetConstantValue(EvalContext& eval_context, SemIR::InstId inst_id, static auto GetConstantValue(EvalContext& eval_context, SemIR::TypeId type_id, Phase* phase) -> SemIR::TypeId { auto const_id = eval_context.GetConstantValue(type_id); - *phase = LatestPhase(*phase, GetPhase(const_id)); + *phase = LatestPhase(*phase, GetPhase(eval_context, const_id)); return eval_context.context().GetTypeIdForTypeConstant(const_id); } @@ -395,7 +422,7 @@ static auto GetConstantValue(EvalContext& eval_context, } // Like `GetConstantValue` but does a `FacetTypeId` -> `FacetTypeInfo` -// conversion. +// conversion. Does not perform canonicalization. static auto GetConstantFacetTypeInfo(EvalContext& eval_context, SemIR::FacetTypeId facet_type_id, Phase* phase) -> SemIR::FacetTypeInfo { @@ -404,8 +431,14 @@ static auto GetConstantFacetTypeInfo(EvalContext& eval_context, interface.specific_id = GetConstantValue(eval_context, interface.specific_id, phase); } - std::sort(info.impls_constraints.begin(), info.impls_constraints.end()); - // TODO: Process & canonicalize other requirements. + for (auto& rewrite : info.rewrite_constraints) { + rewrite.lhs_const_id = eval_context.GetInContext(rewrite.lhs_const_id); + rewrite.rhs_const_id = eval_context.GetInContext(rewrite.rhs_const_id); + // `where` requirements using `.Self` should not be considered symbolic + UpdatePhaseIgnorePeriodSelf(eval_context, rewrite.lhs_const_id, phase); + UpdatePhaseIgnorePeriodSelf(eval_context, rewrite.rhs_const_id, phase); + } + // TODO: Process other requirements. return info; } @@ -524,7 +557,8 @@ static auto PerformAggregateAccess(EvalContext& eval_context, SemIR::Inst inst) return eval_context.GetConstantValue(elements[index]); } else { CARBON_CHECK(phase != Phase::Template, - "Failed to evaluate template constant {0}", inst); + "Failed to evaluate template constant {0} arg0: {1}", inst, + eval_context.insts().Get(access_inst.aggregate_id)); } return MakeConstantResult(eval_context.context(), access_inst, phase); } @@ -1461,6 +1495,7 @@ static auto TryEvalInstInContext(EvalContext& eval_context, Phase phase = Phase::Template; SemIR::FacetTypeInfo info = GetConstantFacetTypeInfo( eval_context, facet_type.facet_type_id, &phase); + info.Canonicalize(); // TODO: Reuse `inst` if we can detect that nothing has changed. return MakeFacetTypeResult(eval_context.context(), info, phase); } @@ -1570,21 +1605,30 @@ static auto TryEvalInstInContext(EvalContext& eval_context, const auto& bind_name = eval_context.entity_names().Get(bind.entity_name_id); - // If we know which specific we're evaluating within and this is an - // argument of that specific, its constant value is the corresponding - // argument value. - if (auto value = - eval_context.GetCompileTimeBindValue(bind_name.bind_index); - value.is_valid()) { - return value; + Phase phase; + if (bind_name.name_id == SemIR::NameId::PeriodSelf) { + phase = Phase::PeriodSelfSymbolic; + } else { + // If we know which specific we're evaluating within and this is an + // argument of that specific, its constant value is the corresponding + // argument value. + if (auto value = + eval_context.GetCompileTimeBindValue(bind_name.bind_index); + value.is_valid()) { + return value; + } + phase = Phase::Symbolic; } - // The constant form of a symbolic binding is an idealized form of the // original, with no equivalent value. bind.entity_name_id = eval_context.entity_names().MakeCanonical(bind.entity_name_id); bind.value_id = SemIR::InstId::Invalid; - return MakeConstantResult(eval_context.context(), bind, Phase::Symbolic); + if (!ReplaceFieldWithConstantValue( + eval_context, &bind, &SemIR::BindSymbolicName::type_id, &phase)) { + return MakeNonConstantResult(phase); + } + return MakeConstantResult(eval_context.context(), bind, phase); } // These semantic wrappers don't change the constant value. @@ -1652,8 +1696,7 @@ static auto TryEvalInstInContext(EvalContext& eval_context, eval_context.insts().Get(typed_inst.period_self_id).type_id(); SemIR::Inst base_facet_inst = eval_context.GetConstantValueAsInst(base_facet_type_id); - SemIR::FacetTypeInfo info = {.requirement_block_id = - SemIR::InstBlockId::Invalid}; + SemIR::FacetTypeInfo info = {.other_requirements = false}; // `where` provides that the base facet is an error, `type`, or a facet // type. if (auto facet_type = base_facet_inst.TryAs()) { @@ -1666,8 +1709,29 @@ static auto TryEvalInstInContext(EvalContext& eval_context, "Unexpected type_id: {0}, inst: {1}", base_facet_type_id, base_facet_inst); } - // TODO: Combine other requirements, and then process & canonicalize them. - info.requirement_block_id = typed_inst.requirements_id; + if (typed_inst.requirements_id.is_valid()) { + auto insts = eval_context.inst_blocks().Get(typed_inst.requirements_id); + for (auto inst_id : insts) { + if (auto rewrite = + eval_context.insts().TryGetAs( + inst_id)) { + SemIR::ConstantId lhs = + eval_context.GetConstantValue(rewrite->lhs_id); + SemIR::ConstantId rhs = + eval_context.GetConstantValue(rewrite->rhs_id); + // `where` requirements using `.Self` should not be considered + // symbolic + UpdatePhaseIgnorePeriodSelf(eval_context, lhs, &phase); + UpdatePhaseIgnorePeriodSelf(eval_context, rhs, &phase); + info.rewrite_constraints.push_back( + {.lhs_const_id = lhs, .rhs_const_id = rhs}); + } else { + // TODO: Handle other requirements + info.other_requirements = true; + } + } + } + info.Canonicalize(); return MakeFacetTypeResult(eval_context.context(), info, phase); } @@ -1675,7 +1739,7 @@ static auto TryEvalInstInContext(EvalContext& eval_context, // All other uses of unary `not` are non-constant. case CARBON_KIND(SemIR::UnaryOperatorNot typed_inst): { auto const_id = eval_context.GetConstantValue(typed_inst.operand_id); - auto phase = GetPhase(const_id); + auto phase = GetPhase(eval_context, const_id); if (phase == Phase::Template) { auto value = eval_context.insts().GetAs( eval_context.constant_values().GetInstId(const_id)); diff --git a/toolchain/check/generic.cpp b/toolchain/check/generic.cpp index d4fab6c2f5f75..3855fb25abc13 100644 --- a/toolchain/check/generic.cpp +++ b/toolchain/check/generic.cpp @@ -81,7 +81,7 @@ class RebuildGenericConstantInEvalBlockCallbacks final context_.insts().Get(inst_id)); return true; } - if (!const_id.is_symbolic()) { + if (!context_.constant_values().DependsOnGenericParameter(const_id)) { // This instruction doesn't have a symbolic constant value, so can't // contain any bindings that need to be substituted. return true; @@ -104,8 +104,12 @@ class RebuildGenericConstantInEvalBlockCallbacks final // block. if (auto binding = context_.insts().TryGetAs(inst_id)) { - inst_id = Rebuild(inst_id, *binding); - return true; + if (context_.entity_names() + .Get(binding->entity_name_id) + .bind_index.is_valid()) { + inst_id = Rebuild(inst_id, *binding); + return true; + } } if (auto pattern = diff --git a/toolchain/check/handle_where.cpp b/toolchain/check/handle_where.cpp index d7918925c27d3..bd26bd623251b 100644 --- a/toolchain/check/handle_where.cpp +++ b/toolchain/check/handle_where.cpp @@ -27,22 +27,19 @@ auto HandleParseNode(Context& context, Parse::WhereOperandId node_id) -> bool { // Introduce a name scope so that we can remove the `.Self` entry we are // adding to name lookup at the end of the `where` expression. context.scope_stack().Push(); - // Create a generic region containing `.Self` and the constraints. - StartGenericDecl(context); // Introduce `.Self` as a symbolic binding. Its type is the value of the // expression to the left of `where`, so `MyInterface` in the example above. - // Because there is no equivalent non-symbolic value, we use `Invalid` as - // the `value_id` on the `BindSymbolicName`. auto entity_name_id = context.entity_names().Add( {.name_id = SemIR::NameId::PeriodSelf, .parent_scope_id = context.scope_stack().PeekNameScopeId(), - .bind_index = context.scope_stack().AddCompileTimeBinding()}); + // Invalid because this is not the parameter of a generic. + .bind_index = SemIR::CompileTimeBindIndex::Invalid}); auto inst_id = context.AddInst(SemIR::LocIdAndInst::NoLoc( {.type_id = self_type_id, .entity_name_id = entity_name_id, + // Invalid because there is no equivalent non-symbolic value. .value_id = SemIR::InstId::Invalid})); - context.scope_stack().PushCompileTimeBinding(inst_id); auto existing = context.scope_stack().LookupOrAddName(SemIR::NameId::PeriodSelf, inst_id); // Shouldn't have any names in newly created scope. @@ -122,9 +119,6 @@ auto HandleParseNode(Context& /*context*/, Parse::RequirementAndId /*node_id*/) } auto HandleParseNode(Context& context, Parse::WhereExprId node_id) -> bool { - // Discard the generic region containing `.Self` and the constraints. - // TODO: Decide if we want to build a `Generic` object for this. - DiscardGenericDecl(context); // Remove `PeriodSelf` from name lookup, undoing the `Push` done for the // `WhereOperand`. context.scope_stack().Pop(); diff --git a/toolchain/check/impl.cpp b/toolchain/check/impl.cpp index 24006ef82b184..66dc1bb4fe7c1 100644 --- a/toolchain/check/impl.cpp +++ b/toolchain/check/impl.cpp @@ -200,11 +200,14 @@ static auto BuildInterfaceWitness( } break; } - case SemIR::AssociatedConstantDecl::Kind: + case CARBON_KIND(SemIR::AssociatedConstantDecl associated): { // TODO: Check we have a value for this constant in the constraint. - context.TODO(impl.definition_id, - "impl of interface with associated constant"); + context.TODO( + impl.definition_id, + "impl of interface with associated constant " + + context.names().GetFormatted(associated.name_id).str()); return SemIR::InstId::BuiltinErrorInst; + } default: CARBON_CHECK(decl_id == SemIR::InstId::BuiltinErrorInst, "Unexpected kind of associated entity {0}", decl); diff --git a/toolchain/check/import_ref.cpp b/toolchain/check/import_ref.cpp index b374b160fd3b3..f8082f1a0cadd 100644 --- a/toolchain/check/import_ref.cpp +++ b/toolchain/check/import_ref.cpp @@ -614,10 +614,12 @@ class ImportRefResolver : public ImportContext { }; } // namespace -static auto AddImportRef(ImportContext& context, SemIR::InstId inst_id) - -> SemIR::InstId { +static auto AddImportRef(ImportContext& context, SemIR::InstId inst_id, + SemIR::EntityNameId entity_name_id = + SemIR::EntityNameId::Invalid) -> SemIR::InstId { return AddImportRef(context.local_context(), - {.ir_id = context.import_ir_id(), .inst_id = inst_id}); + {.ir_id = context.import_ir_id(), .inst_id = inst_id}, + entity_name_id); } static auto AddLoadedImportRef(ImportContext& context, SemIR::TypeId type_id, @@ -1208,6 +1210,7 @@ static auto AddNameScopeImportRefs(ImportContext& context, // Given a block ID for a list of associated entities of a witness, returns a // version localized to the current IR. static auto AddAssociatedEntities(ImportContext& context, + SemIR::NameScopeId local_name_scope_id, SemIR::InstBlockId associated_entities_id) -> SemIR::InstBlockId { if (associated_entities_id == SemIR::InstBlockId::Empty) { @@ -1218,7 +1221,28 @@ static auto AddAssociatedEntities(ImportContext& context, llvm::SmallVector new_associated_entities; new_associated_entities.reserve(associated_entities.size()); for (auto inst_id : associated_entities) { - new_associated_entities.push_back(AddImportRef(context, inst_id)); + // Determine the name of the associated entity, by switching on its type. + SemIR::NameId import_name_id = SemIR::NameId::Invalid; + if (auto associated_const = + context.import_insts().TryGetAs( + inst_id)) { + import_name_id = associated_const->name_id; + } else if (auto function_decl = + context.import_insts().TryGetAs( + inst_id)) { + auto function = + context.import_functions().Get(function_decl->function_id); + import_name_id = function.name_id; + } else { + CARBON_CHECK("Unhandled associated entity type"); + } + auto name_id = GetLocalNameId(context, import_name_id); + auto entity_name_id = context.local_entity_names().Add( + {.name_id = name_id, + .parent_scope_id = local_name_scope_id, + .bind_index = SemIR::CompileTimeBindIndex::Invalid}); + new_associated_entities.push_back( + AddImportRef(context, inst_id, entity_name_id)); } return context.local_inst_blocks().Add(new_associated_entities); } @@ -1987,8 +2011,8 @@ static auto AddInterfaceDefinition(ImportContext& context, // Push a block so that we can add scoped instructions to it. context.local_context().inst_block_stack().Push(); AddNameScopeImportRefs(context, import_scope, new_scope); - new_interface.associated_entities_id = - AddAssociatedEntities(context, import_interface.associated_entities_id); + new_interface.associated_entities_id = AddAssociatedEntities( + context, new_interface.scope_id, import_interface.associated_entities_id); new_interface.body_block_id = context.local_context().inst_block_stack().Pop(); new_interface.self_param_id = self_param_id; @@ -2091,6 +2115,21 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, .facet_value_inst_id = facet_value_inst_id}); } +static auto TryResolveTypedInst(ImportRefResolver& resolver, + SemIR::FacetAccessWitness inst) + -> ResolveResult { + auto facet_value_inst_id = + GetLocalConstantInstId(resolver, inst.facet_value_inst_id); + if (resolver.HasNewWork()) { + return ResolveResult::Retry(); + } + + return ResolveAs( + resolver, {.type_id = resolver.local_context().GetBuiltinType( + SemIR::BuiltinInstKind::WitnessType), + .facet_value_inst_id = facet_value_inst_id}); +} + static auto TryResolveTypedInst(ImportRefResolver& resolver, SemIR::FacetType inst) -> ResolveResult { CARBON_CHECK(inst.type_id == SemIR::TypeId::TypeType); @@ -2103,6 +2142,10 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, .first_owning_decl_id); GetLocalSpecificData(resolver, interface.specific_id); } + for (auto rewrite : facet_type_info.rewrite_constraints) { + GetLocalConstantId(resolver, rewrite.lhs_const_id); + GetLocalConstantId(resolver, rewrite.rhs_const_id); + } if (resolver.HasNewWork()) { return ResolveResult::Retry(); } @@ -2135,11 +2178,19 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, {generic_interface_type.interface_id, specific_id}); } } + llvm::SmallVector + rewrite_constraints; + for (auto rewrite : facet_type_info.rewrite_constraints) { + rewrite_constraints.push_back( + {.lhs_const_id = GetLocalConstantId(resolver, rewrite.lhs_const_id), + .rhs_const_id = GetLocalConstantId(resolver, rewrite.rhs_const_id)}); + } // TODO: Also process the other requirements. SemIR::FacetTypeId facet_type_id = resolver.local_facet_types().Add(SemIR::FacetTypeInfo{ .impls_constraints = impls_constraints, - .requirement_block_id = SemIR::InstBlockId::Invalid}); + .rewrite_constraints = rewrite_constraints, + .other_requirements = facet_type_info.other_requirements}); return ResolveAs( resolver, {.type_id = SemIR::TypeId::TypeType, .facet_type_id = facet_type_id}); @@ -2176,6 +2227,22 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, .elements_id = elements_id}); } +static auto TryResolveTypedInst(ImportRefResolver& resolver, + SemIR::InterfaceWitnessAccess inst) + -> ResolveResult { + auto type_id = GetLocalConstantId(resolver, inst.type_id); + auto witness_id = GetLocalConstantInstId(resolver, inst.witness_id); + if (resolver.HasNewWork()) { + return ResolveResult::Retry(); + } + + return ResolveAs( + resolver, + {.type_id = resolver.local_context().GetTypeIdForTypeConstant(type_id), + .witness_id = witness_id, + .index = inst.index}); +} + static auto TryResolveTypedInst(ImportRefResolver& resolver, SemIR::IntValue inst) -> ResolveResult { auto type_id = GetLocalConstantId(resolver, inst.type_id); @@ -2404,6 +2471,9 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, case CARBON_KIND(SemIR::FacetAccessType inst): { return TryResolveTypedInst(resolver, inst); } + case CARBON_KIND(SemIR::FacetAccessWitness inst): { + return TryResolveTypedInst(resolver, inst); + } case CARBON_KIND(SemIR::FacetType inst): { return TryResolveTypedInst(resolver, inst); } @@ -2437,6 +2507,9 @@ static auto TryResolveInstCanonical(ImportRefResolver& resolver, case CARBON_KIND(SemIR::InterfaceWitness inst): { return TryResolveTypedInst(resolver, inst); } + case CARBON_KIND(SemIR::InterfaceWitnessAccess inst): { + return TryResolveTypedInst(resolver, inst); + } case CARBON_KIND(SemIR::IntValue inst): { return TryResolveTypedInst(resolver, inst); } diff --git a/toolchain/check/subst.cpp b/toolchain/check/subst.cpp index 71f368a17faa7..61ca7d94b366d 100644 --- a/toolchain/check/subst.cpp +++ b/toolchain/check/subst.cpp @@ -103,6 +103,14 @@ static auto PushOperand(Context& context, Worklist& worklist, PushOperand(context, worklist, SemIR::IdKind::For, interface.specific_id.index); } + for (auto rewrite : facet_type_info.rewrite_constraints) { + auto lhs_inst_id = + context.constant_values().GetInstId(rewrite.lhs_const_id); + auto rhs_inst_id = + context.constant_values().GetInstId(rewrite.rhs_const_id); + worklist.Push(lhs_inst_id); + worklist.Push(rhs_inst_id); + } // TODO: Process other requirements as well. break; } @@ -191,6 +199,13 @@ static auto PopOperand(Context& context, Worklist& worklist, SemIR::IdKind kind, context.facet_types().Get(SemIR::FacetTypeId(arg)); SemIR::FacetTypeInfo new_facet_type_info = old_facet_type_info; // Since these were added to a stack, we get them back in reverse order. + for (auto i : llvm::reverse( + llvm::seq(old_facet_type_info.rewrite_constraints.size()))) { + auto rhs_id = context.constant_values().Get(worklist.Pop()); + auto lhs_id = context.constant_values().Get(worklist.Pop()); + new_facet_type_info.rewrite_constraints[i].rhs_const_id = rhs_id; + new_facet_type_info.rewrite_constraints[i].lhs_const_id = lhs_id; + } for (auto i : llvm::reverse( llvm::seq(old_facet_type_info.impls_constraints.size()))) { auto specific_id = PopOperand( @@ -199,6 +214,7 @@ static auto PopOperand(Context& context, Worklist& worklist, SemIR::IdKind kind, new_facet_type_info.impls_constraints[i].specific_id = SemIR::SpecificId(specific_id); } + new_facet_type_info.Canonicalize(); return context.facet_types().Add(new_facet_type_info).index; } default: diff --git a/toolchain/check/testdata/basics/no_prelude/raw_ir.carbon b/toolchain/check/testdata/basics/no_prelude/raw_ir.carbon index 51d28eb9d5879..a09834dd8528d 100644 --- a/toolchain/check/testdata/basics/no_prelude/raw_ir.carbon +++ b/toolchain/check/testdata/basics/no_prelude/raw_ir.carbon @@ -127,13 +127,13 @@ fn Foo[T:! type](n: T) -> (T, ()) { // CHECK:STDOUT: 'inst+38': templateConstant(inst+38) // CHECK:STDOUT: 'inst+39': templateConstant(inst+38) // CHECK:STDOUT: symbolic_constants: -// CHECK:STDOUT: symbolicConstant0: {inst: inst+2, generic: generic, index: genericInst} -// CHECK:STDOUT: symbolicConstant1: {inst: inst+4, generic: generic, index: genericInst} -// CHECK:STDOUT: symbolicConstant2: {inst: inst+16, generic: generic, index: genericInst} -// CHECK:STDOUT: symbolicConstant3: {inst: inst+2, generic: generic0, index: genericInstInDecl0} -// CHECK:STDOUT: symbolicConstant4: {inst: inst+4, generic: generic0, index: genericInstInDecl1} -// CHECK:STDOUT: symbolicConstant5: {inst: inst+16, generic: generic0, index: genericInstInDecl2} -// CHECK:STDOUT: symbolicConstant6: {inst: inst+30, generic: generic, index: genericInst} +// CHECK:STDOUT: symbolicConstant0: {inst: inst+2, generic: generic, index: genericInst, .Self: false} +// CHECK:STDOUT: symbolicConstant1: {inst: inst+4, generic: generic, index: genericInst, .Self: false} +// CHECK:STDOUT: symbolicConstant2: {inst: inst+16, generic: generic, index: genericInst, .Self: false} +// CHECK:STDOUT: symbolicConstant3: {inst: inst+2, generic: generic0, index: genericInstInDecl0, .Self: false} +// CHECK:STDOUT: symbolicConstant4: {inst: inst+4, generic: generic0, index: genericInstInDecl1, .Self: false} +// CHECK:STDOUT: symbolicConstant5: {inst: inst+16, generic: generic0, index: genericInstInDecl2, .Self: false} +// CHECK:STDOUT: symbolicConstant6: {inst: inst+30, generic: generic, index: genericInst, .Self: false} // CHECK:STDOUT: inst_blocks: // CHECK:STDOUT: empty: {} // CHECK:STDOUT: exports: diff --git a/toolchain/check/testdata/class/fail_self_param.carbon b/toolchain/check/testdata/class/fail_self_param.carbon index 8b02ecafef9be..9c63a698b3a09 100644 --- a/toolchain/check/testdata/class/fail_self_param.carbon +++ b/toolchain/check/testdata/class/fail_self_param.carbon @@ -17,11 +17,9 @@ var v: C(0); // CHECK:STDOUT: --- fail_self_param.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %x: = bind_symbolic_name x, 0 [symbolic] // CHECK:STDOUT: %x.patt: = symbolic_binding_pattern x, 0 [symbolic] // CHECK:STDOUT: %C.type: type = generic_class_type @C [template] // CHECK:STDOUT: %C.generic: %C.type = struct_value () [template] -// CHECK:STDOUT: %C: type = class_type @C, @C(%x) [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [template] @@ -47,7 +45,7 @@ var v: C(0); // CHECK:STDOUT: } { // CHECK:STDOUT: %self.ref: = name_ref self, [template = ] // CHECK:STDOUT: %x.param: = value_param runtime_param -// CHECK:STDOUT: %x.loc14_22.1: = bind_symbolic_name x, 0, %x.param [symbolic = %x.loc14_22.2 (constants.%x)] +// CHECK:STDOUT: %x: = bind_symbolic_name x, 0, %x.param [template = ] // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: %C.type = name_ref C, %C.decl [template = constants.%C.generic] // CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [template = constants.%int_0] @@ -55,8 +53,7 @@ var v: C(0); // CHECK:STDOUT: %v: ref = bind_name v, %v.var // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic class @C(%x.loc14_22.1: ) { -// CHECK:STDOUT: %x.loc14_22.2: = bind_symbolic_name x, 0 [symbolic = %x.loc14_22.2 (constants.%x)] +// CHECK:STDOUT: generic class @C(%x: ) { // CHECK:STDOUT: %x.patt.loc14_22.2: = symbolic_binding_pattern x, 0 [symbolic = %x.patt.loc14_22.2 (constants.%x.patt)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -65,13 +62,12 @@ var v: C(0); // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template = constants.%complete_type] // CHECK:STDOUT: // CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%C +// CHECK:STDOUT: .Self = // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @C(constants.%x) { -// CHECK:STDOUT: %x.loc14_22.2 => constants.%x -// CHECK:STDOUT: %x.patt.loc14_22.2 => constants.%x +// CHECK:STDOUT: specific @C() { +// CHECK:STDOUT: %x.patt.loc14_22.2 => // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/import.carbon b/toolchain/check/testdata/class/generic/import.carbon index 65985ebefa283..4b9a5b181769e 100644 --- a/toolchain/check/testdata/class/generic/import.carbon +++ b/toolchain/check/testdata/class/generic/import.carbon @@ -259,20 +259,18 @@ class Class(U:! type) { // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.10 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -290,18 +288,16 @@ class Class(U:! type) { // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.27 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -371,35 +367,35 @@ class Class(U:! type) { // CHECK:STDOUT: %import_ref.4 = import_ref Main//foo, inst+73, unloaded // CHECK:STDOUT: %import_ref.5: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Main//foo, inst+74, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)] // CHECK:STDOUT: %import_ref.6 = import_ref Main//foo, inst+75, unloaded -// CHECK:STDOUT: %import_ref.7: type = import_ref Main//foo, inst+116, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.8: type = import_ref Main//foo, inst+117, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.9: = import_ref Main//foo, inst+118, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] -// CHECK:STDOUT: %import_ref.10 = import_ref Main//foo, inst+89, unloaded -// CHECK:STDOUT: %import_ref.11: type = import_ref Main//foo, inst+142, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.12: type = import_ref Main//foo, inst+143, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.13 = import_ref Main//foo, inst+144, unloaded -// CHECK:STDOUT: %import_ref.14: type = import_ref Main//foo, inst+167, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+168, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.16 = import_ref Main//foo, inst+169, unloaded -// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+195, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+196, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+197, unloaded -// CHECK:STDOUT: %import_ref.21 = import_ref Main//foo, inst+223, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Main//foo, inst+224, unloaded -// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+225, unloaded -// CHECK:STDOUT: %import_ref.24: type = import_ref Main//foo, inst+229, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+230, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.26 = import_ref Main//foo, inst+231, unloaded -// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+245, unloaded -// CHECK:STDOUT: %import_ref.28: type = import_ref Main//foo, inst+280, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.29: type = import_ref Main//foo, inst+281, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+282, unloaded -// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+305, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+306, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+307, unloaded -// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+333, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+334, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+335, unloaded +// CHECK:STDOUT: %import_ref.7: type = import_ref Main//foo, inst+114, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.8: type = import_ref Main//foo, inst+115, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.9: = import_ref Main//foo, inst+116, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] +// CHECK:STDOUT: %import_ref.10 = import_ref Main//foo, inst+88, unloaded +// CHECK:STDOUT: %import_ref.11: type = import_ref Main//foo, inst+140, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.12: type = import_ref Main//foo, inst+141, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.13 = import_ref Main//foo, inst+142, unloaded +// CHECK:STDOUT: %import_ref.14: type = import_ref Main//foo, inst+165, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+166, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.16 = import_ref Main//foo, inst+167, unloaded +// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+193, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+194, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+195, unloaded +// CHECK:STDOUT: %import_ref.21 = import_ref Main//foo, inst+221, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Main//foo, inst+222, unloaded +// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+223, unloaded +// CHECK:STDOUT: %import_ref.24: type = import_ref Main//foo, inst+227, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+228, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.26 = import_ref Main//foo, inst+229, unloaded +// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+242, unloaded +// CHECK:STDOUT: %import_ref.28: type = import_ref Main//foo, inst+276, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.29: type = import_ref Main//foo, inst+277, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+278, unloaded +// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+301, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+302, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+303, unloaded +// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+329, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+330, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+331, unloaded // CHECK:STDOUT: %import_ref.38: = import_ref Main//foo, inst+55, loaded [template = constants.%complete_type.2] // CHECK:STDOUT: %import_ref.39 = import_ref Main//foo, inst+25, unloaded // CHECK:STDOUT: %import_ref.40 = import_ref Main//foo, inst+42, unloaded @@ -444,7 +440,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -464,7 +460,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -651,10 +647,10 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -696,13 +692,13 @@ class Class(U:! type) { // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -806,7 +802,7 @@ class Class(U:! type) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -849,7 +845,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -929,11 +925,11 @@ class Class(U:! type) { // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -976,7 +972,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 @@ -1062,7 +1058,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.13 // CHECK:STDOUT: %Convert => constants.%Convert.13 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5 @@ -1121,7 +1117,7 @@ class Class(U:! type) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1 = import_ref Main//foo, inst+9, unloaded // CHECK:STDOUT: %import_ref.2: %CompleteClass.type = import_ref Main//foo, inst+20, loaded [template = constants.%CompleteClass.generic] -// CHECK:STDOUT: %import_ref.3: %F.type.3 = import_ref Main//foo, inst+377, loaded [template = constants.%F.3] +// CHECK:STDOUT: %import_ref.3: %F.type.3 = import_ref Main//foo, inst+373, loaded [template = constants.%F.3] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: .Int = %import_ref.4 // CHECK:STDOUT: import Core//prelude @@ -1325,18 +1321,16 @@ class Class(U:! type) { // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.7) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.4: type = assoc_entity_type %As.type.2, %Convert.type.8 [symbolic] // CHECK:STDOUT: %assoc0.5: %Convert.assoc_type.4 = assoc_entity element0, imports.%import_ref.34 [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.9) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.10: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.10: %Convert.type.10 = struct_value () [symbolic] @@ -1357,7 +1351,7 @@ class Class(U:! type) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1 = import_ref Main//foo, inst+9, unloaded // CHECK:STDOUT: %import_ref.2: %CompleteClass.type = import_ref Main//foo, inst+20, loaded [template = constants.%CompleteClass.generic] -// CHECK:STDOUT: %import_ref.3: %F.type.3 = import_ref Main//foo, inst+377, loaded [template = constants.%F.3] +// CHECK:STDOUT: %import_ref.3: %F.type.3 = import_ref Main//foo, inst+373, loaded [template = constants.%F.3] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: .Int = %import_ref.8 // CHECK:STDOUT: .ImplicitAs = %import_ref.9 @@ -1368,34 +1362,34 @@ class Class(U:! type) { // CHECK:STDOUT: %import_ref.5 = import_ref Main//foo, inst+25, unloaded // CHECK:STDOUT: %import_ref.6 = import_ref Main//foo, inst+42, unloaded // CHECK:STDOUT: %import_ref.7 = import_ref Main//foo, inst+51, unloaded -// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+116, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.16: type = import_ref Main//foo, inst+117, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.17 = import_ref Main//foo, inst+118, unloaded -// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+142, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+143, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.5)] -// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+144, unloaded -// CHECK:STDOUT: %import_ref.21: type = import_ref Main//foo, inst+167, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.22: type = import_ref Main//foo, inst+168, loaded [template = constants.%ImplicitAs.type.6] -// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+169, unloaded -// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+195, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.26: type = import_ref Main//foo, inst+196, loaded [template = constants.%ImplicitAs.type.6] -// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+197, unloaded -// CHECK:STDOUT: %import_ref.28 = import_ref Main//foo, inst+223, unloaded -// CHECK:STDOUT: %import_ref.29 = import_ref Main//foo, inst+224, unloaded -// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+225, unloaded -// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+229, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+230, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+231, unloaded -// CHECK:STDOUT: %import_ref.34 = import_ref Main//foo, inst+245, unloaded -// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+280, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+281, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+282, unloaded -// CHECK:STDOUT: %import_ref.38: type = import_ref Main//foo, inst+305, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.39: type = import_ref Main//foo, inst+306, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.40 = import_ref Main//foo, inst+307, unloaded -// CHECK:STDOUT: %import_ref.42: type = import_ref Main//foo, inst+333, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.43: type = import_ref Main//foo, inst+334, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.44 = import_ref Main//foo, inst+335, unloaded +// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+114, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.16: type = import_ref Main//foo, inst+115, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.17 = import_ref Main//foo, inst+116, unloaded +// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+140, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+141, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.5)] +// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+142, unloaded +// CHECK:STDOUT: %import_ref.21: type = import_ref Main//foo, inst+165, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.22: type = import_ref Main//foo, inst+166, loaded [template = constants.%ImplicitAs.type.6] +// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+167, unloaded +// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+193, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.26: type = import_ref Main//foo, inst+194, loaded [template = constants.%ImplicitAs.type.6] +// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+195, unloaded +// CHECK:STDOUT: %import_ref.28 = import_ref Main//foo, inst+221, unloaded +// CHECK:STDOUT: %import_ref.29 = import_ref Main//foo, inst+222, unloaded +// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+223, unloaded +// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+227, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+228, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+229, unloaded +// CHECK:STDOUT: %import_ref.34 = import_ref Main//foo, inst+242, unloaded +// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+276, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+277, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+278, unloaded +// CHECK:STDOUT: %import_ref.38: type = import_ref Main//foo, inst+301, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.39: type = import_ref Main//foo, inst+302, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.40 = import_ref Main//foo, inst+303, unloaded +// CHECK:STDOUT: %import_ref.42: type = import_ref Main//foo, inst+329, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.43: type = import_ref Main//foo, inst+330, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.44 = import_ref Main//foo, inst+331, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1417,7 +1411,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.8)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.8) = struct_value () [symbolic = %Convert (constants.%Convert.8)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.8) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.4)] @@ -1645,13 +1639,13 @@ class Class(U:! type) { // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -1841,11 +1835,11 @@ class Class(U:! type) { // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -1888,7 +1882,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.12 // CHECK:STDOUT: %Convert => constants.%Convert.12 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5 @@ -1936,20 +1930,18 @@ class Class(U:! type) { // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.10 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -1967,18 +1959,16 @@ class Class(U:! type) { // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.27 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -2008,7 +1998,7 @@ class Class(U:! type) { // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1: %Class.type = import_ref Main//foo, inst+9, loaded [template = constants.%Class.generic] // CHECK:STDOUT: %import_ref.2 = import_ref Main//foo, inst+20, unloaded -// CHECK:STDOUT: %import_ref.3 = import_ref Main//foo, inst+377, unloaded +// CHECK:STDOUT: %import_ref.3 = import_ref Main//foo, inst+373, unloaded // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -2016,35 +2006,35 @@ class Class(U:! type) { // CHECK:STDOUT: %import_ref.4 = import_ref Main//foo, inst+73, unloaded // CHECK:STDOUT: %import_ref.5 = import_ref Main//foo, inst+74, unloaded // CHECK:STDOUT: %import_ref.6 = import_ref Main//foo, inst+75, unloaded -// CHECK:STDOUT: %import_ref.7: type = import_ref Main//foo, inst+116, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.8: type = import_ref Main//foo, inst+117, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.9 = import_ref Main//foo, inst+118, unloaded -// CHECK:STDOUT: %import_ref.10 = import_ref Main//foo, inst+89, unloaded -// CHECK:STDOUT: %import_ref.11: type = import_ref Main//foo, inst+142, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.12: type = import_ref Main//foo, inst+143, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.13 = import_ref Main//foo, inst+144, unloaded -// CHECK:STDOUT: %import_ref.14: type = import_ref Main//foo, inst+167, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+168, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.16 = import_ref Main//foo, inst+169, unloaded -// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+195, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+196, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+197, unloaded -// CHECK:STDOUT: %import_ref.21 = import_ref Main//foo, inst+223, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Main//foo, inst+224, unloaded -// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+225, unloaded -// CHECK:STDOUT: %import_ref.24: type = import_ref Main//foo, inst+229, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+230, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.26 = import_ref Main//foo, inst+231, unloaded -// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+245, unloaded -// CHECK:STDOUT: %import_ref.28: type = import_ref Main//foo, inst+280, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.29: type = import_ref Main//foo, inst+281, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+282, unloaded -// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+305, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+306, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+307, unloaded -// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+333, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+334, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+335, unloaded +// CHECK:STDOUT: %import_ref.7: type = import_ref Main//foo, inst+114, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.8: type = import_ref Main//foo, inst+115, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.9 = import_ref Main//foo, inst+116, unloaded +// CHECK:STDOUT: %import_ref.10 = import_ref Main//foo, inst+88, unloaded +// CHECK:STDOUT: %import_ref.11: type = import_ref Main//foo, inst+140, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.12: type = import_ref Main//foo, inst+141, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.13 = import_ref Main//foo, inst+142, unloaded +// CHECK:STDOUT: %import_ref.14: type = import_ref Main//foo, inst+165, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.15: type = import_ref Main//foo, inst+166, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.16 = import_ref Main//foo, inst+167, unloaded +// CHECK:STDOUT: %import_ref.18: type = import_ref Main//foo, inst+193, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.19: type = import_ref Main//foo, inst+194, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.20 = import_ref Main//foo, inst+195, unloaded +// CHECK:STDOUT: %import_ref.21 = import_ref Main//foo, inst+221, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Main//foo, inst+222, unloaded +// CHECK:STDOUT: %import_ref.23 = import_ref Main//foo, inst+223, unloaded +// CHECK:STDOUT: %import_ref.24: type = import_ref Main//foo, inst+227, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.25: type = import_ref Main//foo, inst+228, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.26 = import_ref Main//foo, inst+229, unloaded +// CHECK:STDOUT: %import_ref.27 = import_ref Main//foo, inst+242, unloaded +// CHECK:STDOUT: %import_ref.28: type = import_ref Main//foo, inst+276, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.29: type = import_ref Main//foo, inst+277, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.30 = import_ref Main//foo, inst+278, unloaded +// CHECK:STDOUT: %import_ref.31: type = import_ref Main//foo, inst+301, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.32: type = import_ref Main//foo, inst+302, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.33 = import_ref Main//foo, inst+303, unloaded +// CHECK:STDOUT: %import_ref.35: type = import_ref Main//foo, inst+329, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.36: type = import_ref Main//foo, inst+330, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.37 = import_ref Main//foo, inst+331, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2072,7 +2062,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -2092,7 +2082,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -2263,10 +2253,10 @@ class Class(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -2308,13 +2298,13 @@ class Class(U:! type) { // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -2396,7 +2386,7 @@ class Class(U:! type) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -2439,7 +2429,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -2519,11 +2509,11 @@ class Class(U:! type) { // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -2566,7 +2556,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 diff --git a/toolchain/check/testdata/class/import.carbon b/toolchain/check/testdata/class/import.carbon index d10065cc72352..3a647e2e59e35 100644 --- a/toolchain/check/testdata/class/import.carbon +++ b/toolchain/check/testdata/class/import.carbon @@ -330,5 +330,5 @@ fn Run() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F[%self.param_patt: %ForwardDeclared.1](); // CHECK:STDOUT: -// CHECK:STDOUT: fn @G[addr .inst+403: %ptr.3](); +// CHECK:STDOUT: fn @G[addr .inst+399: %ptr.3](); // CHECK:STDOUT: 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 6748974274f53..9dc5ba34b8dba 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 @@ -579,15 +579,13 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %int_1.1: Core.IntLiteral = int_value 1 [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @As(%T) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %As.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.6 [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%i32)> [template] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.1, @As(%i32) [template] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [template] @@ -595,17 +593,15 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %assoc0.2: %Convert.assoc_type.2 = assoc_entity element0, imports.%import_ref.6 [template] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.7 [symbolic] // CHECK:STDOUT: %Add.type: type = facet_type <@Add> [template] -// CHECK:STDOUT: %Self.3: %Add.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self.2: %Add.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic] -// CHECK:STDOUT: %Self.4: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.3: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [template] -// CHECK:STDOUT: %Self.5: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.2, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %Convert.3: %Convert.type.3 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.5 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.3 [symbolic] // CHECK:STDOUT: %assoc0.4: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.23 [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.4 [symbolic] // CHECK:STDOUT: %Convert.type.4: type = fn_type @Convert.2, @ImplicitAs(%i32) [template] // CHECK:STDOUT: %Convert.4: %Convert.type.4 = struct_value () [template] // CHECK:STDOUT: %Convert.assoc_type.4: type = assoc_entity_type %ImplicitAs.type.3, %Convert.type.4 [template] @@ -624,7 +620,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %Convert.bound.2: = bound_method %int_2.1, %Convert.6 [template] // CHECK:STDOUT: %int_2.2: %i32 = int_value 2 [template] // CHECK:STDOUT: %Op.type.1: type = fn_type @Op.1 [template] -// CHECK:STDOUT: %Self.as_type.5: type = facet_access_type %Self.3 [symbolic] +// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Op.assoc_type: type = assoc_entity_type %Add.type, %Op.type.1 [template] // CHECK:STDOUT: %assoc0.7: %Op.assoc_type = assoc_entity element0, imports.%import_ref.30 [template] // CHECK:STDOUT: %Op.type.2: type = fn_type @Op.2 [template] @@ -739,7 +735,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @As(%T) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -766,7 +762,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.5)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.3)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.2, @ImplicitAs(%T) [symbolic = %Convert.type (constants.%Convert.type.3)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.3) = struct_value () [symbolic = %Convert (constants.%Convert.3)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.3) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -802,31 +798,31 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: fn @Int(%N.param_patt: Core.IntLiteral) -> type = "int.make_type_signed"; // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self.1: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self.1: %As.type.2) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%T (%T); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.2(constants.%T: type, constants.%Self.4: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.2(constants.%T: type, constants.%Self.3: %ImplicitAs.type.2) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.5)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.3)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.2.%Self.as_type (%Self.as_type.3)]() -> @Convert.2.%T (%T); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.2.%Self.as_type (%Self.as_type.2)]() -> @Convert.2.%T (%T); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Convert.3[%self.param_patt: Core.IntLiteral]() -> %i32 = "int.convert_checked"; // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Op.1(constants.%Self.3: %Add.type) { -// CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.3)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.5)] +// CHECK:STDOUT: generic fn @Op.1(constants.%Self.2: %Add.type) { +// CHECK:STDOUT: %Self: %Add.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Op.1.%Self.as_type (%Self.as_type.5)](%other.param_patt: @Op.1.%Self.as_type (%Self.as_type.5)) -> @Op.1.%Self.as_type (%Self.as_type.5); +// CHECK:STDOUT: fn[%self.param_patt: @Op.1.%Self.as_type (%Self.as_type.3)](%other.param_patt: @Op.1.%Self.as_type (%Self.as_type.3)) -> @Op.1.%Self.as_type (%Self.as_type.3); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Op.2[%self.param_patt: %i32](%other.param_patt: %i32) -> %i32 = "int.sadd"; @@ -905,7 +901,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %As.type => constants.%As.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @As(constants.%i32) { @@ -914,7 +910,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.2 // CHECK:STDOUT: %Convert => constants.%Convert.2 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -932,7 +928,7 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.3 -// CHECK:STDOUT: %Self => constants.%Self.5 +// CHECK:STDOUT: %Self => constants.%Self.3 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.4 // CHECK:STDOUT: %Convert => constants.%Convert.4 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 @@ -949,11 +945,11 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.2(constants.%T, constants.%Self.4) { +// CHECK:STDOUT: specific @Convert.2(constants.%T, constants.%Self.3) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 -// CHECK:STDOUT: %Self => constants.%Self.4 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.3 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(Core.IntLiteral) { @@ -962,15 +958,15 @@ var arr: [i32; (1 as i32) + (2 as i32)] = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.4 -// CHECK:STDOUT: %Self => constants.%Self.5 +// CHECK:STDOUT: %Self => constants.%Self.3 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5 // CHECK:STDOUT: %assoc0 => constants.%assoc0.6 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Op.1(constants.%Self.3) { -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.5 +// CHECK:STDOUT: specific @Op.1(constants.%Self.2) { +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.3 // CHECK:STDOUT: } // CHECK:STDOUT: 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 1e3cfbea4f9a6..54ed4045c24c7 100644 --- a/toolchain/check/testdata/if_expr/fail_not_in_function.carbon +++ b/toolchain/check/testdata/if_expr/fail_not_in_function.carbon @@ -78,8 +78,8 @@ class C { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .n = .inst+373.loc37_8 -// CHECK:STDOUT: complete_type_witness = .inst+375.loc38_1 +// CHECK:STDOUT: .n = .inst+369.loc37_8 +// CHECK:STDOUT: complete_type_witness = .inst+371.loc38_1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { diff --git a/toolchain/check/testdata/impl/fail_impl_bad_assoc_const.carbon b/toolchain/check/testdata/impl/fail_impl_bad_assoc_const.carbon index b9d7591b7ce17..05d2618df9e28 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_assoc_const.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_assoc_const.carbon @@ -10,7 +10,7 @@ interface I { let T:! type; } -// CHECK:STDERR: fail_impl_bad_assoc_const.carbon:[[@LINE+3]]:1: error: semantics TODO: `impl of interface with associated constant` [SemanticsTodo] +// CHECK:STDERR: fail_impl_bad_assoc_const.carbon:[[@LINE+3]]:1: error: semantics TODO: `impl of interface with associated constant T` [SemanticsTodo] // CHECK:STDERR: impl bool as I {} // CHECK:STDERR: ^~~~~~~~~~~~~~~~ impl bool as I {} diff --git a/toolchain/check/testdata/impl/fail_impl_bad_interface.carbon b/toolchain/check/testdata/impl/fail_impl_bad_interface.carbon index 7b0df3d6dc76e..4a165b8a0d60e 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_interface.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_interface.carbon @@ -120,7 +120,7 @@ impl f64 as type where .Self impls type {} // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [template] // CHECK:STDOUT: %Float.type: type = fn_type @Float [template] // CHECK:STDOUT: %Float: %Float.type = struct_value () [template] -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %type_where: type = facet_type [template] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -142,7 +142,7 @@ impl f64 as type where .Self impls type {} // CHECK:STDOUT: %float.make_type: init type = call constants.%Float(%int_64) [template = f64] // CHECK:STDOUT: %.loc10_6.1: type = value_of_initializer %float.make_type [template = f64] // CHECK:STDOUT: %.loc10_6.2: type = converted %float.make_type, %.loc10_6.1 [template = f64] -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self] // CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %.loc10_18: type = where_expr %.Self [template = constants.%type_where] { // CHECK:STDOUT: requirement_impls %.Self.ref, type diff --git a/toolchain/check/testdata/impl/fail_todo_impl_assoc_const.carbon b/toolchain/check/testdata/impl/fail_todo_impl_assoc_const.carbon index 64a039c1256fe..b7159555b4cdd 100644 --- a/toolchain/check/testdata/impl/fail_todo_impl_assoc_const.carbon +++ b/toolchain/check/testdata/impl/fail_todo_impl_assoc_const.carbon @@ -10,7 +10,7 @@ interface I { let T:! type; } -// CHECK:STDERR: fail_todo_impl_assoc_const.carbon:[[@LINE+3]]:1: error: semantics TODO: `impl of interface with associated constant` [SemanticsTodo] +// CHECK:STDERR: fail_todo_impl_assoc_const.carbon:[[@LINE+3]]:1: error: semantics TODO: `impl of interface with associated constant T` [SemanticsTodo] // CHECK:STDERR: impl bool as I where .T = bool {} // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ impl bool as I where .T = bool {} @@ -18,16 +18,16 @@ impl bool as I where .T = bool {} // CHECK:STDOUT: --- fail_todo_impl_assoc_const.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template] -// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type.1, type [template] +// CHECK:STDOUT: %I.type: type = facet_type <@I> [template] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type, type [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @I.%T [template] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] // CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] -// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template] +// CHECK:STDOUT: %I_where.type: type = facet_type <@I where %impl.elem0 = bool> [template] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -44,28 +44,28 @@ impl bool as I where .T = bool {} // CHECK:STDOUT: .I = %I.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type.1] {} {} +// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {} // CHECK:STDOUT: impl_decl @impl [template] {} { // CHECK:STDOUT: %bool.make_type.loc16_6: init type = call constants.%Bool() [template = bool] // CHECK:STDOUT: %.loc16_6.1: type = value_of_initializer %bool.make_type.loc16_6 [template = bool] // CHECK:STDOUT: %.loc16_6.2: type = converted %bool.make_type.loc16_6, %.loc16_6.1 [template = bool] -// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %T.ref: %assoc_type = name_ref T, @I.%assoc0 [template = constants.%assoc0] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] // CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] // CHECK:STDOUT: %bool.make_type.loc16_27: init type = call constants.%Bool() [template = bool] // CHECK:STDOUT: %.loc16_27.1: type = value_of_initializer %bool.make_type.loc16_27 [template = bool] // CHECK:STDOUT: %.loc16_27.2: type = converted %bool.make_type.loc16_27, %.loc16_27.1 [template = bool] -// CHECK:STDOUT: %.loc16_16: type = where_expr %.Self [template = constants.%I.type.2] { +// CHECK:STDOUT: %.loc16_16: type = where_expr %.Self [template = constants.%I_where.type] { // CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc16_27.2 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %T: type = assoc_const_decl T [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %T [template = constants.%assoc0] // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/no_prelude/import.carbon b/toolchain/check/testdata/impl/lookup/no_prelude/import.carbon index 5a872f5741ad8..8e73c4a1f7db0 100644 --- a/toolchain/check/testdata/impl/lookup/no_prelude/import.carbon +++ b/toolchain/check/testdata/impl/lookup/no_prelude/import.carbon @@ -1163,8 +1163,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %X.1: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %X.2: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic] +// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %X.patt.2: %T = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %AnyParam.2: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.1, %GenericInterface.generic) [template] @@ -1256,10 +1255,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = %interface // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic class @AnyParam(constants.%T: type, constants.%X.2: @AnyParam.%T (%T)) { +// CHECK:STDOUT: generic class @AnyParam(constants.%T: type, constants.%X: %T) { // 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: %X: %T = bind_symbolic_name X, 1 [symbolic = %X (constants.%X.1)] +// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %X.patt: %T = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1313,18 +1312,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %U.patt.loc6_28.2 => constants.%U // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X.1) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %T.patt => constants.%T -// CHECK:STDOUT: %X => constants.%X.1 -// CHECK:STDOUT: %X.patt => constants.%X.1 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X.2) { +// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.patt => constants.%T -// CHECK:STDOUT: %X => constants.%X.2 -// CHECK:STDOUT: %X.patt => constants.%X.2 +// CHECK:STDOUT: %X => constants.%X +// CHECK:STDOUT: %X.patt => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AnyParam(constants.%GenericInterface.type.1, constants.%GenericInterface.generic) { @@ -1351,20 +1343,19 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %X.1: %T = bind_symbolic_name X, 1 [symbolic] -// CHECK:STDOUT: %X.2: @AnyParam.%T (%T) = bind_symbolic_name X, 1 [symbolic] +// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %X.patt.2: %T = symbolic_binding_pattern X, 1 [symbolic] // CHECK:STDOUT: %GenericInterface.type.1: type = generic_interface_type @GenericInterface [template] // CHECK:STDOUT: %GenericInterface.generic: %GenericInterface.type.1 = struct_value () [template] // CHECK:STDOUT: %U: type = bind_symbolic_name U, 0 [symbolic] // CHECK:STDOUT: %GenericInterface.type.2: type = facet_type <@GenericInterface, @GenericInterface(%U)> [symbolic] +// CHECK:STDOUT: %Self.1: %GenericInterface.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %GenericInterface.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %AnyParam.2: type = class_type @AnyParam, @AnyParam(%GenericInterface.type.1, %GenericInterface.generic) [template] // CHECK:STDOUT: %AnyParam.val: %AnyParam.2 = struct_value () [template] // CHECK:STDOUT: %Y.type: type = facet_type <@Y> [template] -// CHECK:STDOUT: %Self.3: %Y.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %Self.2: %Y.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %K.type.1: type = fn_type @K.1 [template] // CHECK:STDOUT: %K.assoc_type: type = assoc_entity_type %Y.type, %K.type.1 [template] // CHECK:STDOUT: %assoc0: %K.assoc_type = assoc_entity element0, imports.%import_ref.10 [template] @@ -1392,9 +1383,9 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: %import_ref.7 = import_ref PackageHasParam//default, inst+28, unloaded // CHECK:STDOUT: %import_ref.8: %K.assoc_type = import_ref PackageHasParam//default, inst+34, loaded [template = constants.%assoc0] // CHECK:STDOUT: %import_ref.9 = import_ref PackageHasParam//default, inst+30, unloaded -// CHECK:STDOUT: %import_ref.11: type = import_ref PackageGenericInterface//default, inst+46, loaded [template = constants.%AnyParam.2] -// CHECK:STDOUT: %import_ref.12: type = import_ref PackageGenericInterface//default, inst+56, loaded [template = constants.%Y.type] -// CHECK:STDOUT: %import_ref.13: = import_ref PackageGenericInterface//default, inst+65, loaded [template = constants.%interface] +// CHECK:STDOUT: %import_ref.11: type = import_ref PackageGenericInterface//default, inst+45, loaded [template = constants.%AnyParam.2] +// CHECK:STDOUT: %import_ref.12: type = import_ref PackageGenericInterface//default, inst+55, loaded [template = constants.%Y.type] +// CHECK:STDOUT: %import_ref.13: = import_ref PackageGenericInterface//default, inst+64, loaded [template = constants.%interface] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1414,7 +1405,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %GenericInterface.type: type = facet_type <@GenericInterface, @GenericInterface(%U)> [symbolic = %GenericInterface.type (constants.%GenericInterface.type.2)] -// CHECK:STDOUT: %Self: %GenericInterface.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %GenericInterface.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: // CHECK:STDOUT: interface { // CHECK:STDOUT: !members: @@ -1435,10 +1426,10 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: witness = imports.%import_ref.13 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic class @AnyParam(constants.%T: type, constants.%X.2: @AnyParam.%T (%T)) { +// CHECK:STDOUT: generic class @AnyParam(constants.%T: type, constants.%X: %T) { // 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: %X: %T = bind_symbolic_name X, 1 [symbolic = %X (constants.%X.1)] +// CHECK:STDOUT: %X: %T = bind_symbolic_name X, 1 [symbolic = %X (constants.%X)] // CHECK:STDOUT: %X.patt: %T = symbolic_binding_pattern X, 1 [symbolic = %X.patt (constants.%X.patt.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -1472,7 +1463,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @K.1(constants.%Self.3: %Y.type) { +// CHECK:STDOUT: generic fn @K.1(constants.%Self.2: %Y.type) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: fn(); @@ -1480,18 +1471,11 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: // CHECK:STDOUT: fn @K.2(); // CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X.1) { -// CHECK:STDOUT: %T => constants.%T -// CHECK:STDOUT: %T.patt => constants.%T -// CHECK:STDOUT: %X => constants.%X.1 -// CHECK:STDOUT: %X.patt => constants.%X.1 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X.2) { +// CHECK:STDOUT: specific @AnyParam(constants.%T, constants.%X) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.patt => constants.%T -// CHECK:STDOUT: %X => constants.%X.2 -// CHECK:STDOUT: %X.patt => constants.%X.2 +// CHECK:STDOUT: %X => constants.%X +// CHECK:STDOUT: %X.patt => constants.%X // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @GenericInterface(constants.%U) { @@ -1513,7 +1497,7 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @K.1(constants.%Self.3) {} +// CHECK:STDOUT: specific @K.1(constants.%Self.2) {} // CHECK:STDOUT: // CHECK:STDOUT: --- has_extra_interfaces.carbon // 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 53cd613329d3c..b9f41cafa88e3 100644 --- a/toolchain/check/testdata/impl/lookup/no_prelude/specific_args.carbon +++ b/toolchain/check/testdata/impl/lookup/no_prelude/specific_args.carbon @@ -175,9 +175,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %I.type.2, %F.type.1 [symbolic] @@ -228,7 +227,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)] -// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %F.type: type = fn_type @F.1, @I(%T) [symbolic = %F.type (constants.%F.type.1)] // CHECK:STDOUT: %F: @I.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)] // CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @I.%I.type (%I.type.2), @I.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)] @@ -265,7 +264,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: complete_type_witness = imports.%import_ref.4 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @I.%I.type (%I.type.2)) { +// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %I.type.2) { // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -285,7 +284,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {} +// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%InInterfaceArgs) { // CHECK:STDOUT: %T => constants.%InInterfaceArgs @@ -293,7 +292,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type => constants.%I.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %F.type => constants.%F.type.3 // CHECK:STDOUT: %F => constants.%F.3 // CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2 @@ -315,9 +314,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %I.type.2, %F.type.1 [symbolic] @@ -348,8 +346,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %import_ref.11: = import_ref Main//impl_in_interface_args, inst+8, loaded [template = constants.%complete_type] // CHECK:STDOUT: %import_ref.12 = import_ref Main//impl_in_interface_args, inst+6, unloaded // CHECK:STDOUT: %import_ref.14: type = import_ref Main//impl_in_interface_args, inst+14, loaded [template = constants.%X] -// CHECK:STDOUT: %import_ref.15: type = import_ref Main//impl_in_interface_args, inst+45, loaded [template = constants.%I.type.3] -// CHECK:STDOUT: %import_ref.16: = import_ref Main//impl_in_interface_args, inst+56, loaded [template = constants.%interface] +// CHECK:STDOUT: %import_ref.15: type = import_ref Main//impl_in_interface_args, inst+44, loaded [template = constants.%I.type.3] +// CHECK:STDOUT: %import_ref.16: = import_ref Main//impl_in_interface_args, inst+55, loaded [template = constants.%interface] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -377,7 +375,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)] -// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %F.type: type = fn_type @F.1, @I(%T) [symbolic = %F.type (constants.%F.type.1)] // CHECK:STDOUT: %F: @I.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)] // CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @I.%I.type (%I.type.2), @I.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)] @@ -421,7 +419,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @I.%I.type (%I.type.2)) { +// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %I.type.2) { // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -438,7 +436,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {} +// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%InInterfaceArgs) { // CHECK:STDOUT: %T => constants.%InInterfaceArgs @@ -446,7 +444,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type => constants.%I.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %F.type => constants.%F.type.2 // CHECK:STDOUT: %F => constants.%F.2 // CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2 @@ -467,8 +465,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type.1: type = generic_interface_type @I [template] // CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template] // CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.2) = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %I.type.2, %F.type.1 [symbolic] @@ -524,7 +521,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)] -// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %F.type: type = fn_type @F.1, @I(%T) [symbolic = %F.type (constants.%F.type.1)] // CHECK:STDOUT: %F: @I.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)] // CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @I.%I.type (%I.type.2), @I.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)] @@ -574,7 +571,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: complete_type_witness = imports.%import_ref.10 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @I.%I.type (%I.type.2)) { +// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %I.type.2) { // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -604,7 +601,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {} +// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%X) { // CHECK:STDOUT: %T => constants.%X @@ -612,7 +609,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type => constants.%I.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %F.type => constants.%F.type.3 // CHECK:STDOUT: %F => constants.%F.3 // CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2 @@ -638,8 +635,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %I.type.1: type = generic_interface_type @I [template] // CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template] // CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @I.%I.type (%I.type.2) = bind_symbolic_name Self, 1 [symbolic] -// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @I(%T) [symbolic] // CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %I.type.2, %F.type.1 [symbolic] @@ -672,8 +668,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %import_ref.13: = import_ref Main//types, inst+43, loaded [template = constants.%complete_type] // CHECK:STDOUT: %import_ref.14 = import_ref Main//types, inst+42, unloaded // CHECK:STDOUT: %import_ref.16: type = import_ref Main//impl_in_class_args, inst+25, loaded [template = constants.%C.2] -// CHECK:STDOUT: %import_ref.17: type = import_ref Main//impl_in_class_args, inst+58, loaded [template = constants.%I.type.3] -// CHECK:STDOUT: %import_ref.18: = import_ref Main//impl_in_class_args, inst+69, loaded [template = constants.%interface] +// CHECK:STDOUT: %import_ref.17: type = import_ref Main//impl_in_class_args, inst+57, loaded [template = constants.%I.type.3] +// CHECK:STDOUT: %import_ref.18: = import_ref Main//impl_in_class_args, inst+68, loaded [template = constants.%interface] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -703,7 +699,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)] -// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %F.type: type = fn_type @F.1, @I(%T) [symbolic = %F.type (constants.%F.type.1)] // CHECK:STDOUT: %F: @I.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)] // CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @I.%I.type (%I.type.2), @I.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)] @@ -760,7 +756,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @I.%I.type (%I.type.2)) { +// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %I.type.2) { // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -789,7 +785,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {} +// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @I(constants.%X) { // CHECK:STDOUT: %T => constants.%X @@ -797,7 +793,7 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type => constants.%I.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %F.type => constants.%F.type.2 // CHECK:STDOUT: %F => constants.%F.2 // CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2 diff --git a/toolchain/check/testdata/impl/no_prelude/import_generic.carbon b/toolchain/check/testdata/impl/no_prelude/import_generic.carbon index 6f968c47e682b..6ca4beb638019 100644 --- a/toolchain/check/testdata/impl/no_prelude/import_generic.carbon +++ b/toolchain/check/testdata/impl/no_prelude/import_generic.carbon @@ -190,11 +190,11 @@ impl forall [T:! type] C as I(T*) {} // CHECK:STDOUT: %I.type.1: type = generic_interface_type @I [template] // CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template] // CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [template] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template] -// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] // CHECK:STDOUT: %I.type.3: type = facet_type <@I, @I(%ptr)> [symbolic] // CHECK:STDOUT: %interface: = interface_witness () [template] @@ -236,7 +236,7 @@ impl forall [T:! type] C as I(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)] -// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: // CHECK:STDOUT: interface { // CHECK:STDOUT: !members: @@ -286,7 +286,7 @@ impl forall [T:! type] C as I(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type => constants.%I.type.2 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @I(%T) { @@ -329,11 +329,11 @@ impl forall [T:! type] C as I(T*) {} // CHECK:STDOUT: %I.type.1: type = generic_interface_type @I [template] // CHECK:STDOUT: %I.generic: %I.type.1 = struct_value () [template] // CHECK:STDOUT: %I.type.2: type = facet_type <@I, @I(%T)> [symbolic] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %C: type = class_type @C [template] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template] -// CHECK:STDOUT: %Self.2: %I.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic] // CHECK:STDOUT: %I.type.3: type = facet_type <@I, @I(%ptr)> [symbolic] // CHECK:STDOUT: } @@ -375,7 +375,7 @@ impl forall [T:! type] C as I(T*) {} // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.2)] -// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %I.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: // CHECK:STDOUT: interface { // CHECK:STDOUT: !members: diff --git a/toolchain/check/testdata/impl/no_prelude/interface_args.carbon b/toolchain/check/testdata/impl/no_prelude/interface_args.carbon index a50656265855b..55d28b2fa6e53 100644 --- a/toolchain/check/testdata/impl/no_prelude/interface_args.carbon +++ b/toolchain/check/testdata/impl/no_prelude/interface_args.carbon @@ -262,11 +262,10 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: %Action.generic: %Action.type.1 = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Action.type.2: type = facet_type <@Action, @Action(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @Action.%Action.type (%Action.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Action.type.3: type = facet_type <@Action, @Action(%B)> [template] // CHECK:STDOUT: %A: type = class_type @A [template] -// CHECK:STDOUT: %Self.2: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Op.type.1: type = fn_type @Op.1, @Action(%T) [symbolic] // CHECK:STDOUT: %Op.1: %Op.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %Op.assoc_type.1: type = assoc_entity_type %Action.type.2, %Op.type.1 [symbolic] @@ -330,7 +329,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.2)] -// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Op.type: type = fn_type @Op.1, @Action(%T) [symbolic = %Op.type (constants.%Op.type.1)] // CHECK:STDOUT: %Op: @Action.%Op.type (%Op.type.1) = struct_value () [symbolic = %Op (constants.%Op.1)] // CHECK:STDOUT: %Op.assoc_type: type = assoc_entity_type @Action.%Action.type (%Action.type.2), @Action.%Op.type (%Op.type.1) [symbolic = %Op.assoc_type (constants.%Op.assoc_type.1)] @@ -362,7 +361,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: complete_type_witness = imports.%import_ref.11 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Op.1(constants.%T: type, constants.%Self.1: @Action.%Action.type (%Action.type.2)) { +// CHECK:STDOUT: generic fn @Op.1(constants.%T: type, constants.%Self: %Action.type.2) { // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -393,7 +392,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Action.type => constants.%Action.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Op.type => constants.%Op.type.2 // CHECK:STDOUT: %Op => constants.%Op.2 // CHECK:STDOUT: %Op.assoc_type => constants.%Op.assoc_type.2 @@ -405,7 +404,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Op.1(constants.%T, constants.%Self.1) {} +// CHECK:STDOUT: specific @Op.1(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: --- fail_action.impl.carbon // CHECK:STDOUT: @@ -417,11 +416,10 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: %Action.generic: %Action.type.1 = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Action.type.2: type = facet_type <@Action, @Action(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @Action.%Action.type (%Action.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Action.type.3: type = facet_type <@Action, @Action(%B)> [template] // CHECK:STDOUT: %A: type = class_type @A [template] -// CHECK:STDOUT: %Self.2: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Op.type.1: type = fn_type @Op, @Action(%T) [symbolic] // CHECK:STDOUT: %Op.1: %Op.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %Op.assoc_type.1: type = assoc_entity_type %Action.type.2, %Op.type.1 [symbolic] @@ -490,7 +488,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Action.type: type = facet_type <@Action, @Action(%T)> [symbolic = %Action.type (constants.%Action.type.2)] -// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %Action.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Op.type: type = fn_type @Op, @Action(%T) [symbolic = %Op.type (constants.%Op.type.1)] // CHECK:STDOUT: %Op: @Action.%Op.type (%Op.type.1) = struct_value () [symbolic = %Op (constants.%Op.1)] // CHECK:STDOUT: %Op.assoc_type: type = assoc_entity_type @Action.%Action.type (%Action.type.2), @Action.%Op.type (%Op.type.1) [symbolic = %Op.assoc_type (constants.%Op.assoc_type.1)] @@ -528,7 +526,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: complete_type_witness = imports.%import_ref.19 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Op(constants.%T: type, constants.%Self.1: @Action.%Action.type (%Action.type.2)) { +// CHECK:STDOUT: generic fn @Op(constants.%T: type, constants.%Self: %Action.type.2) { // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -555,7 +553,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Action.type => constants.%Action.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Op.type => constants.%Op.type.2 // CHECK:STDOUT: %Op => constants.%Op.2 // CHECK:STDOUT: %Op.assoc_type => constants.%Op.assoc_type.2 @@ -567,7 +565,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Op(constants.%T, constants.%Self.1) {} +// CHECK:STDOUT: specific @Op(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @Action(constants.%C) { // CHECK:STDOUT: %T => constants.%C @@ -575,7 +573,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Action.type => constants.%Action.type.4 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Op.type => constants.%Op.type.3 // CHECK:STDOUT: %Op => constants.%Op.3 // CHECK:STDOUT: %Op.assoc_type => constants.%Op.assoc_type.3 @@ -745,11 +743,10 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: %Factory.generic: %Factory.type.1 = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.2: type = facet_type <@Factory, @Factory(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @Factory.%Factory.type (%Factory.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.3: type = facet_type <@Factory, @Factory(%B)> [template] // CHECK:STDOUT: %A: type = class_type @A [template] -// CHECK:STDOUT: %Self.2: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Make.type.1: type = fn_type @Make.1, @Factory(%T) [symbolic] // CHECK:STDOUT: %Make.1: %Make.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %Make.assoc_type.1: type = assoc_entity_type %Factory.type.2, %Make.type.1 [symbolic] @@ -814,7 +811,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.2)] -// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Make.type: type = fn_type @Make.1, @Factory(%T) [symbolic = %Make.type (constants.%Make.type.1)] // CHECK:STDOUT: %Make: @Factory.%Make.type (%Make.type.1) = struct_value () [symbolic = %Make (constants.%Make.1)] // CHECK:STDOUT: %Make.assoc_type: type = assoc_entity_type @Factory.%Factory.type (%Factory.type.2), @Factory.%Make.type (%Make.type.1) [symbolic = %Make.assoc_type (constants.%Make.assoc_type.1)] @@ -846,7 +843,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: complete_type_witness = imports.%import_ref.9 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Make.1(constants.%T: type, constants.%Self.1: @Factory.%Factory.type (%Factory.type.2)) { +// CHECK:STDOUT: generic fn @Make.1(constants.%T: type, constants.%Self: %Factory.type.2) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @Make.1.%T (%T); @@ -879,7 +876,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Factory.type => constants.%Factory.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Make.type => constants.%Make.type.2 // CHECK:STDOUT: %Make => constants.%Make.2 // CHECK:STDOUT: %Make.assoc_type => constants.%Make.assoc_type.2 @@ -891,7 +888,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Make.1(constants.%T, constants.%Self.1) { +// CHECK:STDOUT: specific @Make.1(constants.%T, constants.%Self) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -905,11 +902,10 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: %Factory.generic: %Factory.type.1 = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.2: type = facet_type <@Factory, @Factory(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @Factory.%Factory.type (%Factory.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %Factory.type.3: type = facet_type <@Factory, @Factory(%B)> [template] // CHECK:STDOUT: %A: type = class_type @A [template] -// CHECK:STDOUT: %Self.2: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Make.type.1: type = fn_type @Make, @Factory(%T) [symbolic] // CHECK:STDOUT: %Make.1: %Make.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %Make.assoc_type.1: type = assoc_entity_type %Factory.type.2, %Make.type.1 [symbolic] @@ -979,7 +975,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Factory.type: type = facet_type <@Factory, @Factory(%T)> [symbolic = %Factory.type (constants.%Factory.type.2)] -// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %Factory.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Make.type: type = fn_type @Make, @Factory(%T) [symbolic = %Make.type (constants.%Make.type.1)] // CHECK:STDOUT: %Make: @Factory.%Make.type (%Make.type.1) = struct_value () [symbolic = %Make (constants.%Make.1)] // CHECK:STDOUT: %Make.assoc_type: type = assoc_entity_type @Factory.%Factory.type (%Factory.type.2), @Factory.%Make.type (%Make.type.1) [symbolic = %Make.assoc_type (constants.%Make.assoc_type.1)] @@ -1019,7 +1015,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Make(constants.%T: type, constants.%Self.1: @Factory.%Factory.type (%Factory.type.2)) { +// CHECK:STDOUT: generic fn @Make(constants.%T: type, constants.%Self: %Factory.type.2) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: // CHECK:STDOUT: fn() -> @Make.%T (%T); @@ -1047,7 +1043,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Factory.type => constants.%Factory.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Make.type => constants.%Make.type.2 // CHECK:STDOUT: %Make => constants.%Make.2 // CHECK:STDOUT: %Make.assoc_type => constants.%Make.assoc_type.2 @@ -1059,7 +1055,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Make(constants.%T, constants.%Self.1) { +// CHECK:STDOUT: specific @Make(constants.%T, constants.%Self) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1069,7 +1065,7 @@ fn MakeC(a: A) -> C { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %Factory.type => constants.%Factory.type.4 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Make.type => constants.%Make.type.3 // CHECK:STDOUT: %Make => constants.%Make.3 // CHECK:STDOUT: %Make.assoc_type => constants.%Make.assoc_type.3 diff --git a/toolchain/check/testdata/interface/no_prelude/fail_lookup_in_type_type.carbon b/toolchain/check/testdata/interface/no_prelude/fail_lookup_in_type_type.carbon index 12856adb7c1e4..21c80d2c6171e 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_lookup_in_type_type.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_lookup_in_type_type.carbon @@ -49,7 +49,7 @@ let U: (type where .Self impls type).missing = {}; // CHECK:STDOUT: --- fail_lookup_type_where.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %type_where: type = facet_type [template] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] // CHECK:STDOUT: } @@ -58,7 +58,7 @@ let U: (type where .Self impls type).missing = {}; // CHECK:STDOUT: package: = namespace [template] { // CHECK:STDOUT: .U = @__global_init.%U // CHECK:STDOUT: } -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self] // CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %.loc7: type = where_expr %.Self [template = constants.%type_where] { // CHECK:STDOUT: requirement_impls %.Self.ref, type diff --git a/toolchain/check/testdata/interface/no_prelude/generic_import.carbon b/toolchain/check/testdata/interface/no_prelude/generic_import.carbon index 681a212814f91..f66b01acefa14 100644 --- a/toolchain/check/testdata/interface/no_prelude/generic_import.carbon +++ b/toolchain/check/testdata/interface/no_prelude/generic_import.carbon @@ -106,9 +106,8 @@ impl C as AddWith(C) { // CHECK:STDOUT: %AddWith.generic: %AddWith.type.1 = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %AddWith.type.2: type = facet_type <@AddWith, @AddWith(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @AddWith.%AddWith.type (%AddWith.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %AddWith.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %AddWith.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %F.type.1: type = fn_type @F.1, @AddWith(%T) [symbolic] // CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [symbolic] // CHECK:STDOUT: %F.assoc_type.1: type = assoc_entity_type %AddWith.type.2, %F.type.1 [symbolic] @@ -153,7 +152,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T)> [symbolic = %AddWith.type (constants.%AddWith.type.2)] -// CHECK:STDOUT: %Self: %AddWith.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %AddWith.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %F.type: type = fn_type @F.1, @AddWith(%T) [symbolic = %F.type (constants.%F.type.1)] // CHECK:STDOUT: %F: @AddWith.%F.type (%F.type.1) = struct_value () [symbolic = %F (constants.%F.1)] // CHECK:STDOUT: %F.assoc_type: type = assoc_entity_type @AddWith.%AddWith.type (%AddWith.type.2), @AddWith.%F.type (%F.type.1) [symbolic = %F.assoc_type (constants.%F.assoc_type.1)] @@ -184,7 +183,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self.1: @AddWith.%AddWith.type (%AddWith.type.2)) { +// CHECK:STDOUT: generic fn @F.1(constants.%T: type, constants.%Self: %AddWith.type.2) { // CHECK:STDOUT: // CHECK:STDOUT: fn(); // CHECK:STDOUT: } @@ -204,7 +203,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self.1) {} +// CHECK:STDOUT: specific @F.1(constants.%T, constants.%Self) {} // CHECK:STDOUT: // CHECK:STDOUT: specific @AddWith(constants.%C) { // CHECK:STDOUT: %T => constants.%C @@ -212,7 +211,7 @@ impl C as AddWith(C) { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %AddWith.type => constants.%AddWith.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %F.type => constants.%F.type.3 // CHECK:STDOUT: %F => constants.%F.3 // CHECK:STDOUT: %F.assoc_type => constants.%F.assoc_type.2 diff --git a/toolchain/check/testdata/packages/implicit_imports_prelude.carbon b/toolchain/check/testdata/packages/implicit_imports_prelude.carbon index 903672b956690..2dcac4feb75b1 100644 --- a/toolchain/check/testdata/packages/implicit_imports_prelude.carbon +++ b/toolchain/check/testdata/packages/implicit_imports_prelude.carbon @@ -81,20 +81,18 @@ var b: i32 = a; // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.8 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -112,18 +110,16 @@ var b: i32 = a; // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.25 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -155,35 +151,35 @@ var b: i32 = a; // CHECK:STDOUT: %import_ref.2 = import_ref Main//lib, inst+33, unloaded // CHECK:STDOUT: %import_ref.3 = import_ref Main//lib, inst+34, unloaded // CHECK:STDOUT: %import_ref.4 = import_ref Main//lib, inst+35, unloaded -// CHECK:STDOUT: %import_ref.5: type = import_ref Main//lib, inst+76, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.6: type = import_ref Main//lib, inst+77, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.7 = import_ref Main//lib, inst+78, unloaded -// CHECK:STDOUT: %import_ref.8 = import_ref Main//lib, inst+49, unloaded -// CHECK:STDOUT: %import_ref.9: type = import_ref Main//lib, inst+102, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.10: type = import_ref Main//lib, inst+103, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.11 = import_ref Main//lib, inst+104, unloaded -// CHECK:STDOUT: %import_ref.12: type = import_ref Main//lib, inst+127, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.13: type = import_ref Main//lib, inst+128, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.14 = import_ref Main//lib, inst+129, unloaded -// CHECK:STDOUT: %import_ref.16: type = import_ref Main//lib, inst+155, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.17: type = import_ref Main//lib, inst+156, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.18 = import_ref Main//lib, inst+157, unloaded -// CHECK:STDOUT: %import_ref.19 = import_ref Main//lib, inst+183, unloaded -// CHECK:STDOUT: %import_ref.20 = import_ref Main//lib, inst+184, unloaded -// CHECK:STDOUT: %import_ref.21 = import_ref Main//lib, inst+185, unloaded -// CHECK:STDOUT: %import_ref.22: type = import_ref Main//lib, inst+189, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.23: type = import_ref Main//lib, inst+190, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.24 = import_ref Main//lib, inst+191, unloaded -// CHECK:STDOUT: %import_ref.25 = import_ref Main//lib, inst+205, unloaded -// CHECK:STDOUT: %import_ref.26: type = import_ref Main//lib, inst+240, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.27: type = import_ref Main//lib, inst+241, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.28 = import_ref Main//lib, inst+242, unloaded -// CHECK:STDOUT: %import_ref.29: type = import_ref Main//lib, inst+265, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.30: type = import_ref Main//lib, inst+266, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.31 = import_ref Main//lib, inst+267, unloaded -// CHECK:STDOUT: %import_ref.33: type = import_ref Main//lib, inst+293, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.34: type = import_ref Main//lib, inst+294, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.35 = import_ref Main//lib, inst+295, unloaded +// CHECK:STDOUT: %import_ref.5: type = import_ref Main//lib, inst+74, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.6: type = import_ref Main//lib, inst+75, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.7 = import_ref Main//lib, inst+76, unloaded +// CHECK:STDOUT: %import_ref.8 = import_ref Main//lib, inst+48, unloaded +// CHECK:STDOUT: %import_ref.9: type = import_ref Main//lib, inst+100, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.10: type = import_ref Main//lib, inst+101, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.11 = import_ref Main//lib, inst+102, unloaded +// CHECK:STDOUT: %import_ref.12: type = import_ref Main//lib, inst+125, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.13: type = import_ref Main//lib, inst+126, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.14 = import_ref Main//lib, inst+127, unloaded +// CHECK:STDOUT: %import_ref.16: type = import_ref Main//lib, inst+153, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.17: type = import_ref Main//lib, inst+154, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.18 = import_ref Main//lib, inst+155, unloaded +// CHECK:STDOUT: %import_ref.19 = import_ref Main//lib, inst+181, unloaded +// CHECK:STDOUT: %import_ref.20 = import_ref Main//lib, inst+182, unloaded +// CHECK:STDOUT: %import_ref.21 = import_ref Main//lib, inst+183, unloaded +// CHECK:STDOUT: %import_ref.22: type = import_ref Main//lib, inst+187, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.23: type = import_ref Main//lib, inst+188, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.24 = import_ref Main//lib, inst+189, unloaded +// CHECK:STDOUT: %import_ref.25 = import_ref Main//lib, inst+202, unloaded +// CHECK:STDOUT: %import_ref.26: type = import_ref Main//lib, inst+236, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.27: type = import_ref Main//lib, inst+237, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.28 = import_ref Main//lib, inst+238, unloaded +// CHECK:STDOUT: %import_ref.29: type = import_ref Main//lib, inst+261, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.30: type = import_ref Main//lib, inst+262, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.31 = import_ref Main//lib, inst+263, unloaded +// CHECK:STDOUT: %import_ref.33: type = import_ref Main//lib, inst+289, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.34: type = import_ref Main//lib, inst+290, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.35 = import_ref Main//lib, inst+291, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -209,7 +205,7 @@ var b: i32 = a; // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -229,7 +225,7 @@ var b: i32 = a; // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -375,10 +371,10 @@ var b: i32 = a; // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -420,13 +416,13 @@ var b: i32 = a; // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -516,7 +512,7 @@ var b: i32 = a; // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -559,7 +555,7 @@ var b: i32 = a; // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -639,11 +635,11 @@ var b: i32 = a; // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -686,7 +682,7 @@ var b: i32 = a; // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 diff --git a/toolchain/check/testdata/packages/no_prelude/missing_prelude.carbon b/toolchain/check/testdata/packages/no_prelude/missing_prelude.carbon index af92379b49f8b..04600a1e314b0 100644 --- a/toolchain/check/testdata/packages/no_prelude/missing_prelude.carbon +++ b/toolchain/check/testdata/packages/no_prelude/missing_prelude.carbon @@ -198,9 +198,8 @@ var n: {} = i32; // CHECK:STDOUT: %Int.type: type = fn_type @Int [template] // CHECK:STDOUT: %Int: %Int.type = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %N.1: @Int.%T (%T) = bind_symbolic_name N, 1 [symbolic] +// CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %N.2: %T = bind_symbolic_name N, 1 [symbolic] // CHECK:STDOUT: %N.patt.2: %T = symbolic_binding_pattern N, 1 [symbolic] // CHECK:STDOUT: %Int.specific_fn: = specific_function %Int, @Int(Core.IntLiteral, %int_32) [template] // CHECK:STDOUT: } @@ -224,10 +223,10 @@ var n: {} = i32; // CHECK:STDOUT: %n: ref %empty_struct_type = bind_name n, %n.var // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Int(constants.%T: type, constants.%N.1: @Int.%T (%T)) { +// CHECK:STDOUT: generic fn @Int(constants.%T: type, constants.%N: %T) { // 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: %N: %T = bind_symbolic_name N, 1 [symbolic = %N (constants.%N.2)] +// CHECK:STDOUT: %N: %T = bind_symbolic_name N, 1 [symbolic = %N (constants.%N)] // CHECK:STDOUT: %N.patt: %T = symbolic_binding_pattern N, 1 [symbolic = %N.patt (constants.%N.patt.2)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: @@ -244,11 +243,11 @@ var n: {} = i32; // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Int(constants.%T, constants.%N.1) { +// CHECK:STDOUT: specific @Int(constants.%T, constants.%N) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %T.patt => constants.%T -// CHECK:STDOUT: %N => constants.%N.1 -// CHECK:STDOUT: %N.patt => constants.%N.1 +// CHECK:STDOUT: %N => constants.%N +// CHECK:STDOUT: %N.patt => constants.%N // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Int(Core.IntLiteral, constants.%int_32) { diff --git a/toolchain/check/testdata/pointer/import.carbon b/toolchain/check/testdata/pointer/import.carbon index 062ab14b7b965..789d3b7d7a4e3 100644 --- a/toolchain/check/testdata/pointer/import.carbon +++ b/toolchain/check/testdata/pointer/import.carbon @@ -92,20 +92,18 @@ var a: i32* = a_ref; // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.9 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -123,18 +121,16 @@ var a: i32* = a_ref; // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.26 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -159,7 +155,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+20, unloaded -// CHECK:STDOUT: %import_ref.2: ref %ptr = import_ref Implicit//default, inst+332, loaded +// CHECK:STDOUT: %import_ref.2: ref %ptr = import_ref Implicit//default, inst+328, loaded // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: .Int = %import_ref.37 // CHECK:STDOUT: import Core//prelude @@ -168,35 +164,35 @@ var a: i32* = a_ref; // CHECK:STDOUT: %import_ref.3 = import_ref Implicit//default, inst+33, unloaded // CHECK:STDOUT: %import_ref.4 = import_ref Implicit//default, inst+34, unloaded // CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+35, unloaded -// CHECK:STDOUT: %import_ref.6: type = import_ref Implicit//default, inst+76, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.7: type = import_ref Implicit//default, inst+77, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.8 = import_ref Implicit//default, inst+78, unloaded -// CHECK:STDOUT: %import_ref.9 = import_ref Implicit//default, inst+49, unloaded -// CHECK:STDOUT: %import_ref.10: type = import_ref Implicit//default, inst+102, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.11: type = import_ref Implicit//default, inst+103, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.12 = import_ref Implicit//default, inst+104, unloaded -// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+127, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.14: type = import_ref Implicit//default, inst+128, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.15 = import_ref Implicit//default, inst+129, unloaded -// CHECK:STDOUT: %import_ref.17: type = import_ref Implicit//default, inst+155, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.18: type = import_ref Implicit//default, inst+156, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.19 = import_ref Implicit//default, inst+157, unloaded -// CHECK:STDOUT: %import_ref.20 = import_ref Implicit//default, inst+183, unloaded -// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+184, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+185, unloaded -// CHECK:STDOUT: %import_ref.23: type = import_ref Implicit//default, inst+189, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.24: type = import_ref Implicit//default, inst+190, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.25 = import_ref Implicit//default, inst+191, unloaded -// CHECK:STDOUT: %import_ref.26 = import_ref Implicit//default, inst+205, unloaded -// CHECK:STDOUT: %import_ref.27: type = import_ref Implicit//default, inst+240, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.28: type = import_ref Implicit//default, inst+241, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.29 = import_ref Implicit//default, inst+242, unloaded -// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+265, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.31: type = import_ref Implicit//default, inst+266, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.32 = import_ref Implicit//default, inst+267, unloaded -// CHECK:STDOUT: %import_ref.34: type = import_ref Implicit//default, inst+293, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.35: type = import_ref Implicit//default, inst+294, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.36 = import_ref Implicit//default, inst+295, unloaded +// CHECK:STDOUT: %import_ref.6: type = import_ref Implicit//default, inst+74, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.7: type = import_ref Implicit//default, inst+75, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.8 = import_ref Implicit//default, inst+76, unloaded +// CHECK:STDOUT: %import_ref.9 = import_ref Implicit//default, inst+48, unloaded +// CHECK:STDOUT: %import_ref.10: type = import_ref Implicit//default, inst+100, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.11: type = import_ref Implicit//default, inst+101, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.12 = import_ref Implicit//default, inst+102, unloaded +// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+125, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.14: type = import_ref Implicit//default, inst+126, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.15 = import_ref Implicit//default, inst+127, unloaded +// CHECK:STDOUT: %import_ref.17: type = import_ref Implicit//default, inst+153, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.18: type = import_ref Implicit//default, inst+154, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.19 = import_ref Implicit//default, inst+155, unloaded +// CHECK:STDOUT: %import_ref.20 = import_ref Implicit//default, inst+181, unloaded +// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+182, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+183, unloaded +// CHECK:STDOUT: %import_ref.23: type = import_ref Implicit//default, inst+187, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.24: type = import_ref Implicit//default, inst+188, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.25 = import_ref Implicit//default, inst+189, unloaded +// CHECK:STDOUT: %import_ref.26 = import_ref Implicit//default, inst+202, unloaded +// CHECK:STDOUT: %import_ref.27: type = import_ref Implicit//default, inst+236, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.28: type = import_ref Implicit//default, inst+237, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.29 = import_ref Implicit//default, inst+238, unloaded +// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+261, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.31: type = import_ref Implicit//default, inst+262, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.32 = import_ref Implicit//default, inst+263, unloaded +// CHECK:STDOUT: %import_ref.34: type = import_ref Implicit//default, inst+289, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.35: type = import_ref Implicit//default, inst+290, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.36 = import_ref Implicit//default, inst+291, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -224,7 +220,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -244,7 +240,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -390,10 +386,10 @@ var a: i32* = a_ref; // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -435,13 +431,13 @@ var a: i32* = a_ref; // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -531,7 +527,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -574,7 +570,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -654,11 +650,11 @@ var a: i32* = a_ref; // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -701,7 +697,7 @@ var a: i32* = a_ref; // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 diff --git a/toolchain/check/testdata/return/no_prelude/import_convert_function.carbon b/toolchain/check/testdata/return/no_prelude/import_convert_function.carbon index a6fa1789ada58..b0d08c788c2f1 100644 --- a/toolchain/check/testdata/return/no_prelude/import_convert_function.carbon +++ b/toolchain/check/testdata/return/no_prelude/import_convert_function.carbon @@ -288,15 +288,13 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.1 = struct_value () [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.6 [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [template] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.1, @ImplicitAs(%i32) [template] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [template] @@ -541,7 +539,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -787,13 +785,13 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: return %.loc8_41 to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self: %ImplicitAs.type.2) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%T (%T); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type)]() -> @Convert.1.%T (%T); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Convert.2[%self.param_patt: Core.IntLiteral]() -> %i32 = "int.convert_checked"; @@ -882,11 +880,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.1(constants.%T, constants.%Self.1) { +// CHECK:STDOUT: specific @Convert.1(constants.%T, constants.%Self) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 -// CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%i32) { @@ -895,7 +893,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Convert.type => constants.%Convert.type.2 // CHECK:STDOUT: %Convert => constants.%Convert.2 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -915,7 +913,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.4 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.3 @@ -1049,15 +1047,13 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %int_0.1: Core.IntLiteral = int_value 0 [template] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.14 [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [template] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.1, @ImplicitAs(%i32) [template] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [template] @@ -1166,30 +1162,30 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %import_ref.16: type = import_ref Core//default, inst+71, loaded [template = Core.IntLiteral] // CHECK:STDOUT: %import_ref.17: type = import_ref Core//default, inst+79, loaded [template = constants.%ImplicitAs.type.3] // CHECK:STDOUT: %import_ref.18: = import_ref Core//default, inst+103, loaded [template = constants.%interface.1] -// CHECK:STDOUT: %import_ref.19: type = import_ref P//library, inst+148, loaded [template = constants.%C.2] -// CHECK:STDOUT: %import_ref.20: type = import_ref P//library, inst+153, loaded [template = constants.%ImplicitAs.type.4] -// CHECK:STDOUT: %import_ref.21: = import_ref P//library, inst+174, loaded [template = constants.%interface.2] -// CHECK:STDOUT: %import_ref.22: type = import_ref P//library, inst+191, loaded [template = constants.%C.3] -// CHECK:STDOUT: %import_ref.23: type = import_ref P//library, inst+196, loaded [template = constants.%ImplicitAs.type.4] -// CHECK:STDOUT: %import_ref.24: = import_ref P//library, inst+212, loaded [template = constants.%interface.3] -// CHECK:STDOUT: %import_ref.25: type = import_ref P//library, inst+228, loaded [template = constants.%C.4] -// CHECK:STDOUT: %import_ref.26: type = import_ref P//library, inst+233, loaded [template = constants.%ImplicitAs.type.4] -// CHECK:STDOUT: %import_ref.27: = import_ref P//library, inst+249, loaded [template = constants.%interface.4] -// CHECK:STDOUT: %import_ref.28: type = import_ref P//library, inst+265, loaded [template = constants.%C.5] -// CHECK:STDOUT: %import_ref.29: type = import_ref P//library, inst+270, loaded [template = constants.%ImplicitAs.type.4] -// CHECK:STDOUT: %import_ref.30: = import_ref P//library, inst+286, loaded [template = constants.%interface.5] -// CHECK:STDOUT: %import_ref.31: type = import_ref P//library, inst+302, loaded [template = constants.%C.6] -// CHECK:STDOUT: %import_ref.32: type = import_ref P//library, inst+307, loaded [template = constants.%ImplicitAs.type.4] -// CHECK:STDOUT: %import_ref.33: = import_ref P//library, inst+323, loaded [template = constants.%interface.6] -// CHECK:STDOUT: %import_ref.34: type = import_ref P//library, inst+339, loaded [template = constants.%C.7] -// CHECK:STDOUT: %import_ref.35: type = import_ref P//library, inst+344, loaded [template = constants.%ImplicitAs.type.4] -// CHECK:STDOUT: %import_ref.36: = import_ref P//library, inst+360, loaded [template = constants.%interface.7] -// CHECK:STDOUT: %import_ref.37: type = import_ref P//library, inst+376, loaded [template = constants.%C.8] -// CHECK:STDOUT: %import_ref.38: type = import_ref P//library, inst+381, loaded [template = constants.%ImplicitAs.type.4] -// CHECK:STDOUT: %import_ref.39: = import_ref P//library, inst+397, loaded [template = constants.%interface.8] -// CHECK:STDOUT: %import_ref.40: type = import_ref P//library, inst+413, loaded [template = constants.%C.9] -// CHECK:STDOUT: %import_ref.41: type = import_ref P//library, inst+418, loaded [template = constants.%ImplicitAs.type.4] -// CHECK:STDOUT: %import_ref.42: = import_ref P//library, inst+434, loaded [template = constants.%interface.9] +// CHECK:STDOUT: %import_ref.19: type = import_ref P//library, inst+146, loaded [template = constants.%C.2] +// CHECK:STDOUT: %import_ref.20: type = import_ref P//library, inst+151, loaded [template = constants.%ImplicitAs.type.4] +// CHECK:STDOUT: %import_ref.21: = import_ref P//library, inst+172, loaded [template = constants.%interface.2] +// CHECK:STDOUT: %import_ref.22: type = import_ref P//library, inst+189, loaded [template = constants.%C.3] +// CHECK:STDOUT: %import_ref.23: type = import_ref P//library, inst+194, loaded [template = constants.%ImplicitAs.type.4] +// CHECK:STDOUT: %import_ref.24: = import_ref P//library, inst+210, loaded [template = constants.%interface.3] +// CHECK:STDOUT: %import_ref.25: type = import_ref P//library, inst+226, loaded [template = constants.%C.4] +// CHECK:STDOUT: %import_ref.26: type = import_ref P//library, inst+231, loaded [template = constants.%ImplicitAs.type.4] +// CHECK:STDOUT: %import_ref.27: = import_ref P//library, inst+247, loaded [template = constants.%interface.4] +// CHECK:STDOUT: %import_ref.28: type = import_ref P//library, inst+263, loaded [template = constants.%C.5] +// CHECK:STDOUT: %import_ref.29: type = import_ref P//library, inst+268, loaded [template = constants.%ImplicitAs.type.4] +// CHECK:STDOUT: %import_ref.30: = import_ref P//library, inst+284, loaded [template = constants.%interface.5] +// CHECK:STDOUT: %import_ref.31: type = import_ref P//library, inst+300, loaded [template = constants.%C.6] +// CHECK:STDOUT: %import_ref.32: type = import_ref P//library, inst+305, loaded [template = constants.%ImplicitAs.type.4] +// CHECK:STDOUT: %import_ref.33: = import_ref P//library, inst+321, loaded [template = constants.%interface.6] +// CHECK:STDOUT: %import_ref.34: type = import_ref P//library, inst+337, loaded [template = constants.%C.7] +// CHECK:STDOUT: %import_ref.35: type = import_ref P//library, inst+342, loaded [template = constants.%ImplicitAs.type.4] +// CHECK:STDOUT: %import_ref.36: = import_ref P//library, inst+358, loaded [template = constants.%interface.7] +// CHECK:STDOUT: %import_ref.37: type = import_ref P//library, inst+374, loaded [template = constants.%C.8] +// CHECK:STDOUT: %import_ref.38: type = import_ref P//library, inst+379, loaded [template = constants.%ImplicitAs.type.4] +// CHECK:STDOUT: %import_ref.39: = import_ref P//library, inst+395, loaded [template = constants.%interface.8] +// CHECK:STDOUT: %import_ref.40: type = import_ref P//library, inst+411, loaded [template = constants.%C.9] +// CHECK:STDOUT: %import_ref.41: type = import_ref P//library, inst+416, loaded [template = constants.%ImplicitAs.type.4] +// CHECK:STDOUT: %import_ref.42: = import_ref P//library, inst+432, loaded [template = constants.%interface.9] // CHECK:STDOUT: %import_ref.43: %Make.type = import_ref P//library, inst+55, loaded [template = constants.%Make] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1226,7 +1222,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%T) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -1533,13 +1529,13 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: return %Make.call to %return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%T: type, constants.%Self: %ImplicitAs.type.2) { // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%T (%T); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type)]() -> @Convert.1.%T (%T); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Convert.2[%self.param_patt: Core.IntLiteral]() -> %i32 = "int.convert_checked"; @@ -1582,11 +1578,11 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: %T.patt => constants.%T // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.1(constants.%T, constants.%Self.1) { +// CHECK:STDOUT: specific @Convert.1(constants.%T, constants.%Self) { // CHECK:STDOUT: %T => constants.%T // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 -// CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self => constants.%Self +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @ImplicitAs(constants.%i32) { @@ -1595,7 +1591,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.3 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Convert.type => constants.%Convert.type.2 // CHECK:STDOUT: %Convert => constants.%Convert.2 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -1615,7 +1611,7 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.4 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self // CHECK:STDOUT: %Convert.type => constants.%Convert.type.4 // CHECK:STDOUT: %Convert => constants.%Convert.4 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.3 diff --git a/toolchain/check/testdata/struct/import.carbon b/toolchain/check/testdata/struct/import.carbon index cf4d9e6a3af89..3f737e31d38e7 100644 --- a/toolchain/check/testdata/struct/import.carbon +++ b/toolchain/check/testdata/struct/import.carbon @@ -43,10 +43,10 @@ var c_bad: C({.c = 1, .d = 2}) = F(); // --- fail_bad_value.impl.carbon impl package Implicit; -// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `C()` to `C()` [ImplicitAsConversionFailure] +// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `C()` to `C()` [ImplicitAsConversionFailure] // CHECK:STDERR: var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+3]]:1: note: type `C()` does not implement interface `ImplicitAs(C())` [MissingImplInMemberAccessNote] +// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+3]]:1: note: type `C()` does not implement interface `ImplicitAs(C())` [MissingImplInMemberAccessNote] // CHECK:STDERR: var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var c_bad: C({.a = 3, .b = 4}) = F(); @@ -273,20 +273,18 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -304,18 +302,16 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -373,9 +369,9 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1: ref %struct_type.a = import_ref Implicit//default, inst+22, loaded -// CHECK:STDOUT: %import_ref.2: ref %struct_type.a.d.1 = import_ref Implicit//default, inst+357, loaded -// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+416, loaded [template = constants.%C.generic] -// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+460, loaded [template = constants.%F] +// CHECK:STDOUT: %import_ref.2: ref %struct_type.a.d.1 = import_ref Implicit//default, inst+353, loaded +// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+412, loaded [template = constants.%C.generic] +// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+456, loaded [template = constants.%F] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: .Int = %import_ref.39 // CHECK:STDOUT: .ImplicitAs = %import_ref.42 @@ -385,37 +381,37 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+38, unloaded // CHECK:STDOUT: %import_ref.6: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Implicit//default, inst+39, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)] // CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+40, unloaded -// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.10: = import_ref Implicit//default, inst+83, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] -// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+54, unloaded -// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded -// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded -// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded -// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded -// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded -// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded -// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+210, unloaded -// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+245, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+246, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+247, unloaded -// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+270, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+271, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+272, unloaded -// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+298, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+299, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+300, unloaded -// CHECK:STDOUT: %import_ref.40: = import_ref Implicit//default, inst+423, loaded [template = constants.%complete_type] -// CHECK:STDOUT: %import_ref.41 = import_ref Implicit//default, inst+421, unloaded +// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+79, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+80, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.10: = import_ref Implicit//default, inst+81, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] +// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+53, unloaded +// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+105, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+106, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+107, unloaded +// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+130, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+131, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+132, unloaded +// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+158, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+159, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+160, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+186, unloaded +// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+187, unloaded +// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+188, unloaded +// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+192, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+193, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+194, unloaded +// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+207, unloaded +// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+241, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+242, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+243, unloaded +// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+266, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+267, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+268, unloaded +// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+294, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+295, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+296, unloaded +// CHECK:STDOUT: %import_ref.40: = import_ref Implicit//default, inst+419, loaded [template = constants.%complete_type] +// CHECK:STDOUT: %import_ref.41 = import_ref Implicit//default, inst+417, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -486,7 +482,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -506,7 +502,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -665,10 +661,10 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -710,13 +706,13 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -838,7 +834,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -881,7 +877,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -961,11 +957,11 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -1008,7 +1004,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 @@ -1060,7 +1056,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.13 // CHECK:STDOUT: %Convert => constants.%Convert.13 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5 @@ -1100,20 +1096,18 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -1131,18 +1125,16 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -1180,9 +1172,9 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+22, unloaded -// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+357, unloaded -// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+416, loaded [template = constants.%C.generic] -// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+460, loaded [template = constants.%F] +// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+353, unloaded +// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+412, loaded [template = constants.%C.generic] +// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+456, loaded [template = constants.%F] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -1190,37 +1182,37 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+38, unloaded // CHECK:STDOUT: %import_ref.6 = import_ref Implicit//default, inst+39, unloaded // CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+40, unloaded -// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.10 = import_ref Implicit//default, inst+83, unloaded -// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+54, unloaded -// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded -// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded -// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded -// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded -// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded -// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded -// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+210, unloaded -// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+245, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+246, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+247, unloaded -// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+270, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+271, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+272, unloaded -// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+298, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+299, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+300, unloaded -// CHECK:STDOUT: %import_ref.39: = import_ref Implicit//default, inst+423, loaded [template = constants.%complete_type] -// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+421, unloaded +// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+79, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+80, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.10 = import_ref Implicit//default, inst+81, unloaded +// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+53, unloaded +// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+105, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+106, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+107, unloaded +// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+130, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+131, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+132, unloaded +// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+158, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+159, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+160, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+186, unloaded +// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+187, unloaded +// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+188, unloaded +// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+192, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+193, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+194, unloaded +// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+207, unloaded +// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+241, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+242, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+243, unloaded +// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+266, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+267, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+268, unloaded +// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+294, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+295, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+296, unloaded +// CHECK:STDOUT: %import_ref.39: = import_ref Implicit//default, inst+419, loaded [template = constants.%complete_type] +// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+417, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1249,7 +1241,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -1269,7 +1261,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -1428,10 +1420,10 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -1473,13 +1465,13 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -1572,7 +1564,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -1615,7 +1607,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -1695,11 +1687,11 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -1742,7 +1734,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 @@ -1802,20 +1794,18 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -1833,18 +1823,16 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -1904,9 +1892,9 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+22, unloaded -// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+357, unloaded -// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+416, loaded [template = constants.%C.generic] -// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+460, loaded [template = constants.%F] +// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+353, unloaded +// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+412, loaded [template = constants.%C.generic] +// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+456, loaded [template = constants.%F] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: .ImplicitAs = %import_ref.41 // CHECK:STDOUT: import Core//prelude @@ -1915,37 +1903,37 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+38, unloaded // CHECK:STDOUT: %import_ref.6: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Implicit//default, inst+39, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)] // CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+40, unloaded -// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.10: = import_ref Implicit//default, inst+83, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] -// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+54, unloaded -// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded -// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded -// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded -// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded -// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded -// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded -// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+210, unloaded -// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+245, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+246, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+247, unloaded -// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+270, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+271, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+272, unloaded -// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+298, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+299, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+300, unloaded -// CHECK:STDOUT: %import_ref.39: = import_ref Implicit//default, inst+423, loaded [template = constants.%complete_type] -// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+421, unloaded +// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+79, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+80, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.10: = import_ref Implicit//default, inst+81, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] +// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+53, unloaded +// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+105, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+106, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+107, unloaded +// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+130, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+131, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+132, unloaded +// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+158, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+159, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+160, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+186, unloaded +// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+187, unloaded +// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+188, unloaded +// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+192, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+193, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+194, unloaded +// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+207, unloaded +// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+241, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+242, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+243, unloaded +// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+266, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+267, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+268, unloaded +// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+294, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+295, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+296, unloaded +// CHECK:STDOUT: %import_ref.39: = import_ref Implicit//default, inst+419, loaded [template = constants.%complete_type] +// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+417, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1989,7 +1977,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -2009,7 +1997,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -2168,10 +2156,10 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -2213,13 +2201,13 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -2313,7 +2301,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -2356,7 +2344,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -2436,11 +2424,11 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -2483,7 +2471,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 @@ -2535,7 +2523,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.13 // CHECK:STDOUT: %Convert => constants.%Convert.13 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5 @@ -2581,7 +2569,7 @@ var c_bad: C({.a = 3, .b = 4}) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.7 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.15 // CHECK:STDOUT: %Convert => constants.%Convert.15 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.6 diff --git a/toolchain/check/testdata/tuple/import.carbon b/toolchain/check/testdata/tuple/import.carbon index 9610585bf9b68..6f2778be8cd86 100644 --- a/toolchain/check/testdata/tuple/import.carbon +++ b/toolchain/check/testdata/tuple/import.carbon @@ -45,10 +45,10 @@ var c_bad: C((1, 2, 3)) = F(); impl package Implicit; -// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `C()` to `C()` [ImplicitAsConversionFailure] +// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `C()` to `C()` [ImplicitAsConversionFailure] // CHECK:STDERR: var c_bad: C((3, 4)) = F(); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ -// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+3]]:1: note: type `C()` does not implement interface `ImplicitAs(C())` [MissingImplInMemberAccessNote] +// CHECK:STDERR: fail_bad_value.impl.carbon:[[@LINE+3]]:1: note: type `C()` does not implement interface `ImplicitAs(C())` [MissingImplInMemberAccessNote] // CHECK:STDERR: var c_bad: C((3, 4)) = F(); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ var c_bad: C((3, 4)) = F(); @@ -302,20 +302,18 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -333,18 +331,16 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -404,9 +400,9 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1: ref %tuple.type.2 = import_ref Implicit//default, inst+24, loaded -// CHECK:STDOUT: %import_ref.2: ref %tuple.type.8 = import_ref Implicit//default, inst+370, loaded -// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+453, loaded [template = constants.%C.generic] -// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+487, loaded [template = constants.%F] +// CHECK:STDOUT: %import_ref.2: ref %tuple.type.8 = import_ref Implicit//default, inst+366, loaded +// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+449, loaded [template = constants.%C.generic] +// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+483, loaded [template = constants.%F] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: .Int = %import_ref.39 // CHECK:STDOUT: .ImplicitAs = %import_ref.42 @@ -416,37 +412,37 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+40, unloaded // CHECK:STDOUT: %import_ref.6: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Implicit//default, inst+41, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)] // CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+42, unloaded -// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+83, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+84, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.10: = import_ref Implicit//default, inst+85, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] -// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+56, unloaded -// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+109, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+110, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+111, unloaded -// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+134, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+135, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+136, unloaded -// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+162, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+163, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+164, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+190, unloaded -// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+191, unloaded -// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+192, unloaded -// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+196, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+197, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+198, unloaded -// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+212, unloaded -// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+247, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+248, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+249, unloaded -// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+272, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+273, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+274, unloaded -// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+300, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+301, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+302, unloaded -// CHECK:STDOUT: %import_ref.40: = import_ref Implicit//default, inst+460, loaded [template = constants.%complete_type] -// CHECK:STDOUT: %import_ref.41 = import_ref Implicit//default, inst+458, unloaded +// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.10: = import_ref Implicit//default, inst+83, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] +// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+55, unloaded +// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded +// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded +// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded +// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded +// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded +// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded +// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+209, unloaded +// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+243, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+244, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+245, unloaded +// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+268, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+269, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+270, unloaded +// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+296, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+297, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+298, unloaded +// CHECK:STDOUT: %import_ref.40: = import_ref Implicit//default, inst+456, loaded [template = constants.%complete_type] +// CHECK:STDOUT: %import_ref.41 = import_ref Implicit//default, inst+454, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -526,7 +522,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -546,7 +542,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -705,10 +701,10 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -750,13 +746,13 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -886,7 +882,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -929,7 +925,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -1009,11 +1005,11 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -1056,7 +1052,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 @@ -1108,7 +1104,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.13 // CHECK:STDOUT: %Convert => constants.%Convert.13 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5 @@ -1148,20 +1144,18 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -1179,18 +1173,16 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -1229,9 +1221,9 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+24, unloaded -// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+370, unloaded -// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+453, loaded [template = constants.%C.generic] -// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+487, loaded [template = constants.%F] +// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+366, unloaded +// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+449, loaded [template = constants.%C.generic] +// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+483, loaded [template = constants.%F] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: import Core//prelude // CHECK:STDOUT: import Core//prelude/... @@ -1239,37 +1231,37 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+40, unloaded // CHECK:STDOUT: %import_ref.6 = import_ref Implicit//default, inst+41, unloaded // CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+42, unloaded -// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+83, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+84, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.10 = import_ref Implicit//default, inst+85, unloaded -// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+56, unloaded -// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+109, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+110, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+111, unloaded -// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+134, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+135, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+136, unloaded -// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+162, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+163, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+164, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+190, unloaded -// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+191, unloaded -// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+192, unloaded -// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+196, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+197, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+198, unloaded -// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+212, unloaded -// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+247, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+248, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+249, unloaded -// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+272, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+273, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+274, unloaded -// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+300, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+301, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+302, unloaded -// CHECK:STDOUT: %import_ref.39: = import_ref Implicit//default, inst+460, loaded [template = constants.%complete_type] -// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+458, unloaded +// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.10 = import_ref Implicit//default, inst+83, unloaded +// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+55, unloaded +// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded +// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded +// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded +// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded +// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded +// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded +// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+209, unloaded +// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+243, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+244, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+245, unloaded +// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+268, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+269, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+270, unloaded +// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+296, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+297, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+298, unloaded +// CHECK:STDOUT: %import_ref.39: = import_ref Implicit//default, inst+456, loaded [template = constants.%complete_type] +// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+454, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -1299,7 +1291,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -1319,7 +1311,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -1478,10 +1470,10 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -1523,13 +1515,13 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -1622,7 +1614,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -1665,7 +1657,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -1745,11 +1737,11 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -1792,7 +1784,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 @@ -1852,20 +1844,18 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %iN: type = int_type signed, %N [symbolic] // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.1: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Dest.patt: type = symbolic_binding_pattern Dest, 0 [symbolic] // CHECK:STDOUT: %ImplicitAs.type.3: type = facet_type <@ImplicitAs, @ImplicitAs(%iN)> [symbolic] // CHECK:STDOUT: %N.patt: Core.IntLiteral = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %Self.2: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.1: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic] // CHECK:STDOUT: %Convert.1: %Convert.type.1 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.2 [symbolic] +// CHECK:STDOUT: %Self.as_type.1: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.1: type = assoc_entity_type %ImplicitAs.type.2, %Convert.type.1 [symbolic] // CHECK:STDOUT: %assoc0.1: %Convert.assoc_type.1 = assoc_entity element0, imports.%import_ref.11 [symbolic] // CHECK:STDOUT: %Convert.type.2: type = fn_type @Convert.2, @impl.1(%N) [symbolic] // CHECK:STDOUT: %Convert.2: %Convert.type.2 = struct_value () [symbolic] // CHECK:STDOUT: %interface.1: = interface_witness (%Convert.2) [symbolic] -// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.1 [symbolic] // CHECK:STDOUT: %uN: type = int_type unsigned, %N [symbolic] // CHECK:STDOUT: %ImplicitAs.type.4: type = facet_type <@ImplicitAs, @ImplicitAs(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.3: type = fn_type @Convert.3, @impl.2(%N) [symbolic] @@ -1883,18 +1873,16 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Convert.6: %Convert.type.6 = struct_value () [symbolic] // CHECK:STDOUT: %interface.4: = interface_witness (%Convert.6) [symbolic] // CHECK:STDOUT: %As.type.2: type = facet_type <@As, @As(%Dest)> [symbolic] -// CHECK:STDOUT: %Self.3: @As.%As.type (%As.type.2) = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %Self.2: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %As.type.3: type = facet_type <@As, @As(%iN)> [symbolic] -// CHECK:STDOUT: %Self.4: %As.type.2 = bind_symbolic_name Self, 1 [symbolic] // CHECK:STDOUT: %Convert.type.7: type = fn_type @Convert.6, @As(%Dest) [symbolic] // CHECK:STDOUT: %Convert.7: %Convert.type.7 = struct_value () [symbolic] -// CHECK:STDOUT: %Self.as_type.3: type = facet_access_type %Self.4 [symbolic] +// CHECK:STDOUT: %Self.as_type.2: type = facet_access_type %Self.2 [symbolic] // CHECK:STDOUT: %Convert.assoc_type.3: type = assoc_entity_type %As.type.2, %Convert.type.7 [symbolic] // CHECK:STDOUT: %assoc0.3: %Convert.assoc_type.3 = assoc_entity element0, imports.%import_ref.28 [symbolic] // CHECK:STDOUT: %Convert.type.8: type = fn_type @Convert.7, @impl.5(%N) [symbolic] // CHECK:STDOUT: %Convert.8: %Convert.type.8 = struct_value () [symbolic] // CHECK:STDOUT: %interface.5: = interface_witness (%Convert.8) [symbolic] -// CHECK:STDOUT: %Self.as_type.4: type = facet_access_type %Self.3 [symbolic] // CHECK:STDOUT: %As.type.4: type = facet_type <@As, @As(%uN)> [symbolic] // CHECK:STDOUT: %Convert.type.9: type = fn_type @Convert.8, @impl.6(%N) [symbolic] // CHECK:STDOUT: %Convert.9: %Convert.type.9 = struct_value () [symbolic] @@ -1954,9 +1942,9 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %import_ref.1 = import_ref Implicit//default, inst+24, unloaded -// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+370, unloaded -// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+453, loaded [template = constants.%C.generic] -// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+487, loaded [template = constants.%F] +// CHECK:STDOUT: %import_ref.2 = import_ref Implicit//default, inst+366, unloaded +// CHECK:STDOUT: %import_ref.3: %C.type = import_ref Implicit//default, inst+449, loaded [template = constants.%C.generic] +// CHECK:STDOUT: %import_ref.4: %F.type = import_ref Implicit//default, inst+483, loaded [template = constants.%F] // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: .ImplicitAs = %import_ref.41 // CHECK:STDOUT: import Core//prelude @@ -1965,37 +1953,37 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %import_ref.5 = import_ref Implicit//default, inst+40, unloaded // CHECK:STDOUT: %import_ref.6: @ImplicitAs.%Convert.assoc_type (%Convert.assoc_type.1) = import_ref Implicit//default, inst+41, loaded [symbolic = @ImplicitAs.%assoc0 (constants.%assoc0.6)] // CHECK:STDOUT: %import_ref.7 = import_ref Implicit//default, inst+42, unloaded -// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+83, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+84, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] -// CHECK:STDOUT: %import_ref.10: = import_ref Implicit//default, inst+85, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] -// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+56, unloaded -// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+109, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+110, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] -// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+111, unloaded -// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+134, loaded [symbolic = @impl.3.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+135, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+136, unloaded -// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+162, loaded [symbolic = @impl.4.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+163, loaded [template = constants.%ImplicitAs.type.5] -// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+164, unloaded -// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+190, unloaded -// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+191, unloaded -// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+192, unloaded -// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+196, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+197, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] -// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+198, unloaded -// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+212, unloaded -// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+247, loaded [template = Core.IntLiteral] -// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+248, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] -// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+249, unloaded -// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+272, loaded [symbolic = @impl.7.%iN (constants.%iN)] -// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+273, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+274, unloaded -// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+300, loaded [symbolic = @impl.8.%uN (constants.%uN)] -// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+301, loaded [template = constants.%As.type.5] -// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+302, unloaded -// CHECK:STDOUT: %import_ref.39: = import_ref Implicit//default, inst+460, loaded [template = constants.%complete_type] -// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+458, unloaded +// CHECK:STDOUT: %import_ref.8: type = import_ref Implicit//default, inst+81, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.9: type = import_ref Implicit//default, inst+82, loaded [symbolic = @impl.1.%ImplicitAs.type (constants.%ImplicitAs.type.3)] +// CHECK:STDOUT: %import_ref.10: = import_ref Implicit//default, inst+83, loaded [symbolic = @impl.1.%interface (constants.%interface.1)] +// CHECK:STDOUT: %import_ref.11 = import_ref Implicit//default, inst+55, unloaded +// CHECK:STDOUT: %import_ref.12: type = import_ref Implicit//default, inst+107, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.13: type = import_ref Implicit//default, inst+108, loaded [symbolic = @impl.2.%ImplicitAs.type (constants.%ImplicitAs.type.4)] +// CHECK:STDOUT: %import_ref.14 = import_ref Implicit//default, inst+109, unloaded +// CHECK:STDOUT: %import_ref.15: type = import_ref Implicit//default, inst+132, loaded [symbolic = @impl.3.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.16: type = import_ref Implicit//default, inst+133, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.17 = import_ref Implicit//default, inst+134, unloaded +// CHECK:STDOUT: %import_ref.19: type = import_ref Implicit//default, inst+160, loaded [symbolic = @impl.4.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.20: type = import_ref Implicit//default, inst+161, loaded [template = constants.%ImplicitAs.type.5] +// CHECK:STDOUT: %import_ref.21 = import_ref Implicit//default, inst+162, unloaded +// CHECK:STDOUT: %import_ref.22 = import_ref Implicit//default, inst+188, unloaded +// CHECK:STDOUT: %import_ref.23 = import_ref Implicit//default, inst+189, unloaded +// CHECK:STDOUT: %import_ref.24 = import_ref Implicit//default, inst+190, unloaded +// CHECK:STDOUT: %import_ref.25: type = import_ref Implicit//default, inst+194, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.26: type = import_ref Implicit//default, inst+195, loaded [symbolic = @impl.5.%As.type (constants.%As.type.3)] +// CHECK:STDOUT: %import_ref.27 = import_ref Implicit//default, inst+196, unloaded +// CHECK:STDOUT: %import_ref.28 = import_ref Implicit//default, inst+209, unloaded +// CHECK:STDOUT: %import_ref.29: type = import_ref Implicit//default, inst+243, loaded [template = Core.IntLiteral] +// CHECK:STDOUT: %import_ref.30: type = import_ref Implicit//default, inst+244, loaded [symbolic = @impl.6.%As.type (constants.%As.type.4)] +// CHECK:STDOUT: %import_ref.31 = import_ref Implicit//default, inst+245, unloaded +// CHECK:STDOUT: %import_ref.32: type = import_ref Implicit//default, inst+268, loaded [symbolic = @impl.7.%iN (constants.%iN)] +// CHECK:STDOUT: %import_ref.33: type = import_ref Implicit//default, inst+269, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.34 = import_ref Implicit//default, inst+270, unloaded +// CHECK:STDOUT: %import_ref.36: type = import_ref Implicit//default, inst+296, loaded [symbolic = @impl.8.%uN (constants.%uN)] +// CHECK:STDOUT: %import_ref.37: type = import_ref Implicit//default, inst+297, loaded [template = constants.%As.type.5] +// CHECK:STDOUT: %import_ref.38 = import_ref Implicit//default, inst+298, unloaded +// CHECK:STDOUT: %import_ref.39: = import_ref Implicit//default, inst+456, loaded [template = constants.%complete_type] +// CHECK:STDOUT: %import_ref.40 = import_ref Implicit//default, inst+454, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -2039,7 +2027,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.1, @ImplicitAs(%Dest) [symbolic = %Convert.type (constants.%Convert.type.1)] // CHECK:STDOUT: %Convert: @ImplicitAs.%Convert.type (%Convert.type.1) = struct_value () [symbolic = %Convert (constants.%Convert.1)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2), @ImplicitAs.%Convert.type (%Convert.type.1) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.1)] @@ -2059,7 +2047,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] // CHECK:STDOUT: %Convert.type: type = fn_type @Convert.6, @As(%Dest) [symbolic = %Convert.type (constants.%Convert.type.7)] // CHECK:STDOUT: %Convert: @As.%Convert.type (%Convert.type.7) = struct_value () [symbolic = %Convert (constants.%Convert.7)] // CHECK:STDOUT: %Convert.assoc_type: type = assoc_entity_type @As.%As.type (%As.type.2), @As.%Convert.type (%Convert.type.7) [symbolic = %Convert.assoc_type (constants.%Convert.assoc_type.3)] @@ -2218,10 +2206,10 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.2)) { +// CHECK:STDOUT: generic fn @Convert.1(constants.%Dest: type, constants.%Self.1: %ImplicitAs.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.2)] -// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self: %ImplicitAs.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.1)] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.1)] // CHECK:STDOUT: // CHECK:STDOUT: fn[%self.param_patt: @Convert.1.%Self.as_type (%Self.as_type.1)]() -> @Convert.1.%Dest (%Dest); @@ -2263,13 +2251,13 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: fn[%self.param_patt: @Convert.5.%uN (%uN)]() -> Core.IntLiteral = "int.convert_checked"; // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.3: @As.%As.type (%As.type.2)) { +// CHECK:STDOUT: generic fn @Convert.6(constants.%Dest: type, constants.%Self.2: %As.type.2) { // CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)] // CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%Dest)> [symbolic = %As.type (constants.%As.type.2)] -// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.4)] -// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.3)] +// CHECK:STDOUT: %Self: %As.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.2)] +// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic = %Self.as_type (constants.%Self.as_type.2)] // CHECK:STDOUT: -// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.3)]() -> @Convert.6.%Dest (%Dest); +// CHECK:STDOUT: fn[%self.param_patt: @Convert.6.%Self.as_type (%Self.as_type.2)]() -> @Convert.6.%Dest (%Dest); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Convert.7(constants.%N: Core.IntLiteral) { @@ -2363,7 +2351,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.2 // CHECK:STDOUT: %Self => constants.%Self.1 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.2(constants.%N) { @@ -2406,7 +2394,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.5 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.5 // CHECK:STDOUT: %Convert => constants.%Convert.5 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.2 @@ -2486,11 +2474,11 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: %Dest.patt => constants.%Dest // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.3) { +// CHECK:STDOUT: specific @Convert.6(constants.%Dest, constants.%Self.2) { // CHECK:STDOUT: %Dest => constants.%Dest // CHECK:STDOUT: %As.type => constants.%As.type.2 -// CHECK:STDOUT: %Self => constants.%Self.3 -// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.4 +// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self.as_type => constants.%Self.as_type.2 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @Convert.7(constants.%N) { @@ -2533,7 +2521,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %As.type => constants.%As.type.5 -// CHECK:STDOUT: %Self => constants.%Self.4 +// CHECK:STDOUT: %Self => constants.%Self.2 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.11 // CHECK:STDOUT: %Convert => constants.%Convert.11 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.4 @@ -2585,7 +2573,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.6 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.13 // CHECK:STDOUT: %Convert => constants.%Convert.13 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.5 @@ -2631,7 +2619,7 @@ var c_bad: C((3, 4)) = F(); // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.7 -// CHECK:STDOUT: %Self => constants.%Self.2 +// CHECK:STDOUT: %Self => constants.%Self.1 // CHECK:STDOUT: %Convert.type => constants.%Convert.type.15 // CHECK:STDOUT: %Convert => constants.%Convert.15 // CHECK:STDOUT: %Convert.assoc_type => constants.%Convert.assoc_type.6 diff --git a/toolchain/check/testdata/where_expr/constraints.carbon b/toolchain/check/testdata/where_expr/constraints.carbon index 9e4fc1f4f036f..ee1dad73bcd4f 100644 --- a/toolchain/check/testdata/where_expr/constraints.carbon +++ b/toolchain/check/testdata/where_expr/constraints.carbon @@ -25,16 +25,6 @@ fn Impls(V:! J where .Self impls I); fn And(W:! I where .Self impls J and .Member == ()); -// --- equal_constraint.carbon - -library "[[@TEST_NAME]]"; - -interface N { - let P:! type; -} - -fn Equal(T:! N where .P = {}); - // --- associated_type_impls.carbon library "[[@TEST_NAME]]"; @@ -48,22 +38,6 @@ interface K { fn AssociatedTypeImpls(W:! K where .Associated impls M); -// --- fail_check_rewrite_constraints.carbon - -library "[[@TEST_NAME]]"; - -import library "state_constraints"; - -// `2` can't be converted to the type of `I.Member` -// CHECK:STDERR: fail_check_rewrite_constraints.carbon:[[@LINE+7]]:46: error: cannot implicitly convert from `Core.IntLiteral` to `type` [ImplicitAsConversionFailure] -// CHECK:STDERR: fn RewriteTypeMismatch(X:! I where .Member = 2); -// CHECK:STDERR: ^ -// CHECK:STDERR: fail_check_rewrite_constraints.carbon:[[@LINE+4]]:46: note: type `Core.IntLiteral` does not implement interface `ImplicitAs(type)` [MissingImplInMemberAccessNote] -// CHECK:STDERR: fn RewriteTypeMismatch(X:! I where .Member = 2); -// CHECK:STDERR: ^ -// CHECK:STDERR: -fn RewriteTypeMismatch(X:! I where .Member = 2); - // --- fail_left_of_impls_non_type.carbon library "[[@TEST_NAME]]"; @@ -112,10 +86,10 @@ impl C as J {} // TODO: Should report that `C` does not meet the constraint. fn DoesNotImplI() { - // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+11]]:3: error: cannot implicitly convert from `type` to `J` [ImplicitAsConversionFailure] + // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+11]]:3: error: cannot implicitly convert from `type` to `J where...` [ImplicitAsConversionFailure] // CHECK:STDERR: Impls(C); // CHECK:STDERR: ^~~~~~~~ - // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+8]]:3: note: type `type` does not implement interface `ImplicitAs(J)` [MissingImplInMemberAccessNote] + // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+8]]:3: note: type `type` does not implement interface `ImplicitAs(J where...)` [MissingImplInMemberAccessNote] // CHECK:STDERR: Impls(C); // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE-14]]:1: in import [InImport] @@ -130,66 +104,48 @@ fn EmptyStruct(Y:! J where .Self == {}); // TODO: Should report that `C` does not meeet the constraint. fn NotEmptyStruct() { - // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+10]]:3: error: cannot implicitly convert from `type` to `J where...` [ImplicitAsConversionFailure] + // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+9]]:3: error: cannot implicitly convert from `type` to `J where...` [ImplicitAsConversionFailure] // CHECK:STDERR: EmptyStruct(C); // CHECK:STDERR: ^~~~~~~~~~~~~~ - // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+7]]:3: note: type `type` does not implement interface `ImplicitAs(J where...)` [MissingImplInMemberAccessNote] + // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE+6]]:3: note: type `type` does not implement interface `ImplicitAs(J where...)` [MissingImplInMemberAccessNote] // CHECK:STDERR: EmptyStruct(C); // CHECK:STDERR: ^~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_enforce_constraint.carbon:[[@LINE-10]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn EmptyStruct(Y:! J where .Self == {}); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: EmptyStruct(C); } -// --- fail_todo_let.carbon - -library "[[@TEST_NAME]]"; - -interface A {} -class D {} -impl D as A {} -// TODO: This should be a compile-time binding, once that is supported. -// CHECK:STDERR: fail_todo_let.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `type` to `type where...` [ImplicitAsConversionFailure] -// CHECK:STDERR: let B: type where .Self impls A = D; -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// CHECK:STDERR: fail_todo_let.carbon:[[@LINE+3]]:1: note: type `type` does not implement interface `ImplicitAs(type where...)` [MissingImplInMemberAccessNote] -// CHECK:STDERR: let B: type where .Self impls A = D; -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -let B: type where .Self impls A = D; - // CHECK:STDOUT: --- state_constraints.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %J.type.1: type = facet_type <@J> [template] -// CHECK:STDOUT: %Self.1: %J.type.1 = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template] -// CHECK:STDOUT: %Self.2: %I.type.1 = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %assoc_type.1: type = assoc_entity_type %I.type.1, type [template] +// CHECK:STDOUT: %J.type: type = facet_type <@J> [template] +// CHECK:STDOUT: %Self.1: %J.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %I.type: type = facet_type <@I> [template] +// CHECK:STDOUT: %Self.2: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type.1: type = assoc_entity_type %I.type, type [template] // CHECK:STDOUT: %assoc0: %assoc_type.1 = assoc_entity element0, @I.%Member [template] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] -// CHECK:STDOUT: %assoc_type.2: type = assoc_entity_type %I.type.1, %J.type.1 [template] +// CHECK:STDOUT: %assoc_type.2: type = assoc_entity_type %I.type, %J.type [template] // CHECK:STDOUT: %assoc1: %assoc_type.2 = assoc_entity element1, @I.%Second [template] -// CHECK:STDOUT: %.Self.1: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic] -// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template] -// CHECK:STDOUT: %U: %I.type.2 = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %I.type.2 = symbolic_binding_pattern U, 0 [symbolic] +// CHECK:STDOUT: %.Self.1: %I.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [template] +// 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: %EqualEqual.type: type = fn_type @EqualEqual [template] // CHECK:STDOUT: %EqualEqual: %EqualEqual.type = struct_value () [template] -// CHECK:STDOUT: %.Self.2: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self.2: %J.type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %.Self.as_type.1: type = facet_access_type %.Self.2 [symbolic] -// CHECK:STDOUT: %J.type.2: type = facet_type <@J where TODO> [template] -// CHECK:STDOUT: %V: %J.type.2 = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %J.type.2 = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %J_where.type: type = facet_type <@J where TODO> [template] +// 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: %Impls.type: type = fn_type @Impls [template] // CHECK:STDOUT: %Impls: %Impls.type = struct_value () [template] // CHECK:STDOUT: %.Self.as_type.2: type = facet_access_type %.Self.1 [symbolic] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.1 [symbolic] // CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] -// CHECK:STDOUT: %I.type.3: type = facet_type <@I where TODO> [template] -// CHECK:STDOUT: %W: %I.type.3 = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: %I.type.3 = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %W: %I_where.type = bind_symbolic_name W, 0 [symbolic] +// CHECK:STDOUT: %W.patt: %I_where.type = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %And.type: type = fn_type @And [template] // CHECK:STDOUT: %And: %And.type = struct_value () [template] // CHECK:STDOUT: } @@ -211,64 +167,64 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: .And = %And.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type.1] {} {} -// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type.1] {} {} +// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type] {} {} +// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {} // CHECK:STDOUT: %EqualEqual.decl: %EqualEqual.type = fn_decl @EqualEqual [template = constants.%EqualEqual] { -// CHECK:STDOUT: %U.patt.loc11_15.1: %I.type.2 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] -// CHECK:STDOUT: %U.param_patt: %I.type.2 = value_param_pattern %U.patt.loc11_15.1, runtime_param [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.patt.loc11_15.1: %I_where.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] +// CHECK:STDOUT: %U.param_patt: %I_where.type = value_param_pattern %U.patt.loc11_15.1, runtime_param [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.1] -// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1] // CHECK:STDOUT: %.loc11_37: %empty_tuple.type = tuple_literal () -// CHECK:STDOUT: %.loc11_21: type = where_expr %.Self [template = constants.%I.type.2] { +// CHECK:STDOUT: %.loc11_21: type = where_expr %.Self [template = constants.%I_where.type] { // CHECK:STDOUT: requirement_equivalent %.Self.ref, %.loc11_37 // CHECK:STDOUT: } -// CHECK:STDOUT: %U.param: %I.type.2 = value_param runtime_param -// CHECK:STDOUT: %U.loc11_15.1: %I.type.2 = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc11_15.2 (constants.%U)] +// CHECK:STDOUT: %U.param: %I_where.type = value_param runtime_param +// CHECK:STDOUT: %U.loc11_15.1: %I_where.type = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc11_15.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %Impls.decl: %Impls.type = fn_decl @Impls [template = constants.%Impls] { -// CHECK:STDOUT: %V.patt.loc13_10.1: %J.type.2 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)] -// CHECK:STDOUT: %V.param_patt: %J.type.2 = value_param_pattern %V.patt.loc13_10.1, runtime_param [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)] +// 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.param_patt: %J_where.type = value_param_pattern %V.patt.loc13_10.1, runtime_param [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type.1] -// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.2] -// CHECK:STDOUT: %.Self.ref: %J.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.2] -// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1] +// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type] +// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %.Self.ref: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic = constants.%.Self.as_type.1] // CHECK:STDOUT: %.loc13_22: type = converted %.Self.ref, %.Self.as_type [symbolic = constants.%.Self.as_type.1] -// CHECK:STDOUT: %.loc13_16: type = where_expr %.Self [template = constants.%J.type.2] { +// CHECK:STDOUT: %.loc13_16: type = where_expr %.Self [template = constants.%J_where.type] { // CHECK:STDOUT: requirement_impls %.loc13_22, %I.ref // CHECK:STDOUT: } -// CHECK:STDOUT: %V.param: %J.type.2 = value_param runtime_param -// CHECK:STDOUT: %V.loc13_10.1: %J.type.2 = bind_symbolic_name V, 0, %V.param [symbolic = %V.loc13_10.2 (constants.%V)] +// CHECK:STDOUT: %V.param: %J_where.type = value_param runtime_param +// CHECK:STDOUT: %V.loc13_10.1: %J_where.type = bind_symbolic_name V, 0, %V.param [symbolic = %V.loc13_10.2 (constants.%V)] // CHECK:STDOUT: } // CHECK:STDOUT: %And.decl: %And.type = fn_decl @And [template = constants.%And] { -// CHECK:STDOUT: %W.patt.loc15_8.1: %I.type.3 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] -// CHECK:STDOUT: %W.param_patt: %I.type.3 = value_param_pattern %W.patt.loc15_8.1, runtime_param [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc15_8.1: %I_where.type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.param_patt: %I_where.type = value_param_pattern %W.patt.loc15_8.1, runtime_param [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.1] -// CHECK:STDOUT: %.Self.ref.loc15_20: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1] -// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type.1] +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref.loc15_20: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type] // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref.loc15_20 [symbolic = constants.%.Self.as_type.2] // CHECK:STDOUT: %.loc15_20: type = converted %.Self.ref.loc15_20, %.Self.as_type [symbolic = constants.%.Self.as_type.2] -// CHECK:STDOUT: %.Self.ref.loc15_38: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref.loc15_38: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1] // CHECK:STDOUT: %Member.ref: %assoc_type.1 = name_ref Member, @I.%assoc0 [template = constants.%assoc0] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref.loc15_38 [symbolic = constants.%.Self.as_wit] // CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] // CHECK:STDOUT: %.loc15_50: %empty_tuple.type = tuple_literal () -// CHECK:STDOUT: %.loc15_14: type = where_expr %.Self [template = constants.%I.type.3] { +// CHECK:STDOUT: %.loc15_14: type = where_expr %.Self [template = constants.%I_where.type] { // CHECK:STDOUT: requirement_impls %.loc15_20, %J.ref // CHECK:STDOUT: requirement_equivalent %impl.elem0, %.loc15_50 // CHECK:STDOUT: } -// CHECK:STDOUT: %W.param: %I.type.3 = value_param runtime_param -// CHECK:STDOUT: %W.loc15_8.1: %I.type.3 = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc15_8.2 (constants.%W)] +// CHECK:STDOUT: %W.param: %I_where.type = value_param runtime_param +// CHECK:STDOUT: %W.loc15_8.1: %I_where.type = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc15_8.2 (constants.%W)] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { -// CHECK:STDOUT: %Self: %J.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1] +// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self @@ -276,11 +232,11 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self.2] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.2] // CHECK:STDOUT: %Member: type = assoc_const_decl Member [template] // CHECK:STDOUT: %assoc0: %assoc_type.1 = assoc_entity element0, %Member [template = constants.%assoc0] -// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type.1] -// CHECK:STDOUT: %Second: %J.type.1 = assoc_const_decl Second [template] +// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type] +// CHECK:STDOUT: %Second: %J.type = assoc_const_decl Second [template] // CHECK:STDOUT: %assoc1: %assoc_type.2 = assoc_entity element1, %Second [template = constants.%assoc1] // CHECK:STDOUT: // CHECK:STDOUT: !members: @@ -290,25 +246,25 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: witness = (%Member, %Second) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @EqualEqual(%U.loc11_15.1: %I.type.2) { -// CHECK:STDOUT: %U.loc11_15.2: %I.type.2 = bind_symbolic_name U, 0 [symbolic = %U.loc11_15.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc11_15.2: %I.type.2 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] +// CHECK:STDOUT: generic fn @EqualEqual(%U.loc11_15.1: %I_where.type) { +// CHECK:STDOUT: %U.loc11_15.2: %I_where.type = bind_symbolic_name U, 0 [symbolic = %U.loc11_15.2 (constants.%U)] +// CHECK:STDOUT: %U.patt.loc11_15.2: %I_where.type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc11_15.2 (constants.%U.patt)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%U.param_patt: %I.type.2); +// CHECK:STDOUT: fn(%U.param_patt: %I_where.type); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Impls(%V.loc13_10.1: %J.type.2) { -// CHECK:STDOUT: %V.loc13_10.2: %J.type.2 = bind_symbolic_name V, 0 [symbolic = %V.loc13_10.2 (constants.%V)] -// CHECK:STDOUT: %V.patt.loc13_10.2: %J.type.2 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc13_10.2 (constants.%V.patt)] +// 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: -// CHECK:STDOUT: fn(%V.param_patt: %J.type.2); +// CHECK:STDOUT: fn(%V.param_patt: %J_where.type); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @And(%W.loc15_8.1: %I.type.3) { -// CHECK:STDOUT: %W.loc15_8.2: %I.type.3 = bind_symbolic_name W, 0 [symbolic = %W.loc15_8.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc15_8.2: %I.type.3 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] +// CHECK:STDOUT: generic fn @And(%W.loc15_8.1: %I_where.type) { +// CHECK:STDOUT: %W.loc15_8.2: %I_where.type = bind_symbolic_name W, 0 [symbolic = %W.loc15_8.2 (constants.%W)] +// CHECK:STDOUT: %W.patt.loc15_8.2: %I_where.type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc15_8.2 (constants.%W.patt)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%W.param_patt: %I.type.3); +// CHECK:STDOUT: fn(%W.param_patt: %I_where.type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @EqualEqual(constants.%U) { @@ -326,82 +282,6 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: %W.patt.loc15_8.2 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- equal_constraint.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %N.type.1: type = facet_type <@N> [template] -// CHECK:STDOUT: %Self: %N.type.1 = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %N.type.1, type [template] -// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @N.%P [template] -// CHECK:STDOUT: %.Self: %N.type.1 = bind_symbolic_name .Self, 0 [symbolic] -// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] -// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] -// CHECK:STDOUT: %N.type.2: type = facet_type <@N where TODO> [template] -// CHECK:STDOUT: %T: %N.type.2 = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %N.type.2 = symbolic_binding_pattern T, 0 [symbolic] -// CHECK:STDOUT: %Equal.type: type = fn_type @Equal [template] -// CHECK:STDOUT: %Equal: %Equal.type = struct_value () [template] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [template] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .N = %N.decl -// CHECK:STDOUT: .Equal = %Equal.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %N.decl: type = interface_decl @N [template = constants.%N.type.1] {} {} -// CHECK:STDOUT: %Equal.decl: %Equal.type = fn_decl @Equal [template = constants.%Equal] { -// CHECK:STDOUT: %T.patt.loc8_10.1: %N.type.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] -// CHECK:STDOUT: %T.param_patt: %N.type.2 = value_param_pattern %T.patt.loc8_10.1, runtime_param [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %N.ref: type = name_ref N, file.%N.decl [template = constants.%N.type.1] -// CHECK:STDOUT: %.Self: %N.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: %N.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self] -// CHECK:STDOUT: %P.ref: %assoc_type = name_ref P, @N.%assoc0 [template = constants.%assoc0] -// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] -// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] -// CHECK:STDOUT: %.loc8_28.1: %empty_struct_type = struct_literal () -// CHECK:STDOUT: %.loc8_28.2: type = converted %.loc8_28.1, constants.%empty_struct_type [template = constants.%empty_struct_type] -// CHECK:STDOUT: %.loc8_16: type = where_expr %.Self [template = constants.%N.type.2] { -// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc8_28.2 -// CHECK:STDOUT: } -// CHECK:STDOUT: %T.param: %N.type.2 = value_param runtime_param -// CHECK:STDOUT: %T.loc8_10.1: %N.type.2 = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_10.2 (constants.%T)] -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: interface @N { -// CHECK:STDOUT: %Self: %N.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self] -// CHECK:STDOUT: %P: type = assoc_const_decl P [template] -// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %P [template = constants.%assoc0] -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = %Self -// CHECK:STDOUT: .P = %assoc0 -// CHECK:STDOUT: witness = (%P) -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Equal(%T.loc8_10.1: %N.type.2) { -// CHECK:STDOUT: %T.loc8_10.2: %N.type.2 = bind_symbolic_name T, 0 [symbolic = %T.loc8_10.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_10.2: %N.type.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%T.param_patt: %N.type.2); -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @Equal(constants.%T) { -// CHECK:STDOUT: %T.loc8_10.2 => constants.%T -// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- associated_type_impls.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -409,17 +289,17 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: %Self.1: %L.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %M.type: type = facet_type <@M> [template] // CHECK:STDOUT: %Self.2: %M.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %K.type.1: type = facet_type <@K> [template] -// CHECK:STDOUT: %Self.3: %K.type.1 = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %K.type.1, %L.type [template] +// CHECK:STDOUT: %K.type: type = facet_type <@K> [template] +// CHECK:STDOUT: %Self.3: %K.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %K.type, %L.type [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @K.%Associated [template] -// CHECK:STDOUT: %.Self: %K.type.1 = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: %K.type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] // CHECK:STDOUT: %impl.elem0: %L.type = interface_witness_access %.Self.as_wit, element0 [symbolic] // CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0 [symbolic] -// CHECK:STDOUT: %K.type.2: type = facet_type <@K where TODO> [template] -// CHECK:STDOUT: %W: %K.type.2 = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: %K.type.2 = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %K_where.type: type = facet_type <@K where TODO> [template] +// 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: %AssociatedTypeImpls.type: type = fn_type @AssociatedTypeImpls [template] // CHECK:STDOUT: %AssociatedTypeImpls: %AssociatedTypeImpls.type = struct_value () [template] // CHECK:STDOUT: } @@ -442,25 +322,25 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %L.decl: type = interface_decl @L [template = constants.%L.type] {} {} // CHECK:STDOUT: %M.decl: type = interface_decl @M [template = constants.%M.type] {} {} -// CHECK:STDOUT: %K.decl: type = interface_decl @K [template = constants.%K.type.1] {} {} +// CHECK:STDOUT: %K.decl: type = interface_decl @K [template = constants.%K.type] {} {} // CHECK:STDOUT: %AssociatedTypeImpls.decl: %AssociatedTypeImpls.type = fn_decl @AssociatedTypeImpls [template = constants.%AssociatedTypeImpls] { -// CHECK:STDOUT: %W.patt.loc11_24.1: %K.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)] -// CHECK:STDOUT: %W.param_patt: %K.type.2 = value_param_pattern %W.patt.loc11_24.1, runtime_param [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)] +// 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.param_patt: %K_where.type = value_param_pattern %W.patt.loc11_24.1, runtime_param [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %K.ref: type = name_ref K, file.%K.decl [template = constants.%K.type.1] -// CHECK:STDOUT: %.Self: %K.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: %K.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %K.ref: type = name_ref K, file.%K.decl [template = constants.%K.type] +// CHECK:STDOUT: %.Self: %K.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %K.type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %Associated.ref: %assoc_type = name_ref Associated, @K.%assoc0 [template = constants.%assoc0] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] // CHECK:STDOUT: %impl.elem0: %L.type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] // CHECK:STDOUT: %M.ref: type = name_ref M, file.%M.decl [template = constants.%M.type] // CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0 [symbolic = constants.%as_type] // CHECK:STDOUT: %.loc11_36: type = converted %impl.elem0, %as_type [symbolic = constants.%as_type] -// CHECK:STDOUT: %.loc11_30: type = where_expr %.Self [template = constants.%K.type.2] { +// CHECK:STDOUT: %.loc11_30: type = where_expr %.Self [template = constants.%K_where.type] { // CHECK:STDOUT: requirement_impls %.loc11_36, %M.ref // CHECK:STDOUT: } -// CHECK:STDOUT: %W.param: %K.type.2 = value_param runtime_param -// CHECK:STDOUT: %W.loc11_24.1: %K.type.2 = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc11_24.2 (constants.%W)] +// CHECK:STDOUT: %W.param: %K_where.type = value_param runtime_param +// CHECK:STDOUT: %W.loc11_24.1: %K_where.type = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc11_24.2 (constants.%W)] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -481,7 +361,7 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @K { -// CHECK:STDOUT: %Self: %K.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self.3] +// CHECK:STDOUT: %Self: %K.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.3] // CHECK:STDOUT: %L.ref: type = name_ref L, file.%L.decl [template = constants.%L.type] // CHECK:STDOUT: %Associated: %L.type = assoc_const_decl Associated [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %Associated [template = constants.%assoc0] @@ -492,11 +372,11 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: witness = (%Associated) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @AssociatedTypeImpls(%W.loc11_24.1: %K.type.2) { -// CHECK:STDOUT: %W.loc11_24.2: %K.type.2 = bind_symbolic_name W, 0 [symbolic = %W.loc11_24.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc11_24.2: %K.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_24.2 (constants.%W.patt)] +// 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: -// CHECK:STDOUT: fn(%W.param_patt: %K.type.2); +// CHECK:STDOUT: fn(%W.param_patt: %K_where.type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @AssociatedTypeImpls(constants.%W) { @@ -504,97 +384,10 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: %W.patt.loc11_24.2 => constants.%W // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- fail_check_rewrite_constraints.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic] -// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type.1, type [template] -// CHECK:STDOUT: %assoc0.1: %assoc_type = assoc_entity element0, imports.%import_ref.11 [template] -// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] -// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] -// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [template] -// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template] -// CHECK:STDOUT: %X: %I.type.2 = bind_symbolic_name X, 0 [symbolic] -// CHECK:STDOUT: %X.patt: %I.type.2 = symbolic_binding_pattern X, 0 [symbolic] -// CHECK:STDOUT: %RewriteTypeMismatch.type: type = fn_type @RewriteTypeMismatch [template] -// CHECK:STDOUT: %RewriteTypeMismatch: %RewriteTypeMismatch.type = struct_value () [template] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %import_ref.1 = import_ref Main//state_constraints, inst+3, unloaded -// CHECK:STDOUT: %import_ref.2: type = import_ref Main//state_constraints, inst+7, loaded [template = constants.%I.type.1] -// CHECK:STDOUT: %import_ref.3 = import_ref Main//state_constraints, inst+35, unloaded -// CHECK:STDOUT: %import_ref.4 = import_ref Main//state_constraints, inst+57, unloaded -// CHECK:STDOUT: %import_ref.5 = import_ref Main//state_constraints, inst+86, unloaded -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { -// CHECK:STDOUT: .ImplicitAs = %import_ref.12 -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: %import_ref.6 = import_ref Main//state_constraints, inst+9, unloaded -// CHECK:STDOUT: %import_ref.7: %assoc_type = import_ref Main//state_constraints, inst+13, loaded [template = constants.%assoc0.1] -// CHECK:STDOUT: %import_ref.8 = import_ref Main//state_constraints, inst+19, unloaded -// CHECK:STDOUT: %import_ref.9 = import_ref Main//state_constraints, inst+11, unloaded -// CHECK:STDOUT: %import_ref.10 = import_ref Main//state_constraints, inst+17, unloaded -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [template] { -// CHECK:STDOUT: .J = imports.%import_ref.1 -// CHECK:STDOUT: .I = imports.%import_ref.2 -// CHECK:STDOUT: .EqualEqual = imports.%import_ref.3 -// CHECK:STDOUT: .Impls = imports.%import_ref.4 -// CHECK:STDOUT: .And = imports.%import_ref.5 -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .RewriteTypeMismatch = %RewriteTypeMismatch.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %default.import = import -// CHECK:STDOUT: %RewriteTypeMismatch.decl: %RewriteTypeMismatch.type = fn_decl @RewriteTypeMismatch [template = constants.%RewriteTypeMismatch] { -// CHECK:STDOUT: %X.patt.loc14_24.1: %I.type.2 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc14_24.2 (constants.%X.patt)] -// CHECK:STDOUT: %X.param_patt: %I.type.2 = value_param_pattern %X.patt.loc14_24.1, runtime_param [symbolic = %X.patt.loc14_24.2 (constants.%X.patt)] -// CHECK:STDOUT: } { -// CHECK:STDOUT: %I.ref: type = name_ref I, imports.%import_ref.2 [template = constants.%I.type.1] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self] -// CHECK:STDOUT: %Member.ref: %assoc_type = name_ref Member, imports.%import_ref.7 [template = constants.%assoc0.1] -// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] -// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] -// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [template = constants.%int_2] -// CHECK:STDOUT: %.loc14_46: type = converted %int_2, [template = ] -// CHECK:STDOUT: %.loc14_30: type = where_expr %.Self [template = constants.%I.type.2] { -// CHECK:STDOUT: requirement_rewrite %impl.elem0, -// CHECK:STDOUT: } -// CHECK:STDOUT: %X.param: %I.type.2 = value_param runtime_param -// CHECK:STDOUT: %X.loc14_24.1: %I.type.2 = bind_symbolic_name X, 0, %X.param [symbolic = %X.loc14_24.2 (constants.%X)] -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: interface @I { -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = imports.%import_ref.6 -// CHECK:STDOUT: .Member = imports.%import_ref.7 -// CHECK:STDOUT: .Second = imports.%import_ref.8 -// CHECK:STDOUT: witness = (imports.%import_ref.9, imports.%import_ref.10) -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: generic fn @RewriteTypeMismatch(%X.loc14_24.1: %I.type.2) { -// CHECK:STDOUT: %X.loc14_24.2: %I.type.2 = bind_symbolic_name X, 0 [symbolic = %X.loc14_24.2 (constants.%X)] -// CHECK:STDOUT: %X.patt.loc14_24.2: %I.type.2 = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc14_24.2 (constants.%X.patt)] -// CHECK:STDOUT: -// CHECK:STDOUT: fn(%X.param_patt: %I.type.2); -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: specific @RewriteTypeMismatch(constants.%X) { -// CHECK:STDOUT: %X.loc14_24.2 => constants.%X -// CHECK:STDOUT: %X.patt.loc14_24.2 => constants.%X -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_left_of_impls_non_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [template] // CHECK:STDOUT: %type_where: type = facet_type [template] // CHECK:STDOUT: %U: %type_where = bind_symbolic_name U, 0 [symbolic] @@ -621,7 +414,7 @@ let B: type where .Self impls A = D; // 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.param_patt: %type_where = value_param_pattern %U.patt.loc11_17.1, runtime_param [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self] // CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [template = constants.%int_7] // CHECK:STDOUT: %.loc11_32: type = converted %int_7, [template = ] // CHECK:STDOUT: %.loc11_26: type = where_expr %.Self [template = constants.%type_where] { @@ -647,7 +440,7 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: --- fail_right_of_impls_non_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [template] // CHECK:STDOUT: %type_where: type = facet_type [template] // CHECK:STDOUT: %U: %type_where = bind_symbolic_name U, 0 [symbolic] @@ -674,7 +467,7 @@ let B: type where .Self impls A = D; // 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.param_patt: %type_where = value_param_pattern %U.patt.loc11_17.1, runtime_param [symbolic = %U.patt.loc11_17.2 (constants.%U.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self] // CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %int_7: Core.IntLiteral = int_value 7 [template = constants.%int_7] // CHECK:STDOUT: %.loc11_44: type = converted %int_7, [template = ] @@ -701,7 +494,7 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: --- fail_right_of_impls_non_facet_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template] // CHECK:STDOUT: %Int.type: type = fn_type @Int [template] // CHECK:STDOUT: %Int: %Int.type = struct_value () [template] @@ -731,7 +524,7 @@ let B: type where .Self impls A = D; // 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.param_patt: %type_where = value_param_pattern %U.patt.loc8_24.1, runtime_param [symbolic = %U.patt.loc8_24.2 (constants.%U.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self] // CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32] // CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32] @@ -763,18 +556,18 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: %C: type = class_type @C [template] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template] -// CHECK:STDOUT: %J.type.1: type = facet_type <@J> [template] +// CHECK:STDOUT: %J.type: type = facet_type <@J> [template] // CHECK:STDOUT: %interface.1: = interface_witness () [template] // CHECK:STDOUT: %DoesNotImplI.type: type = fn_type @DoesNotImplI [template] // CHECK:STDOUT: %DoesNotImplI: %DoesNotImplI.type = struct_value () [template] // CHECK:STDOUT: %Impls.type: type = fn_type @Impls [template] // CHECK:STDOUT: %Impls: %Impls.type = struct_value () [template] -// CHECK:STDOUT: %V: %J.type.1 = bind_symbolic_name V, 0 [symbolic] -// CHECK:STDOUT: %V.patt: %J.type.1 = symbolic_binding_pattern V, 0 [symbolic] -// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic] -// CHECK:STDOUT: %J.type.2: type = facet_type <@J where TODO> [template] -// CHECK:STDOUT: %Y: %J.type.2 = bind_symbolic_name Y, 0 [symbolic] -// CHECK:STDOUT: %Y.patt: %J.type.2 = symbolic_binding_pattern Y, 0 [symbolic] +// CHECK:STDOUT: %J_where.type: type = facet_type <@J where TODO> [template] +// 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: %.Self: %J.type = bind_symbolic_name .Self [symbolic] +// 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: %EmptyStruct.type: type = fn_type @EmptyStruct [template] // CHECK:STDOUT: %EmptyStruct: %EmptyStruct.type = struct_value () [template] // CHECK:STDOUT: %NotEmptyStruct.type: type = fn_type @NotEmptyStruct [template] @@ -782,11 +575,11 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %import_ref.1: type = import_ref Main//state_constraints, inst+3, loaded [template = constants.%J.type.1] +// CHECK:STDOUT: %import_ref.1: type = import_ref Main//state_constraints, inst+3, loaded [template = constants.%J.type] // CHECK:STDOUT: %import_ref.2 = import_ref Main//state_constraints, inst+7, unloaded // CHECK:STDOUT: %import_ref.3 = import_ref Main//state_constraints, inst+35, unloaded // CHECK:STDOUT: %import_ref.4: %Impls.type = import_ref Main//state_constraints, inst+57, loaded [template = constants.%Impls] -// CHECK:STDOUT: %import_ref.5 = import_ref Main//state_constraints, inst+86, unloaded +// CHECK:STDOUT: %import_ref.5 = import_ref Main//state_constraints, inst+85, unloaded // CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { // CHECK:STDOUT: .ImplicitAs = %import_ref.7 // CHECK:STDOUT: import Core//prelude @@ -813,22 +606,22 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {} {} // CHECK:STDOUT: impl_decl @impl.1 [template] {} { // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C] -// CHECK:STDOUT: %J.ref: type = name_ref J, imports.%import_ref.1 [template = constants.%J.type.1] +// CHECK:STDOUT: %J.ref: type = name_ref J, imports.%import_ref.1 [template = constants.%J.type] // CHECK:STDOUT: } // CHECK:STDOUT: %DoesNotImplI.decl: %DoesNotImplI.type = fn_decl @DoesNotImplI [template = constants.%DoesNotImplI] {} {} // CHECK:STDOUT: %EmptyStruct.decl: %EmptyStruct.type = fn_decl @EmptyStruct [template = constants.%EmptyStruct] { -// CHECK:STDOUT: %Y.patt.loc26_16.1: %J.type.2 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)] -// CHECK:STDOUT: %Y.param_patt: %J.type.2 = value_param_pattern %Y.patt.loc26_16.1, runtime_param [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)] +// CHECK:STDOUT: %Y.patt.loc26_16.1: %J_where.type = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)] +// CHECK:STDOUT: %Y.param_patt: %J_where.type = value_param_pattern %Y.patt.loc26_16.1, runtime_param [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %J.ref: type = name_ref J, imports.%import_ref.1 [template = constants.%J.type.1] -// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: %J.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %J.ref: type = name_ref J, imports.%import_ref.1 [template = constants.%J.type] +// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %.loc26_38: %empty_struct_type = struct_literal () -// CHECK:STDOUT: %.loc26_22: type = where_expr %.Self [template = constants.%J.type.2] { +// CHECK:STDOUT: %.loc26_22: type = where_expr %.Self [template = constants.%J_where.type] { // CHECK:STDOUT: requirement_equivalent %.Self.ref, %.loc26_38 // CHECK:STDOUT: } -// CHECK:STDOUT: %Y.param: %J.type.2 = value_param runtime_param -// CHECK:STDOUT: %Y.loc26_16.1: %J.type.2 = bind_symbolic_name Y, 0, %Y.param [symbolic = %Y.loc26_16.2 (constants.%Y)] +// CHECK:STDOUT: %Y.param: %J_where.type = value_param runtime_param +// CHECK:STDOUT: %Y.loc26_16.1: %J_where.type = bind_symbolic_name Y, 0, %Y.param [symbolic = %Y.loc26_16.2 (constants.%Y)] // CHECK:STDOUT: } // CHECK:STDOUT: %NotEmptyStruct.decl: %NotEmptyStruct.type = fn_decl @NotEmptyStruct [template = constants.%NotEmptyStruct] {} {} // CHECK:STDOUT: } @@ -858,29 +651,29 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Impls.ref: %Impls.type = name_ref Impls, imports.%import_ref.4 [template = constants.%Impls] // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C] -// CHECK:STDOUT: %.loc23: %J.type.1 = converted %C.ref, [template = ] +// CHECK:STDOUT: %.loc23: %J_where.type = converted %C.ref, [template = ] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @Impls(constants.%V: %J.type.1) { -// CHECK:STDOUT: %V: %J.type.1 = bind_symbolic_name V, 0 [symbolic = %V (constants.%V)] -// CHECK:STDOUT: %V.patt: %J.type.1 = symbolic_binding_pattern V, 0 [symbolic = %V.patt (constants.%V.patt)] +// CHECK:STDOUT: generic fn @Impls(constants.%V: %J_where.type) { +// 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: -// CHECK:STDOUT: fn(%V.param_patt: %J.type.1); +// CHECK:STDOUT: fn(%V.param_patt: %J_where.type); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @EmptyStruct(%Y.loc26_16.1: %J.type.2) { -// CHECK:STDOUT: %Y.loc26_16.2: %J.type.2 = bind_symbolic_name Y, 0 [symbolic = %Y.loc26_16.2 (constants.%Y)] -// CHECK:STDOUT: %Y.patt.loc26_16.2: %J.type.2 = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)] +// CHECK:STDOUT: generic fn @EmptyStruct(%Y.loc26_16.1: %J_where.type) { +// CHECK:STDOUT: %Y.loc26_16.2: %J_where.type = bind_symbolic_name Y, 0 [symbolic = %Y.loc26_16.2 (constants.%Y)] +// CHECK:STDOUT: %Y.patt.loc26_16.2: %J_where.type = symbolic_binding_pattern Y, 0 [symbolic = %Y.patt.loc26_16.2 (constants.%Y.patt)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%Y.param_patt: %J.type.2); +// CHECK:STDOUT: fn(%Y.param_patt: %J_where.type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @NotEmptyStruct() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %EmptyStruct.ref: %EmptyStruct.type = name_ref EmptyStruct, file.%EmptyStruct.decl [template = constants.%EmptyStruct] // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C] -// CHECK:STDOUT: %.loc40: %J.type.2 = converted %C.ref, [template = ] +// CHECK:STDOUT: %.loc39: %J_where.type = converted %C.ref, [template = ] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -894,77 +687,3 @@ let B: type where .Self impls A = D; // CHECK:STDOUT: %Y.patt.loc26_16.2 => constants.%Y // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- fail_todo_let.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %A.type: type = facet_type <@A> [template] -// CHECK:STDOUT: %Self.1: %A.type = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %D: type = class_type @D [template] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template] -// CHECK:STDOUT: %interface.1: = interface_witness () [template] -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic] -// CHECK:STDOUT: %type_where: type = facet_type [template] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { -// CHECK:STDOUT: .ImplicitAs = %import_ref.1 -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [template] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .A = %A.decl -// CHECK:STDOUT: .D = %D.decl -// CHECK:STDOUT: .B = @__global_init.%B -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %A.decl: type = interface_decl @A [template = constants.%A.type] {} {} -// CHECK:STDOUT: %D.decl: type = class_decl @D [template = constants.%D] {} {} -// CHECK:STDOUT: impl_decl @impl.1 [template] {} { -// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [template = constants.%D] -// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [template = constants.%A.type] -// CHECK:STDOUT: } -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self] -// CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [template = constants.%A.type] -// CHECK:STDOUT: %.loc14: type = where_expr %.Self [template = constants.%type_where] { -// CHECK:STDOUT: requirement_impls %.Self.ref, %A.ref -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: interface @A { -// CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1] -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = %Self -// CHECK:STDOUT: witness = () -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: impl @impl.1: %D.ref as %A.ref { -// CHECK:STDOUT: %interface: = interface_witness () [template = constants.%interface.1] -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: witness = %interface -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @D { -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template = constants.%complete_type] -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%D -// CHECK:STDOUT: complete_type_witness = %complete_type -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @__global_init() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [template = constants.%D] -// CHECK:STDOUT: %.loc14: %type_where = converted %D.ref, [template = ] -// CHECK:STDOUT: %B: %type_where = bind_name B, -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/where_expr/designator.carbon b/toolchain/check/testdata/where_expr/designator.carbon index 33a9775b7d5af..9f1a2c028a2fd 100644 --- a/toolchain/check/testdata/where_expr/designator.carbon +++ b/toolchain/check/testdata/where_expr/designator.carbon @@ -89,25 +89,24 @@ class D { // CHECK:STDOUT: --- success.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template] -// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type.1, type [template] +// CHECK:STDOUT: %I.type: type = facet_type <@I> [template] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type, type [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @I.%Member [template] -// CHECK:STDOUT: %.Self.1: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self.1: %I.type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] -// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template] -// CHECK:STDOUT: %T: %I.type.2 = bind_symbolic_name T, 0 [symbolic] -// CHECK:STDOUT: %T.patt: %I.type.2 = symbolic_binding_pattern T, 0 [symbolic] +// CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [template] +// 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: %PeriodSelf.type: type = fn_type @PeriodSelf [template] // CHECK:STDOUT: %PeriodSelf: %PeriodSelf.type = struct_value () [template] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.1 [symbolic] // CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] -// CHECK:STDOUT: %I.type.3: type = facet_type <@I where TODO> [template] -// CHECK:STDOUT: %U: %I.type.3 = bind_symbolic_name U, 0 [symbolic] -// CHECK:STDOUT: %U.patt: %I.type.3 = symbolic_binding_pattern U, 0 [symbolic] +// 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: %PeriodMember.type: type = fn_type @PeriodMember [template] // CHECK:STDOUT: %PeriodMember: %PeriodMember.type = struct_value () [template] -// CHECK:STDOUT: %.Self.2: type = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self.2: type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %type_where: type = facet_type [template] // CHECK:STDOUT: %V: %type_where = bind_symbolic_name V, 0 [symbolic] // CHECK:STDOUT: %V.patt: %type_where = symbolic_binding_pattern V, 0 [symbolic] @@ -131,45 +130,45 @@ class D { // CHECK:STDOUT: .TypeSelfImpls = %TypeSelfImpls.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type.1] {} {} +// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {} // CHECK:STDOUT: %PeriodSelf.decl: %PeriodSelf.type = fn_decl @PeriodSelf [template = constants.%PeriodSelf] { -// CHECK:STDOUT: %T.patt.loc8_15.1: %I.type.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] -// CHECK:STDOUT: %T.param_patt: %I.type.2 = value_param_pattern %T.patt.loc8_15.1, runtime_param [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// 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.param_patt: %I_where.type = value_param_pattern %T.patt.loc8_15.1, runtime_param [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.1] -// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1] // CHECK:STDOUT: %.loc8_37: %empty_tuple.type = tuple_literal () -// CHECK:STDOUT: %.loc8_21: type = where_expr %.Self [template = constants.%I.type.2] { +// CHECK:STDOUT: %.loc8_21: type = where_expr %.Self [template = constants.%I_where.type] { // CHECK:STDOUT: requirement_equivalent %.Self.ref, %.loc8_37 // CHECK:STDOUT: } -// CHECK:STDOUT: %T.param: %I.type.2 = value_param runtime_param -// CHECK:STDOUT: %T.loc8_15.1: %I.type.2 = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_15.2 (constants.%T)] +// CHECK:STDOUT: %T.param: %I_where.type = value_param runtime_param +// CHECK:STDOUT: %T.loc8_15.1: %I_where.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: } // CHECK:STDOUT: %PeriodMember.decl: %PeriodMember.type = fn_decl @PeriodMember [template = constants.%PeriodMember] { -// CHECK:STDOUT: %U.patt.loc10_17.1: %I.type.3 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)] -// CHECK:STDOUT: %U.param_patt: %I.type.3 = value_param_pattern %U.patt.loc10_17.1, runtime_param [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)] +// 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.param_patt: %I_where.type = value_param_pattern %U.patt.loc10_17.1, runtime_param [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.1] -// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self.1] // CHECK:STDOUT: %Member.ref: %assoc_type = name_ref Member, @I.%assoc0 [template = constants.%assoc0] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] // CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] // CHECK:STDOUT: %.loc10_41: %empty_tuple.type = tuple_literal () -// CHECK:STDOUT: %.loc10_23: type = where_expr %.Self [template = constants.%I.type.3] { +// CHECK:STDOUT: %.loc10_23: type = where_expr %.Self [template = constants.%I_where.type] { // CHECK:STDOUT: requirement_equivalent %impl.elem0, %.loc10_41 // CHECK:STDOUT: } -// CHECK:STDOUT: %U.param: %I.type.3 = value_param runtime_param -// CHECK:STDOUT: %U.loc10_17.1: %I.type.3 = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc10_17.2 (constants.%U)] +// CHECK:STDOUT: %U.param: %I_where.type = value_param runtime_param +// CHECK:STDOUT: %U.loc10_17.1: %I_where.type = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc10_17.2 (constants.%U)] // CHECK:STDOUT: } // CHECK:STDOUT: %TypeSelfImpls.decl: %TypeSelfImpls.type = fn_decl @TypeSelfImpls [template = 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.param_patt: %type_where = value_param_pattern %V.patt.loc12_18.1, runtime_param [symbolic = %V.patt.loc12_18.2 (constants.%V.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self.2] // CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self.2] -// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1] +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] // CHECK:STDOUT: %.loc12: type = where_expr %.Self [template = constants.%type_where] { // CHECK:STDOUT: requirement_impls %.Self.ref, %I.ref // CHECK:STDOUT: } @@ -179,7 +178,7 @@ class D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Member: type = assoc_const_decl Member [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %Member [template = constants.%assoc0] // CHECK:STDOUT: @@ -189,18 +188,18 @@ class D { // CHECK:STDOUT: witness = (%Member) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @PeriodSelf(%T.loc8_15.1: %I.type.2) { -// CHECK:STDOUT: %T.loc8_15.2: %I.type.2 = bind_symbolic_name T, 0 [symbolic = %T.loc8_15.2 (constants.%T)] -// CHECK:STDOUT: %T.patt.loc8_15.2: %I.type.2 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_15.2 (constants.%T.patt)] +// 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: -// CHECK:STDOUT: fn(%T.param_patt: %I.type.2); +// CHECK:STDOUT: fn(%T.param_patt: %I_where.type); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @PeriodMember(%U.loc10_17.1: %I.type.3) { -// CHECK:STDOUT: %U.loc10_17.2: %I.type.3 = bind_symbolic_name U, 0 [symbolic = %U.loc10_17.2 (constants.%U)] -// CHECK:STDOUT: %U.patt.loc10_17.2: %I.type.3 = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc10_17.2 (constants.%U.patt)] +// 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: -// CHECK:STDOUT: fn(%U.param_patt: %I.type.3); +// CHECK:STDOUT: fn(%U.param_patt: %I_where.type); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TypeSelfImpls(%V.loc12_18.1: %type_where) { @@ -228,15 +227,13 @@ class D { // CHECK:STDOUT: --- fail_wrong_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %J.type.1: type = facet_type <@J> [template] -// CHECK:STDOUT: %Self: %J.type.1 = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %J.type.1, type [template] +// CHECK:STDOUT: %J.type: type = facet_type <@J> [template] +// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %J.type, type [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @J.%Member [template] -// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] -// CHECK:STDOUT: %J.type.2: type = facet_type <@J where TODO> [template] -// CHECK:STDOUT: %W: %J.type.2 = bind_symbolic_name W, 0 [symbolic] -// CHECK:STDOUT: %W.patt: %J.type.2 = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %W.patt: = symbolic_binding_pattern W, 0 [symbolic] // CHECK:STDOUT: %PeriodMismatch.type: type = fn_type @PeriodMismatch [template] // CHECK:STDOUT: %PeriodMismatch: %PeriodMismatch.type = struct_value () [template] // CHECK:STDOUT: } @@ -255,26 +252,26 @@ class D { // CHECK:STDOUT: .PeriodMismatch = %PeriodMismatch.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type.1] {} {} +// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type] {} {} // CHECK:STDOUT: %PeriodMismatch.decl: %PeriodMismatch.type = fn_decl @PeriodMismatch [template = constants.%PeriodMismatch] { -// CHECK:STDOUT: %W.patt.loc12_19.1: %J.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)] -// CHECK:STDOUT: %W.param_patt: %J.type.2 = value_param_pattern %W.patt.loc12_19.1, runtime_param [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.patt.loc12_19.1: = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.param_patt: = value_param_pattern %W.patt.loc12_19.1, runtime_param [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type.1] -// CHECK:STDOUT: %.Self: %J.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: %J.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type] +// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %Mismatch.ref: = name_ref Mismatch, [template = ] // CHECK:STDOUT: %.loc12_44: %empty_struct_type = struct_literal () -// CHECK:STDOUT: %.loc12_25: type = where_expr %.Self [template = constants.%J.type.2] { +// CHECK:STDOUT: %.loc12_25: type = where_expr %.Self [template = ] { // CHECK:STDOUT: requirement_rewrite %Mismatch.ref, // CHECK:STDOUT: } -// CHECK:STDOUT: %W.param: %J.type.2 = value_param runtime_param -// CHECK:STDOUT: %W.loc12_19.1: %J.type.2 = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc12_19.2 (constants.%W)] +// CHECK:STDOUT: %W.param: = value_param runtime_param +// CHECK:STDOUT: %W: = bind_symbolic_name W, 0, %W.param [template = ] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { -// CHECK:STDOUT: %Self: %J.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %Member: type = assoc_const_decl Member [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %Member [template = constants.%assoc0] // CHECK:STDOUT: @@ -284,16 +281,14 @@ class D { // CHECK:STDOUT: witness = (%Member) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @PeriodMismatch(%W.loc12_19.1: %J.type.2) { -// CHECK:STDOUT: %W.loc12_19.2: %J.type.2 = bind_symbolic_name W, 0 [symbolic = %W.loc12_19.2 (constants.%W)] -// CHECK:STDOUT: %W.patt.loc12_19.2: %J.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)] +// CHECK:STDOUT: generic fn @PeriodMismatch(%W: ) { +// CHECK:STDOUT: %W.patt.loc12_19.2: = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc12_19.2 (constants.%W.patt)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%W.param_patt: %J.type.2); +// CHECK:STDOUT: fn(%W.param_patt: ); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @PeriodMismatch(constants.%W) { -// CHECK:STDOUT: %W.loc12_19.2 => constants.%W -// CHECK:STDOUT: %W.patt.loc12_19.2 => constants.%W +// CHECK:STDOUT: specific @PeriodMismatch() { +// CHECK:STDOUT: %W.patt.loc12_19.2 => // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_designator_matches_var.carbon diff --git a/toolchain/check/testdata/where_expr/dot_self_index.carbon b/toolchain/check/testdata/where_expr/dot_self_index.carbon new file mode 100644 index 0000000000000..a15d8d1d54310 --- /dev/null +++ b/toolchain/check/testdata/where_expr/dot_self_index.carbon @@ -0,0 +1,279 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/where_expr/dot_self_index.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/where_expr/dot_self_index.carbon + +interface Empty(W:! type) { + let A:! type; +} + +// T has index 0 +// .Self has index invalid, not 1 +// V has index 1, does not match .Self +fn H(T:! type, U: Empty(T) where .A = T*, V:! type) {} + +fn G(U: Empty(i32) where .A = i32*) { + H(i32, U, bool); +} + +// CHECK:STDOUT: --- dot_self_index.carbon +// 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: %Empty.type.1: type = generic_interface_type @Empty [template] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] +// CHECK:STDOUT: %Empty.generic: %Empty.type.1 = struct_value () [template] +// CHECK:STDOUT: %Empty.type.2: type = facet_type <@Empty, @Empty(%W)> [symbolic] +// CHECK:STDOUT: %Self: %Empty.type.2 = bind_symbolic_name Self, 1 [symbolic] +// CHECK:STDOUT: %assoc_type.1: type = assoc_entity_type %Empty.type.2, type [symbolic] +// CHECK:STDOUT: %assoc0.1: %assoc_type.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: %Empty.type.3: type = facet_type <@Empty, @Empty(%T)> [symbolic] +// CHECK:STDOUT: %.Self.1: %Empty.type.3 = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %assoc_type.2: type = assoc_entity_type %Empty.type.3, type [symbolic] +// CHECK:STDOUT: %assoc0.2: %assoc_type.2 = assoc_entity element0, @Empty.%A [symbolic] +// CHECK:STDOUT: %.Self.as_wit.1: = facet_access_witness %.Self.1 [symbolic] +// CHECK:STDOUT: %impl.elem0.1: type = interface_witness_access %.Self.as_wit.1, element0 [symbolic] +// CHECK:STDOUT: %ptr.1: type = ptr_type %T [symbolic] +// CHECK:STDOUT: %Empty_where.type.1: type = facet_type <@Empty, @Empty(%T) where %impl.elem0.1 = %ptr.1> [symbolic] +// CHECK:STDOUT: %V: type = bind_symbolic_name V, 1 [symbolic] +// CHECK:STDOUT: %V.patt: type = symbolic_binding_pattern V, 1 [symbolic] +// CHECK:STDOUT: %H.type: type = fn_type @H [template] +// CHECK:STDOUT: %H: %H.type = struct_value () [template] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template] +// CHECK:STDOUT: %Int.type: type = fn_type @Int [template] +// CHECK:STDOUT: %Int: %Int.type = struct_value () [template] +// CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template] +// CHECK:STDOUT: %Empty.type.4: type = facet_type <@Empty, @Empty(%i32)> [template] +// CHECK:STDOUT: %.Self.2: %Empty.type.4 = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %assoc_type.3: type = assoc_entity_type %Empty.type.4, type [template] +// CHECK:STDOUT: %assoc0.3: %assoc_type.3 = assoc_entity element0, @Empty.%A [template] +// CHECK:STDOUT: %.Self.as_wit.2: = facet_access_witness %.Self.2 [symbolic] +// CHECK:STDOUT: %impl.elem0.2: type = interface_witness_access %.Self.as_wit.2, element0 [symbolic] +// CHECK:STDOUT: %ptr.2: type = ptr_type %i32 [template] +// CHECK:STDOUT: %Empty_where.type.2: type = facet_type <@Empty, @Empty(%i32) where %impl.elem0.2 = %ptr.2> [template] +// CHECK:STDOUT: %G.type: type = fn_type @G [template] +// CHECK:STDOUT: %G: %G.type = struct_value () [template] +// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] +// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] +// CHECK:STDOUT: %H.specific_fn: = specific_function %H, @H(%i32, bool) [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .Int = %import_ref.1 +// CHECK:STDOUT: .Bool = %import_ref.2 +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .Empty = %Empty.decl +// CHECK:STDOUT: .H = %H.decl +// CHECK:STDOUT: .G = %G.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %Empty.decl: %Empty.type.1 = interface_decl @Empty [template = 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.param_patt: type = value_param_pattern %W.patt.loc11_17.1, runtime_param [symbolic = %W.patt.loc11_17.2 (constants.%W.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %W.param: type = value_param runtime_param +// CHECK:STDOUT: %W.loc11_17.1: type = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc11_17.2 (constants.%W)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [template = 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: %T.param_patt: type = value_param_pattern %T.patt.loc18_6.1, runtime_param [symbolic = %T.patt.loc18_6.2 (constants.%T.patt)] +// CHECK:STDOUT: %U.patt: @H.%Empty_where.type (%Empty_where.type.1) = binding_pattern U +// CHECK:STDOUT: %U.param_patt: @H.%Empty_where.type (%Empty_where.type.1) = value_param_pattern %U.patt, runtime_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: %V.param_patt: type = value_param_pattern %V.patt.loc18_43.1, runtime_param [symbolic = %V.patt.loc18_43.2 (constants.%V.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %Empty.ref: %Empty.type.1 = name_ref Empty, file.%Empty.decl [template = constants.%Empty.generic] +// CHECK:STDOUT: %T.ref.loc18_25: type = name_ref T, %T.loc18_6.1 [symbolic = %T.loc18_6.2 (constants.%T)] +// CHECK:STDOUT: %Empty.type.loc18_26.1: type = facet_type <@Empty, @Empty(constants.%T)> [symbolic = %Empty.type.loc18_26.2 (constants.%Empty.type.3)] +// CHECK:STDOUT: %.Self.1: @H.%Empty.type.loc18_26.2 (%Empty.type.3) = bind_symbolic_name .Self [symbolic = %.Self.2 (constants.%.Self.1)] +// CHECK:STDOUT: %.Self.ref: @H.%Empty.type.loc18_26.2 (%Empty.type.3) = name_ref .Self, %.Self.1 [symbolic = %.Self.2 (constants.%.Self.1)] +// CHECK:STDOUT: %.loc18_34: @H.%assoc_type (%assoc_type.2) = specific_constant @Empty.%assoc0.loc12_15.1, @Empty(constants.%T) [symbolic = %assoc0 (constants.%assoc0.2)] +// CHECK:STDOUT: %A.ref: @H.%assoc_type (%assoc_type.2) = name_ref A, %.loc18_34 [symbolic = %assoc0 (constants.%assoc0.2)] +// CHECK:STDOUT: %.Self.as_wit.loc18_34.1: = facet_access_witness %.Self.ref [symbolic = %.Self.as_wit.loc18_34.2 (constants.%.Self.as_wit.1)] +// CHECK:STDOUT: %impl.elem0.loc18_34.1: type = interface_witness_access %.Self.as_wit.loc18_34.1, element0 [symbolic = %impl.elem0.loc18_34.2 (constants.%impl.elem0.1)] +// CHECK:STDOUT: %T.ref.loc18_39: type = name_ref T, %T.loc18_6.1 [symbolic = %T.loc18_6.2 (constants.%T)] +// CHECK:STDOUT: %ptr.loc18_40.1: type = ptr_type %T [symbolic = %ptr.loc18_40.2 (constants.%ptr.1)] +// CHECK:STDOUT: %.loc18_28: type = where_expr %.Self.1 [symbolic = %Empty_where.type (constants.%Empty_where.type.1)] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0.loc18_34.1, %ptr.loc18_40.1 +// CHECK:STDOUT: } +// CHECK:STDOUT: %T.param: type = value_param runtime_param +// CHECK:STDOUT: %T.loc18_6.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc18_6.2 (constants.%T)] +// CHECK:STDOUT: %U.param: @H.%Empty_where.type (%Empty_where.type.1) = value_param runtime_param0 +// CHECK:STDOUT: %U: @H.%Empty_where.type (%Empty_where.type.1) = bind_name U, %U.param +// CHECK:STDOUT: %V.param: type = value_param runtime_param +// CHECK:STDOUT: %V.loc18_43.1: type = bind_symbolic_name V, 1, %V.param [symbolic = %V.loc18_43.2 (constants.%V)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] { +// CHECK:STDOUT: %U.patt: %Empty_where.type.2 = binding_pattern U +// CHECK:STDOUT: %U.param_patt: %Empty_where.type.2 = value_param_pattern %U.patt, runtime_param0 +// CHECK:STDOUT: } { +// CHECK:STDOUT: %Empty.ref: %Empty.type.1 = name_ref Empty, file.%Empty.decl [template = constants.%Empty.generic] +// CHECK:STDOUT: %int_32.loc20_15: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed.loc20_15: init type = call constants.%Int(%int_32.loc20_15) [template = constants.%i32] +// CHECK:STDOUT: %.loc20_18.1: type = value_of_initializer %int.make_type_signed.loc20_15 [template = constants.%i32] +// CHECK:STDOUT: %.loc20_18.2: type = converted %int.make_type_signed.loc20_15, %.loc20_18.1 [template = constants.%i32] +// CHECK:STDOUT: %Empty.type: type = facet_type <@Empty, @Empty(constants.%i32)> [template = constants.%Empty.type.4] +// CHECK:STDOUT: %.Self: %Empty.type.4 = bind_symbolic_name .Self [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %.Self.ref: %Empty.type.4 = name_ref .Self, %.Self [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %.loc20_26: %assoc_type.3 = specific_constant @Empty.%assoc0.loc12_15.1, @Empty(constants.%i32) [template = constants.%assoc0.3] +// CHECK:STDOUT: %A.ref: %assoc_type.3 = name_ref A, %.loc20_26 [template = constants.%assoc0.3] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit.2] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0.2] +// CHECK:STDOUT: %int_32.loc20_31: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed.loc20_31: init type = call constants.%Int(%int_32.loc20_31) [template = constants.%i32] +// CHECK:STDOUT: %.loc20_34.1: type = value_of_initializer %int.make_type_signed.loc20_31 [template = constants.%i32] +// CHECK:STDOUT: %.loc20_34.2: type = converted %int.make_type_signed.loc20_31, %.loc20_34.1 [template = constants.%i32] +// CHECK:STDOUT: %ptr: type = ptr_type %i32 [template = constants.%ptr.2] +// CHECK:STDOUT: %.loc20_20: type = where_expr %.Self [template = constants.%Empty_where.type.2] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %ptr +// CHECK:STDOUT: } +// CHECK:STDOUT: %U.param: %Empty_where.type.2 = value_param runtime_param0 +// CHECK:STDOUT: %U: %Empty_where.type.2 = bind_name U, %U.param +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// 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: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: %Empty.type: type = facet_type <@Empty, @Empty(%W.loc11_17.2)> [symbolic = %Empty.type (constants.%Empty.type.2)] +// CHECK:STDOUT: %Self.2: %Empty.type.2 = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type @Empty.%Empty.type (%Empty.type.2), type [symbolic = %assoc_type (constants.%assoc_type.1)] +// CHECK:STDOUT: %assoc0.loc12_15.2: @Empty.%assoc_type (%assoc_type.1) = assoc_entity element0, %A [symbolic = %assoc0.loc12_15.2 (constants.%assoc0.1)] +// CHECK:STDOUT: +// CHECK:STDOUT: interface { +// CHECK:STDOUT: %Self.1: @Empty.%Empty.type (%Empty.type.2) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)] +// CHECK:STDOUT: %A: type = assoc_const_decl A [template] +// CHECK:STDOUT: %assoc0.loc12_15.1: @Empty.%assoc_type (%assoc_type.1) = assoc_entity element0, %A [symbolic = %assoc0.loc12_15.2 (constants.%assoc0.1)] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self.1 +// CHECK:STDOUT: .A = %assoc0.loc12_15.1 +// CHECK:STDOUT: witness = (%A) +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// 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: %Empty.type.loc18_26.2: type = facet_type <@Empty, @Empty(%T.loc18_6.2)> [symbolic = %Empty.type.loc18_26.2 (constants.%Empty.type.3)] +// CHECK:STDOUT: %.Self.2: @H.%Empty.type.loc18_26.2 (%Empty.type.3) = bind_symbolic_name .Self [symbolic = %.Self.2 (constants.%.Self.1)] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type @H.%Empty.type.loc18_26.2 (%Empty.type.3), type [symbolic = %assoc_type (constants.%assoc_type.2)] +// CHECK:STDOUT: %assoc0: @H.%assoc_type (%assoc_type.2) = assoc_entity element0, @Empty.%A [symbolic = %assoc0 (constants.%assoc0.2)] +// CHECK:STDOUT: %.Self.as_wit.loc18_34.2: = facet_access_witness %.Self.2 [symbolic = %.Self.as_wit.loc18_34.2 (constants.%.Self.as_wit.1)] +// CHECK:STDOUT: %impl.elem0.loc18_34.2: type = interface_witness_access %.Self.as_wit.loc18_34.2, element0 [symbolic = %impl.elem0.loc18_34.2 (constants.%impl.elem0.1)] +// CHECK:STDOUT: %ptr.loc18_40.2: type = ptr_type @H.%T.loc18_6.2 (%T) [symbolic = %ptr.loc18_40.2 (constants.%ptr.1)] +// CHECK:STDOUT: %Empty_where.type: type = facet_type <@Empty, @Empty(%T.loc18_6.2) where %impl.elem0.loc18_34.2 (constants.%impl.elem0.1) = %ptr.loc18_40.2 (constants.%ptr.1)> [symbolic = %Empty_where.type (constants.%Empty_where.type.1)] +// 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: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%T.param_patt: type, %U.param_patt: @H.%Empty_where.type (%Empty_where.type.1), %V.param_patt: type) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @G(%U.param_patt: %Empty_where.type.2) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %H.ref: %H.type = name_ref H, file.%H.decl [template = constants.%H] +// CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed.loc21: init type = call constants.%Int(%int_32.loc21) [template = constants.%i32] +// CHECK:STDOUT: %U.ref: %Empty_where.type.2 = name_ref U, %U +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc21_17.1: type = value_of_initializer %int.make_type_signed.loc21 [template = constants.%i32] +// CHECK:STDOUT: %.loc21_17.2: type = converted %int.make_type_signed.loc21, %.loc21_17.1 [template = constants.%i32] +// CHECK:STDOUT: %.loc21_17.3: type = value_of_initializer %bool.make_type [template = bool] +// CHECK:STDOUT: %.loc21_17.4: type = converted %bool.make_type, %.loc21_17.3 [template = bool] +// CHECK:STDOUT: %H.specific_fn: = specific_function %H.ref, @H(constants.%i32, bool) [template = constants.%H.specific_fn] +// CHECK:STDOUT: %H.call: init %empty_tuple.type = call %H.specific_fn(%U.ref) +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Empty(constants.%W) { +// CHECK:STDOUT: %W.loc11_17.2 => constants.%W +// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%W +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Empty(%W.loc11_17.2) { +// CHECK:STDOUT: %W.loc11_17.2 => constants.%W +// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%W +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Empty(constants.%T) { +// CHECK:STDOUT: %W.loc11_17.2 => constants.%T +// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%T +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: %Empty.type => constants.%Empty.type.3 +// CHECK:STDOUT: %Self.2 => constants.%Self +// CHECK:STDOUT: %assoc_type => constants.%assoc_type.2 +// CHECK:STDOUT: %assoc0.loc12_15.2 => constants.%assoc0.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Empty(@H.%T.loc18_6.2) { +// CHECK:STDOUT: %W.loc11_17.2 => constants.%T +// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%T +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @H(constants.%T, constants.%V) { +// CHECK:STDOUT: %T.loc18_6.2 => constants.%T +// CHECK:STDOUT: %T.patt.loc18_6.2 => constants.%T +// CHECK:STDOUT: %Empty.type.loc18_26.2 => constants.%Empty.type.3 +// CHECK:STDOUT: %.Self.2 => constants.%.Self.1 +// CHECK:STDOUT: %assoc_type => constants.%assoc_type.2 +// CHECK:STDOUT: %assoc0 => constants.%assoc0.2 +// CHECK:STDOUT: %.Self.as_wit.loc18_34.2 => constants.%.Self.as_wit.1 +// CHECK:STDOUT: %impl.elem0.loc18_34.2 => constants.%impl.elem0.1 +// CHECK:STDOUT: %ptr.loc18_40.2 => constants.%ptr.1 +// CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.1 +// CHECK:STDOUT: %V.loc18_43.2 => constants.%V +// CHECK:STDOUT: %V.patt.loc18_43.2 => constants.%V +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Empty(constants.%i32) { +// CHECK:STDOUT: %W.loc11_17.2 => constants.%i32 +// CHECK:STDOUT: %W.patt.loc11_17.2 => constants.%i32 +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: %Empty.type => constants.%Empty.type.4 +// CHECK:STDOUT: %Self.2 => constants.%Self +// CHECK:STDOUT: %assoc_type => constants.%assoc_type.3 +// CHECK:STDOUT: %assoc0.loc12_15.2 => constants.%assoc0.3 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @H(constants.%i32, bool) { +// CHECK:STDOUT: %T.loc18_6.2 => constants.%i32 +// CHECK:STDOUT: %T.patt.loc18_6.2 => constants.%i32 +// CHECK:STDOUT: %Empty.type.loc18_26.2 => constants.%Empty.type.4 +// CHECK:STDOUT: %.Self.2 => constants.%.Self.2 +// CHECK:STDOUT: %assoc_type => constants.%assoc_type.3 +// CHECK:STDOUT: %assoc0 => constants.%assoc0.3 +// CHECK:STDOUT: %.Self.as_wit.loc18_34.2 => constants.%.Self.as_wit.2 +// CHECK:STDOUT: %impl.elem0.loc18_34.2 => constants.%impl.elem0.2 +// CHECK:STDOUT: %ptr.loc18_40.2 => constants.%ptr.2 +// CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.2 +// CHECK:STDOUT: %V.loc18_43.2 => bool +// CHECK:STDOUT: %V.patt.loc18_43.2 => bool +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/where_expr/equal_rewrite.carbon b/toolchain/check/testdata/where_expr/equal_rewrite.carbon new file mode 100644 index 0000000000000..8cba769ab0ca1 --- /dev/null +++ b/toolchain/check/testdata/where_expr/equal_rewrite.carbon @@ -0,0 +1,1458 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/where_expr/equal_rewrite.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/where_expr/equal_rewrite.carbon + +// --- equal_constraint.carbon + +library "[[@TEST_NAME]]"; + +interface N { + let P:! type; +} + +fn Equal(T:! N where .P = {}); + +// --- nested_rewrites.carbon + +library "[[@TEST_NAME]]"; + +interface A { + let B:! type; + let C:! type; +} + +fn NestedRewrite(D:! (A where .B = bool) where .C = ()); + +// --- repeated_rewrite.carbon + +library "[[@TEST_NAME]]"; + +interface E { + let F:! type; +} + +fn OneRewrite(G:! E where .F = i32) {} + +fn RepeatedRewrite(H:! E where .F = i32 and .F = i32) { + OneRewrite(H); +} + +fn OneRewriteAgain(I:! E where .F = i32) { + RepeatedRewrite(I); +} + +// --- rewrites_reordered.carbon + +library "[[@TEST_NAME]]"; + +interface J { + let K:! type; + let L:! type; +} + +fn Alphabetical(M:! J where .K = () and .L = bool) {} + +fn Reversed(N:! J where .L = bool and .K = ()) { + Alphabetical(N); +} + +// --- fail_rewrites_mismatch_right.carbon + +library "[[@TEST_NAME]]"; + +interface O { + let P:! type; +} + +fn WithInteger(Q:! O where .P = i32) {} + +fn WithBool(R:! O where .P = bool) { + // CHECK:STDERR: fail_rewrites_mismatch_right.carbon:[[@LINE+10]]:3: error: cannot implicitly convert from `O where .(O.P) = bool` to `O where .(O.P) = i32` [ImplicitAsConversionFailure] + // CHECK:STDERR: WithInteger(R); + // CHECK:STDERR: ^~~~~~~~~~~~~~ + // CHECK:STDERR: fail_rewrites_mismatch_right.carbon:[[@LINE+7]]:3: note: type `O where .(O.P) = bool` does not implement interface `ImplicitAs(O where .(O.P) = i32)` [MissingImplInMemberAccessNote] + // CHECK:STDERR: WithInteger(R); + // CHECK:STDERR: ^~~~~~~~~~~~~~ + // CHECK:STDERR: fail_rewrites_mismatch_right.carbon:[[@LINE-9]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fn WithInteger(Q:! O where .P = i32) {} + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: + WithInteger(R); +} + +// --- fail_rewrites_mismatch_left.carbon + +library "[[@TEST_NAME]]"; + +interface S { + let T:! type; + let U:! type; +} + +fn WithT(V:! S where .T = ()) {} + +fn WithU(W:! S where .U = ()) { + // CHECK:STDERR: fail_rewrites_mismatch_left.carbon:[[@LINE+10]]:3: error: cannot implicitly convert from `S where .(S.U) = ()` to `S where .(S.T) = ()` [ImplicitAsConversionFailure] + // CHECK:STDERR: WithT(W); + // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: fail_rewrites_mismatch_left.carbon:[[@LINE+7]]:3: note: type `S where .(S.U) = ()` does not implement interface `ImplicitAs(S where .(S.T) = ())` [MissingImplInMemberAccessNote] + // CHECK:STDERR: WithT(W); + // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: fail_rewrites_mismatch_left.carbon:[[@LINE-9]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fn WithT(V:! S where .T = ()) {} + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: + WithT(W); +} + +// --- fail_import_rewrites.carbon + +library "[[@TEST_NAME]]"; + +import library "equal_constraint"; +import library "nested_rewrites"; + +fn Calls() { + // CHECK:STDERR: fail_import_rewrites.carbon:[[@LINE+11]]:3: error: cannot implicitly convert from `type` to `N where .(N.P) = {}` [ImplicitAsConversionFailure] + // CHECK:STDERR: Equal(bool); + // CHECK:STDERR: ^~~~~~~~~~~ + // CHECK:STDERR: fail_import_rewrites.carbon:[[@LINE+8]]:3: note: type `type` does not implement interface `ImplicitAs(N where .(N.P) = {})` [MissingImplInMemberAccessNote] + // CHECK:STDERR: Equal(bool); + // CHECK:STDERR: ^~~~~~~~~~~ + // CHECK:STDERR: fail_import_rewrites.carbon:[[@LINE-10]]:1: in import [InImport] + // CHECK:STDERR: equal_constraint.carbon:8:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fn Equal(T:! N where .P = {}); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: + Equal(bool); + + // CHECK:STDERR: fail_import_rewrites.carbon:[[@LINE+11]]:3: error: cannot implicitly convert from `type` to `A where .(A.C) = () and .(A.B) = bool` [ImplicitAsConversionFailure] + // CHECK:STDERR: NestedRewrite(i32); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_rewrites.carbon:[[@LINE+8]]:3: note: type `type` does not implement interface `ImplicitAs(A where .(A.C) = () and .(A.B) = bool)` [MissingImplInMemberAccessNote] + // CHECK:STDERR: NestedRewrite(i32); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_rewrites.carbon:[[@LINE-23]]:1: in import [InImport] + // CHECK:STDERR: nested_rewrites.carbon:9:1: note: while deducing parameters of generic declared here [DeductionGenericHere] + // CHECK:STDERR: fn NestedRewrite(D:! (A where .B = bool) where .C = ()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: + NestedRewrite(i32); +} + +// --- fail_check_rewrite_constraints.carbon + +library "[[@TEST_NAME]]"; + +interface I { + let Member:! type; +} + +// `2` can't be converted to the type of `I.Member` +// CHECK:STDERR: fail_check_rewrite_constraints.carbon:[[@LINE+7]]:46: error: cannot implicitly convert from `Core.IntLiteral` to `type` [ImplicitAsConversionFailure] +// CHECK:STDERR: fn RewriteTypeMismatch(X:! I where .Member = 2); +// CHECK:STDERR: ^ +// CHECK:STDERR: fail_check_rewrite_constraints.carbon:[[@LINE+4]]:46: note: type `Core.IntLiteral` does not implement interface `ImplicitAs(type)` [MissingImplInMemberAccessNote] +// CHECK:STDERR: fn RewriteTypeMismatch(X:! I where .Member = 2); +// CHECK:STDERR: ^ +// CHECK:STDERR: +fn RewriteTypeMismatch(X:! I where .Member = 2); + +// --- fail_todo_let.carbon + +library "[[@TEST_NAME]]"; + +interface A {} +class D {} +impl D as A {} +// TODO: This should be a compile-time binding, once that is supported. +// CHECK:STDERR: fail_todo_let.carbon:[[@LINE+7]]:1: error: cannot implicitly convert from `type` to `type where...` [ImplicitAsConversionFailure] +// CHECK:STDERR: let B: type where .Self impls A = D; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_todo_let.carbon:[[@LINE+4]]:1: note: type `type` does not implement interface `ImplicitAs(type where...)` [MissingImplInMemberAccessNote] +// CHECK:STDERR: let B: type where .Self impls A = D; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: +let B: type where .Self impls A = D; + +// --- fail_type_does_not_implement_where.carbon + +library "[[@TEST_NAME]]"; + +interface E { + let F:! type; + let G:! type; +} +// Testing how these types get stringified in error messages. + +// TODO: This should be a compile-time binding, once that is supported. +// CHECK:STDERR: fail_type_does_not_implement_where.carbon:[[@LINE+7]]:1: error: cannot implicitly convert from `type` to `E where .(E.G) = () and .(E.F) = bool` [ImplicitAsConversionFailure] +// CHECK:STDERR: let H: (E where .F = bool and .G = ()) = f64; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_type_does_not_implement_where.carbon:[[@LINE+4]]:1: note: type `type` does not implement interface `ImplicitAs(E where .(E.G) = () and .(E.F) = bool)` [MissingImplInMemberAccessNote] +// CHECK:STDERR: let H: (E where .F = bool and .G = ()) = f64; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: +let H: (E where .F = bool and .G = ()) = f64; + +// CHECK:STDERR: fail_type_does_not_implement_where.carbon:[[@LINE+7]]:1: error: cannot implicitly convert from `type` to `E where .(E.G) = i32 and .(E.F) = {}` [ImplicitAsConversionFailure] +// CHECK:STDERR: let J: ((E where .F = {}) where .G = i32) = bool; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_type_does_not_implement_where.carbon:[[@LINE+4]]:1: note: type `type` does not implement interface `ImplicitAs(E where .(E.G) = i32 and .(E.F) = {})` [MissingImplInMemberAccessNote] +// CHECK:STDERR: let J: ((E where .F = {}) where .G = i32) = bool; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: +let J: ((E where .F = {}) where .G = i32) = bool; + +// CHECK:STDERR: fail_type_does_not_implement_where.carbon:[[@LINE+6]]:1: error: cannot implicitly convert from `type` to `E where .(E.F) = .(E.G)` [ImplicitAsConversionFailure] +// CHECK:STDERR: let K: (E where .F = .Self.G) = bool; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_type_does_not_implement_where.carbon:[[@LINE+3]]:1: note: type `type` does not implement interface `ImplicitAs(E where .(E.F) = .(E.G))` [MissingImplInMemberAccessNote] +// CHECK:STDERR: let K: (E where .F = .Self.G) = bool; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +let K: (E where .F = .Self.G) = bool; + +// CHECK:STDOUT: --- equal_constraint.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %N.type: type = facet_type <@N> [template] +// CHECK:STDOUT: %Self: %N.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %N.type, type [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @N.%P [template] +// CHECK:STDOUT: %.Self: %N.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] +// CHECK:STDOUT: %N_where.type: type = facet_type <@N where %impl.elem0 = %empty_struct_type> [template] +// 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: %Equal.type: type = fn_type @Equal [template] +// CHECK:STDOUT: %Equal: %Equal.type = struct_value () [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .N = %N.decl +// CHECK:STDOUT: .Equal = %Equal.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %N.decl: type = interface_decl @N [template = constants.%N.type] {} {} +// CHECK:STDOUT: %Equal.decl: %Equal.type = fn_decl @Equal [template = 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.param_patt: %N_where.type = value_param_pattern %T.patt.loc8_10.1, runtime_param [symbolic = %T.patt.loc8_10.2 (constants.%T.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %N.ref: type = name_ref N, file.%N.decl [template = constants.%N.type] +// CHECK:STDOUT: %.Self: %N.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %N.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %P.ref: %assoc_type = name_ref P, @N.%assoc0 [template = constants.%assoc0] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %.loc8_28.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc8_28.2: type = converted %.loc8_28.1, constants.%empty_struct_type [template = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc8_16: type = where_expr %.Self [template = constants.%N_where.type] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc8_28.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %T.param: %N_where.type = value_param runtime_param +// CHECK:STDOUT: %T.loc8_10.1: %N_where.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_10.2 (constants.%T)] +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @N { +// CHECK:STDOUT: %Self: %N.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: %P: type = assoc_const_decl P [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %P [template = constants.%assoc0] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .P = %assoc0 +// CHECK:STDOUT: witness = (%P) +// CHECK:STDOUT: } +// 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: +// CHECK:STDOUT: fn(%T.param_patt: %N_where.type); +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Equal(constants.%T) { +// CHECK:STDOUT: %T.loc8_10.2 => constants.%T +// CHECK:STDOUT: %T.patt.loc8_10.2 => constants.%T +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- nested_rewrites.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %A.type: type = facet_type <@A> [template] +// CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %A.type, type [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @A.%B [template] +// CHECK:STDOUT: %assoc1: %assoc_type = assoc_entity element1, @A.%C [template] +// CHECK:STDOUT: %.Self.1: %A.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] +// CHECK:STDOUT: %.Self.as_wit.1: = facet_access_witness %.Self.1 [symbolic] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit.1, element0 [symbolic] +// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] +// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] +// CHECK:STDOUT: %A_where.type.1: type = facet_type <@A where %impl.elem0 = bool> [template] +// CHECK:STDOUT: %.Self.2: %A_where.type.1 = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %.Self.as_wit.2: = facet_access_witness %.Self.2 [symbolic] +// CHECK:STDOUT: %impl.elem1: type = interface_witness_access %.Self.as_wit.2, element1 [symbolic] +// CHECK:STDOUT: %A_where.type.2: type = facet_type <@A where %impl.elem1 = %empty_tuple.type and %impl.elem0 = bool> [template] +// CHECK:STDOUT: %D: %A_where.type.2 = bind_symbolic_name D, 0 [symbolic] +// CHECK:STDOUT: %D.patt: %A_where.type.2 = symbolic_binding_pattern D, 0 [symbolic] +// CHECK:STDOUT: %NestedRewrite.type: type = fn_type @NestedRewrite [template] +// CHECK:STDOUT: %NestedRewrite: %NestedRewrite.type = struct_value () [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .Bool = %import_ref +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .A = %A.decl +// CHECK:STDOUT: .NestedRewrite = %NestedRewrite.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %A.decl: type = interface_decl @A [template = constants.%A.type] {} {} +// CHECK:STDOUT: %NestedRewrite.decl: %NestedRewrite.type = fn_decl @NestedRewrite [template = constants.%NestedRewrite] { +// CHECK:STDOUT: %D.patt.loc9_18.1: %A_where.type.2 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc9_18.2 (constants.%D.patt)] +// CHECK:STDOUT: %D.param_patt: %A_where.type.2 = value_param_pattern %D.patt.loc9_18.1, runtime_param [symbolic = %D.patt.loc9_18.2 (constants.%D.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [template = constants.%A.type] +// CHECK:STDOUT: %.Self.1: %A.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref.loc9_31: %A.type = name_ref .Self, %.Self.1 [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %B.ref: %assoc_type = name_ref B, @A.%assoc0 [template = constants.%assoc0] +// CHECK:STDOUT: %.Self.as_wit.loc9_31: = facet_access_witness %.Self.ref.loc9_31 [symbolic = constants.%.Self.as_wit.1] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit.loc9_31, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc9_36.1: type = value_of_initializer %bool.make_type [template = bool] +// CHECK:STDOUT: %.loc9_36.2: type = converted %bool.make_type, %.loc9_36.1 [template = bool] +// CHECK:STDOUT: %.loc9_25: type = where_expr %.Self.1 [template = constants.%A_where.type.1] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc9_36.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %.Self.2: %A_where.type.1 = bind_symbolic_name .Self [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %.Self.ref.loc9_48: %A_where.type.1 = name_ref .Self, %.Self.2 [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %C.ref: %assoc_type = name_ref C, @A.%assoc1 [template = constants.%assoc1] +// CHECK:STDOUT: %.Self.as_wit.loc9_48: = facet_access_witness %.Self.ref.loc9_48 [symbolic = constants.%.Self.as_wit.2] +// CHECK:STDOUT: %impl.elem1: type = interface_witness_access %.Self.as_wit.loc9_48, element1 [symbolic = constants.%impl.elem1] +// CHECK:STDOUT: %.loc9_54.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc9_54.2: type = converted %.loc9_54.1, constants.%empty_tuple.type [template = constants.%empty_tuple.type] +// CHECK:STDOUT: %.loc9_42: type = where_expr %.Self.2 [template = constants.%A_where.type.2] { +// CHECK:STDOUT: requirement_rewrite %impl.elem1, %.loc9_54.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %D.param: %A_where.type.2 = value_param runtime_param +// CHECK:STDOUT: %D.loc9_18.1: %A_where.type.2 = bind_symbolic_name D, 0, %D.param [symbolic = %D.loc9_18.2 (constants.%D)] +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @A { +// CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: %B: type = assoc_const_decl B [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %B [template = constants.%assoc0] +// CHECK:STDOUT: %C: type = assoc_const_decl C [template] +// CHECK:STDOUT: %assoc1: %assoc_type = assoc_entity element1, %C [template = constants.%assoc1] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .B = %assoc0 +// CHECK:STDOUT: .C = %assoc1 +// CHECK:STDOUT: witness = (%B, %C) +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: generic fn @NestedRewrite(%D.loc9_18.1: %A_where.type.2) { +// CHECK:STDOUT: %D.loc9_18.2: %A_where.type.2 = bind_symbolic_name D, 0 [symbolic = %D.loc9_18.2 (constants.%D)] +// CHECK:STDOUT: %D.patt.loc9_18.2: %A_where.type.2 = symbolic_binding_pattern D, 0 [symbolic = %D.patt.loc9_18.2 (constants.%D.patt)] +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%D.param_patt: %A_where.type.2); +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @NestedRewrite(constants.%D) { +// CHECK:STDOUT: %D.loc9_18.2 => constants.%D +// CHECK:STDOUT: %D.patt.loc9_18.2 => constants.%D +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- repeated_rewrite.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %E.type: type = facet_type <@E> [template] +// CHECK:STDOUT: %Self: %E.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %E.type, type [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @E.%F [template] +// CHECK:STDOUT: %.Self: %E.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template] +// CHECK:STDOUT: %Int.type: type = fn_type @Int [template] +// CHECK:STDOUT: %Int: %Int.type = struct_value () [template] +// CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template] +// CHECK:STDOUT: %E_where.type: type = facet_type <@E where %impl.elem0 = %i32> [template] +// 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: %OneRewrite.type: type = fn_type @OneRewrite [template] +// CHECK:STDOUT: %OneRewrite: %OneRewrite.type = struct_value () [template] +// 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: %RepeatedRewrite.type: type = fn_type @RepeatedRewrite [template] +// CHECK:STDOUT: %RepeatedRewrite: %RepeatedRewrite.type = struct_value () [template] +// CHECK:STDOUT: %OneRewrite.specific_fn.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: %OneRewriteAgain.type: type = fn_type @OneRewriteAgain [template] +// CHECK:STDOUT: %OneRewriteAgain: %OneRewriteAgain.type = struct_value () [template] +// CHECK:STDOUT: %RepeatedRewrite.specific_fn: = specific_function %RepeatedRewrite, @RepeatedRewrite(%I) [symbolic] +// CHECK:STDOUT: %OneRewrite.specific_fn.2: = specific_function %OneRewrite, @OneRewrite(%I) [symbolic] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .Int = %import_ref +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .E = %E.decl +// CHECK:STDOUT: .OneRewrite = %OneRewrite.decl +// CHECK:STDOUT: .RepeatedRewrite = %RepeatedRewrite.decl +// CHECK:STDOUT: .OneRewriteAgain = %OneRewriteAgain.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %E.decl: type = interface_decl @E [template = constants.%E.type] {} {} +// CHECK:STDOUT: %OneRewrite.decl: %OneRewrite.type = fn_decl @OneRewrite [template = 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.param_patt: %E_where.type = value_param_pattern %G.patt.loc8_15.1, runtime_param [symbolic = %G.patt.loc8_15.2 (constants.%G.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [template = constants.%E.type] +// CHECK:STDOUT: %.Self: %E.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %E.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %F.ref: %assoc_type = name_ref F, @E.%assoc0 [template = constants.%assoc0] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32] +// CHECK:STDOUT: %.loc8_32.1: type = value_of_initializer %int.make_type_signed [template = constants.%i32] +// CHECK:STDOUT: %.loc8_32.2: type = converted %int.make_type_signed, %.loc8_32.1 [template = constants.%i32] +// CHECK:STDOUT: %.loc8_21: type = where_expr %.Self [template = constants.%E_where.type] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc8_32.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %G.param: %E_where.type = value_param runtime_param +// CHECK:STDOUT: %G.loc8_15.1: %E_where.type = bind_symbolic_name G, 0, %G.param [symbolic = %G.loc8_15.2 (constants.%G)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %RepeatedRewrite.decl: %RepeatedRewrite.type = fn_decl @RepeatedRewrite [template = 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.param_patt: %E_where.type = value_param_pattern %H.patt.loc10_20.1, runtime_param [symbolic = %H.patt.loc10_20.2 (constants.%H.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [template = constants.%E.type] +// CHECK:STDOUT: %.Self: %E.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref.loc10_32: %E.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %F.ref.loc10_32: %assoc_type = name_ref F, @E.%assoc0 [template = constants.%assoc0] +// CHECK:STDOUT: %.Self.as_wit.loc10_32: = facet_access_witness %.Self.ref.loc10_32 [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0.loc10_32: type = interface_witness_access %.Self.as_wit.loc10_32, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %int_32.loc10_37: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed.loc10_37: init type = call constants.%Int(%int_32.loc10_37) [template = constants.%i32] +// CHECK:STDOUT: %.loc10_37.1: type = value_of_initializer %int.make_type_signed.loc10_37 [template = constants.%i32] +// CHECK:STDOUT: %.loc10_37.2: type = converted %int.make_type_signed.loc10_37, %.loc10_37.1 [template = constants.%i32] +// CHECK:STDOUT: %.Self.ref.loc10_45: %E.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %F.ref.loc10_45: %assoc_type = name_ref F, @E.%assoc0 [template = constants.%assoc0] +// CHECK:STDOUT: %.Self.as_wit.loc10_45: = facet_access_witness %.Self.ref.loc10_45 [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0.loc10_45: type = interface_witness_access %.Self.as_wit.loc10_45, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %int_32.loc10_50: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed.loc10_50: init type = call constants.%Int(%int_32.loc10_50) [template = constants.%i32] +// CHECK:STDOUT: %.loc10_50.1: type = value_of_initializer %int.make_type_signed.loc10_50 [template = constants.%i32] +// CHECK:STDOUT: %.loc10_50.2: type = converted %int.make_type_signed.loc10_50, %.loc10_50.1 [template = constants.%i32] +// CHECK:STDOUT: %.loc10_26: type = where_expr %.Self [template = constants.%E_where.type] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0.loc10_32, %.loc10_37.2 +// CHECK:STDOUT: requirement_rewrite %impl.elem0.loc10_45, %.loc10_50.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %H.param: %E_where.type = value_param runtime_param +// CHECK:STDOUT: %H.loc10_20.1: %E_where.type = bind_symbolic_name H, 0, %H.param [symbolic = %H.loc10_20.2 (constants.%H)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %OneRewriteAgain.decl: %OneRewriteAgain.type = fn_decl @OneRewriteAgain [template = 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.param_patt: %E_where.type = value_param_pattern %I.patt.loc14_20.1, runtime_param [symbolic = %I.patt.loc14_20.2 (constants.%I.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [template = constants.%E.type] +// CHECK:STDOUT: %.Self: %E.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %E.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %F.ref: %assoc_type = name_ref F, @E.%assoc0 [template = constants.%assoc0] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32] +// CHECK:STDOUT: %.loc14_37.1: type = value_of_initializer %int.make_type_signed [template = constants.%i32] +// CHECK:STDOUT: %.loc14_37.2: type = converted %int.make_type_signed, %.loc14_37.1 [template = constants.%i32] +// CHECK:STDOUT: %.loc14_26: type = where_expr %.Self [template = constants.%E_where.type] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc14_37.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %I.param: %E_where.type = value_param runtime_param +// CHECK:STDOUT: %I.loc14_20.1: %E_where.type = bind_symbolic_name I, 0, %I.param [symbolic = %I.loc14_20.2 (constants.%I)] +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @E { +// CHECK:STDOUT: %Self: %E.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: %F: type = assoc_const_decl F [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %F [template = constants.%assoc0] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .F = %assoc0 +// CHECK:STDOUT: witness = (%F) +// CHECK:STDOUT: } +// 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: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%G.param_patt: %E_where.type) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// 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: +// 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.1)] +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%H.param_patt: %E_where.type) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %OneRewrite.ref: %OneRewrite.type = name_ref OneRewrite, file.%OneRewrite.decl [template = constants.%OneRewrite] +// CHECK:STDOUT: %H.ref: %E_where.type = name_ref H, %H.loc10_20.1 [symbolic = %H.loc10_20.2 (constants.%H)] +// CHECK:STDOUT: %OneRewrite.specific_fn.loc11_3.1: = specific_function %OneRewrite.ref, @OneRewrite(constants.%H) [symbolic = %OneRewrite.specific_fn.loc11_3.2 (constants.%OneRewrite.specific_fn.1)] +// CHECK:STDOUT: %OneRewrite.call: init %empty_tuple.type = call %OneRewrite.specific_fn.loc11_3.1() +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// 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: +// 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)] +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%I.param_patt: %E_where.type) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %RepeatedRewrite.ref: %RepeatedRewrite.type = name_ref RepeatedRewrite, file.%RepeatedRewrite.decl [template = constants.%RepeatedRewrite] +// CHECK:STDOUT: %I.ref: %E_where.type = name_ref I, %I.loc14_20.1 [symbolic = %I.loc14_20.2 (constants.%I)] +// CHECK:STDOUT: %RepeatedRewrite.specific_fn.loc15_3.1: = specific_function %RepeatedRewrite.ref, @RepeatedRewrite(constants.%I) [symbolic = %RepeatedRewrite.specific_fn.loc15_3.2 (constants.%RepeatedRewrite.specific_fn)] +// CHECK:STDOUT: %RepeatedRewrite.call: init %empty_tuple.type = call %RepeatedRewrite.specific_fn.loc15_3.1() +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @OneRewrite(constants.%G) { +// CHECK:STDOUT: %G.loc8_15.2 => constants.%G +// CHECK:STDOUT: %G.patt.loc8_15.2 => constants.%G +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @RepeatedRewrite(constants.%H) { +// CHECK:STDOUT: %H.loc10_20.2 => constants.%H +// CHECK:STDOUT: %H.patt.loc10_20.2 => constants.%H +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @OneRewrite(constants.%H) { +// CHECK:STDOUT: %G.loc8_15.2 => constants.%H +// CHECK:STDOUT: %G.patt.loc8_15.2 => constants.%H +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @OneRewrite(@RepeatedRewrite.%H.loc10_20.2) { +// CHECK:STDOUT: %G.loc8_15.2 => constants.%H +// CHECK:STDOUT: %G.patt.loc8_15.2 => constants.%H +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @OneRewriteAgain(constants.%I) { +// CHECK:STDOUT: %I.loc14_20.2 => constants.%I +// CHECK:STDOUT: %I.patt.loc14_20.2 => constants.%I +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @RepeatedRewrite(constants.%I) { +// CHECK:STDOUT: %H.loc10_20.2 => constants.%I +// CHECK:STDOUT: %H.patt.loc10_20.2 => constants.%I +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: %OneRewrite.specific_fn.loc11_3.2 => constants.%OneRewrite.specific_fn.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @RepeatedRewrite(@OneRewriteAgain.%I.loc14_20.2) { +// CHECK:STDOUT: %H.loc10_20.2 => constants.%I +// CHECK:STDOUT: %H.patt.loc10_20.2 => constants.%I +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @OneRewrite(constants.%I) { +// CHECK:STDOUT: %G.loc8_15.2 => constants.%I +// CHECK:STDOUT: %G.patt.loc8_15.2 => constants.%I +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- rewrites_reordered.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %J.type: type = facet_type <@J> [template] +// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %J.type, type [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @J.%K [template] +// CHECK:STDOUT: %assoc1: %assoc_type = assoc_entity element1, @J.%L [template] +// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] +// CHECK:STDOUT: %impl.elem1: type = interface_witness_access %.Self.as_wit, element1 [symbolic] +// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] +// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] +// CHECK:STDOUT: %J_where.type: type = facet_type <@J where %impl.elem1 = bool and %impl.elem0 = %empty_tuple.type> [template] +// 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: %Alphabetical.type: type = fn_type @Alphabetical [template] +// CHECK:STDOUT: %Alphabetical: %Alphabetical.type = struct_value () [template] +// 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: %Reversed.type: type = fn_type @Reversed [template] +// CHECK:STDOUT: %Reversed: %Reversed.type = struct_value () [template] +// CHECK:STDOUT: %Alphabetical.specific_fn: = specific_function %Alphabetical, @Alphabetical(%N) [symbolic] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .Bool = %import_ref +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .J = %J.decl +// CHECK:STDOUT: .Alphabetical = %Alphabetical.decl +// CHECK:STDOUT: .Reversed = %Reversed.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %J.decl: type = interface_decl @J [template = constants.%J.type] {} {} +// CHECK:STDOUT: %Alphabetical.decl: %Alphabetical.type = fn_decl @Alphabetical [template = 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.param_patt: %J_where.type = value_param_pattern %M.patt.loc9_17.1, runtime_param [symbolic = %M.patt.loc9_17.2 (constants.%M.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type] +// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref.loc9_29: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %K.ref: %assoc_type = name_ref K, @J.%assoc0 [template = constants.%assoc0] +// CHECK:STDOUT: %.Self.as_wit.loc9_29: = facet_access_witness %.Self.ref.loc9_29 [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit.loc9_29, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %.loc9_35.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc9_35.2: type = converted %.loc9_35.1, constants.%empty_tuple.type [template = constants.%empty_tuple.type] +// CHECK:STDOUT: %.Self.ref.loc9_41: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %L.ref: %assoc_type = name_ref L, @J.%assoc1 [template = constants.%assoc1] +// CHECK:STDOUT: %.Self.as_wit.loc9_41: = facet_access_witness %.Self.ref.loc9_41 [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem1: type = interface_witness_access %.Self.as_wit.loc9_41, element1 [symbolic = constants.%impl.elem1] +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc9_46.1: type = value_of_initializer %bool.make_type [template = bool] +// CHECK:STDOUT: %.loc9_46.2: type = converted %bool.make_type, %.loc9_46.1 [template = bool] +// CHECK:STDOUT: %.loc9_23: type = where_expr %.Self [template = constants.%J_where.type] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc9_35.2 +// CHECK:STDOUT: requirement_rewrite %impl.elem1, %.loc9_46.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %M.param: %J_where.type = value_param runtime_param +// CHECK:STDOUT: %M.loc9_17.1: %J_where.type = bind_symbolic_name M, 0, %M.param [symbolic = %M.loc9_17.2 (constants.%M)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %Reversed.decl: %Reversed.type = fn_decl @Reversed [template = 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.param_patt: %J_where.type = value_param_pattern %N.patt.loc11_13.1, runtime_param [symbolic = %N.patt.loc11_13.2 (constants.%N.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [template = constants.%J.type] +// CHECK:STDOUT: %.Self: %J.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref.loc11_25: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %L.ref: %assoc_type = name_ref L, @J.%assoc1 [template = constants.%assoc1] +// CHECK:STDOUT: %.Self.as_wit.loc11_25: = facet_access_witness %.Self.ref.loc11_25 [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem1: type = interface_witness_access %.Self.as_wit.loc11_25, element1 [symbolic = constants.%impl.elem1] +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc11_30.1: type = value_of_initializer %bool.make_type [template = bool] +// CHECK:STDOUT: %.loc11_30.2: type = converted %bool.make_type, %.loc11_30.1 [template = bool] +// CHECK:STDOUT: %.Self.ref.loc11_39: %J.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %K.ref: %assoc_type = name_ref K, @J.%assoc0 [template = constants.%assoc0] +// CHECK:STDOUT: %.Self.as_wit.loc11_39: = facet_access_witness %.Self.ref.loc11_39 [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit.loc11_39, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %.loc11_45.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc11_45.2: type = converted %.loc11_45.1, constants.%empty_tuple.type [template = constants.%empty_tuple.type] +// CHECK:STDOUT: %.loc11_19: type = where_expr %.Self [template = constants.%J_where.type] { +// CHECK:STDOUT: requirement_rewrite %impl.elem1, %.loc11_30.2 +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc11_45.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %N.param: %J_where.type = value_param runtime_param +// CHECK:STDOUT: %N.loc11_13.1: %J_where.type = bind_symbolic_name N, 0, %N.param [symbolic = %N.loc11_13.2 (constants.%N)] +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @J { +// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: %K: type = assoc_const_decl K [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %K [template = constants.%assoc0] +// CHECK:STDOUT: %L: type = assoc_const_decl L [template] +// CHECK:STDOUT: %assoc1: %assoc_type = assoc_entity element1, %L [template = constants.%assoc1] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .K = %assoc0 +// CHECK:STDOUT: .L = %assoc1 +// CHECK:STDOUT: witness = (%K, %L) +// CHECK:STDOUT: } +// 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: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%M.param_patt: %J_where.type) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// 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: +// 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)] +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%N.param_patt: %J_where.type) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %Alphabetical.ref: %Alphabetical.type = name_ref Alphabetical, file.%Alphabetical.decl [template = constants.%Alphabetical] +// CHECK:STDOUT: %N.ref: %J_where.type = name_ref N, %N.loc11_13.1 [symbolic = %N.loc11_13.2 (constants.%N)] +// CHECK:STDOUT: %Alphabetical.specific_fn.loc12_3.1: = specific_function %Alphabetical.ref, @Alphabetical(constants.%N) [symbolic = %Alphabetical.specific_fn.loc12_3.2 (constants.%Alphabetical.specific_fn)] +// CHECK:STDOUT: %Alphabetical.call: init %empty_tuple.type = call %Alphabetical.specific_fn.loc12_3.1() +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Alphabetical(constants.%M) { +// CHECK:STDOUT: %M.loc9_17.2 => constants.%M +// CHECK:STDOUT: %M.patt.loc9_17.2 => constants.%M +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Reversed(constants.%N) { +// CHECK:STDOUT: %N.loc11_13.2 => constants.%N +// CHECK:STDOUT: %N.patt.loc11_13.2 => constants.%N +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Alphabetical(constants.%N) { +// CHECK:STDOUT: %M.loc9_17.2 => constants.%N +// CHECK:STDOUT: %M.patt.loc9_17.2 => constants.%N +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Alphabetical(@Reversed.%N.loc11_13.2) { +// CHECK:STDOUT: %M.loc9_17.2 => constants.%N +// CHECK:STDOUT: %M.patt.loc9_17.2 => constants.%N +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_rewrites_mismatch_right.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %O.type: type = facet_type <@O> [template] +// CHECK:STDOUT: %Self.1: %O.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %O.type, type [template] +// CHECK:STDOUT: %assoc0.1: %assoc_type = assoc_entity element0, @O.%P [template] +// CHECK:STDOUT: %.Self: %O.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template] +// CHECK:STDOUT: %Int.type: type = fn_type @Int [template] +// CHECK:STDOUT: %Int: %Int.type = struct_value () [template] +// CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template] +// CHECK:STDOUT: %O_where.type.1: type = facet_type <@O where %impl.elem0 = %i32> [template] +// CHECK:STDOUT: %Q: %O_where.type.1 = bind_symbolic_name Q, 0 [symbolic] +// CHECK:STDOUT: %Q.patt: %O_where.type.1 = symbolic_binding_pattern Q, 0 [symbolic] +// CHECK:STDOUT: %WithInteger.type: type = fn_type @WithInteger [template] +// CHECK:STDOUT: %WithInteger: %WithInteger.type = struct_value () [template] +// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] +// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] +// CHECK:STDOUT: %O_where.type.2: type = facet_type <@O where %impl.elem0 = bool> [template] +// CHECK:STDOUT: %R: %O_where.type.2 = bind_symbolic_name R, 0 [symbolic] +// CHECK:STDOUT: %R.patt: %O_where.type.2 = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %WithBool.type: type = fn_type @WithBool [template] +// CHECK:STDOUT: %WithBool: %WithBool.type = struct_value () [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .Int = %import_ref.1 +// CHECK:STDOUT: .Bool = %import_ref.2 +// CHECK:STDOUT: .ImplicitAs = %import_ref.3 +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .O = %O.decl +// CHECK:STDOUT: .WithInteger = %WithInteger.decl +// CHECK:STDOUT: .WithBool = %WithBool.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %O.decl: type = interface_decl @O [template = constants.%O.type] {} {} +// CHECK:STDOUT: %WithInteger.decl: %WithInteger.type = fn_decl @WithInteger [template = constants.%WithInteger] { +// CHECK:STDOUT: %Q.patt.loc8_16.1: %O_where.type.1 = symbolic_binding_pattern Q, 0 [symbolic = %Q.patt.loc8_16.2 (constants.%Q.patt)] +// CHECK:STDOUT: %Q.param_patt: %O_where.type.1 = value_param_pattern %Q.patt.loc8_16.1, runtime_param [symbolic = %Q.patt.loc8_16.2 (constants.%Q.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %O.ref: type = name_ref O, file.%O.decl [template = constants.%O.type] +// CHECK:STDOUT: %.Self: %O.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %O.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %P.ref: %assoc_type = name_ref P, @O.%assoc0 [template = constants.%assoc0.1] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32] +// CHECK:STDOUT: %.loc8_33.1: type = value_of_initializer %int.make_type_signed [template = constants.%i32] +// CHECK:STDOUT: %.loc8_33.2: type = converted %int.make_type_signed, %.loc8_33.1 [template = constants.%i32] +// CHECK:STDOUT: %.loc8_22: type = where_expr %.Self [template = constants.%O_where.type.1] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc8_33.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %Q.param: %O_where.type.1 = value_param runtime_param +// CHECK:STDOUT: %Q.loc8_16.1: %O_where.type.1 = bind_symbolic_name Q, 0, %Q.param [symbolic = %Q.loc8_16.2 (constants.%Q)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %WithBool.decl: %WithBool.type = fn_decl @WithBool [template = constants.%WithBool] { +// CHECK:STDOUT: %R.patt.loc10_13.1: %O_where.type.2 = symbolic_binding_pattern R, 0 [symbolic = %R.patt.loc10_13.2 (constants.%R.patt)] +// CHECK:STDOUT: %R.param_patt: %O_where.type.2 = value_param_pattern %R.patt.loc10_13.1, runtime_param [symbolic = %R.patt.loc10_13.2 (constants.%R.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %O.ref: type = name_ref O, file.%O.decl [template = constants.%O.type] +// CHECK:STDOUT: %.Self: %O.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %O.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %P.ref: %assoc_type = name_ref P, @O.%assoc0 [template = constants.%assoc0.1] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc10_30.1: type = value_of_initializer %bool.make_type [template = bool] +// CHECK:STDOUT: %.loc10_30.2: type = converted %bool.make_type, %.loc10_30.1 [template = bool] +// CHECK:STDOUT: %.loc10_19: type = where_expr %.Self [template = constants.%O_where.type.2] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc10_30.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %R.param: %O_where.type.2 = value_param runtime_param +// CHECK:STDOUT: %R.loc10_13.1: %O_where.type.2 = bind_symbolic_name R, 0, %R.param [symbolic = %R.loc10_13.2 (constants.%R)] +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @O { +// CHECK:STDOUT: %Self: %O.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1] +// CHECK:STDOUT: %P: type = assoc_const_decl P [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %P [template = constants.%assoc0.1] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .P = %assoc0 +// CHECK:STDOUT: witness = (%P) +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: generic fn @WithInteger(%Q.loc8_16.1: %O_where.type.1) { +// CHECK:STDOUT: %Q.loc8_16.2: %O_where.type.1 = bind_symbolic_name Q, 0 [symbolic = %Q.loc8_16.2 (constants.%Q)] +// CHECK:STDOUT: %Q.patt.loc8_16.2: %O_where.type.1 = symbolic_binding_pattern Q, 0 [symbolic = %Q.patt.loc8_16.2 (constants.%Q.patt)] +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%Q.param_patt: %O_where.type.1) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: generic fn @WithBool(%R.loc10_13.1: %O_where.type.2) { +// CHECK:STDOUT: %R.loc10_13.2: %O_where.type.2 = bind_symbolic_name R, 0 [symbolic = %R.loc10_13.2 (constants.%R)] +// CHECK:STDOUT: %R.patt.loc10_13.2: %O_where.type.2 = symbolic_binding_pattern R, 0 [symbolic = %R.patt.loc10_13.2 (constants.%R.patt)] +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%R.param_patt: %O_where.type.2) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %WithInteger.ref: %WithInteger.type = name_ref WithInteger, file.%WithInteger.decl [template = constants.%WithInteger] +// CHECK:STDOUT: %R.ref: %O_where.type.2 = name_ref R, %R.loc10_13.1 [symbolic = %R.loc10_13.2 (constants.%R)] +// CHECK:STDOUT: %.loc21: %O_where.type.1 = converted %R.ref, [template = ] +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @WithInteger(constants.%Q) { +// CHECK:STDOUT: %Q.loc8_16.2 => constants.%Q +// CHECK:STDOUT: %Q.patt.loc8_16.2 => constants.%Q +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @WithBool(constants.%R) { +// CHECK:STDOUT: %R.loc10_13.2 => constants.%R +// CHECK:STDOUT: %R.patt.loc10_13.2 => constants.%R +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_rewrites_mismatch_left.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %S.type: type = facet_type <@S> [template] +// CHECK:STDOUT: %Self.1: %S.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %S.type, type [template] +// CHECK:STDOUT: %assoc0.1: %assoc_type = assoc_entity element0, @S.%T [template] +// CHECK:STDOUT: %assoc1: %assoc_type = assoc_entity element1, @S.%U [template] +// CHECK:STDOUT: %.Self: %S.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] +// CHECK:STDOUT: %S_where.type.1: type = facet_type <@S where %impl.elem0 = %empty_tuple.type> [template] +// CHECK:STDOUT: %V: %S_where.type.1 = bind_symbolic_name V, 0 [symbolic] +// CHECK:STDOUT: %V.patt: %S_where.type.1 = symbolic_binding_pattern V, 0 [symbolic] +// CHECK:STDOUT: %WithT.type: type = fn_type @WithT [template] +// CHECK:STDOUT: %WithT: %WithT.type = struct_value () [template] +// CHECK:STDOUT: %impl.elem1: type = interface_witness_access %.Self.as_wit, element1 [symbolic] +// CHECK:STDOUT: %S_where.type.2: type = facet_type <@S where %impl.elem1 = %empty_tuple.type> [template] +// CHECK:STDOUT: %W: %S_where.type.2 = bind_symbolic_name W, 0 [symbolic] +// CHECK:STDOUT: %W.patt: %S_where.type.2 = symbolic_binding_pattern W, 0 [symbolic] +// CHECK:STDOUT: %WithU.type: type = fn_type @WithU [template] +// CHECK:STDOUT: %WithU: %WithU.type = struct_value () [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .ImplicitAs = %import_ref.1 +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .S = %S.decl +// CHECK:STDOUT: .WithT = %WithT.decl +// CHECK:STDOUT: .WithU = %WithU.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %S.decl: type = interface_decl @S [template = constants.%S.type] {} {} +// CHECK:STDOUT: %WithT.decl: %WithT.type = fn_decl @WithT [template = constants.%WithT] { +// CHECK:STDOUT: %V.patt.loc9_10.1: %S_where.type.1 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_10.2 (constants.%V.patt)] +// CHECK:STDOUT: %V.param_patt: %S_where.type.1 = value_param_pattern %V.patt.loc9_10.1, runtime_param [symbolic = %V.patt.loc9_10.2 (constants.%V.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %S.ref: type = name_ref S, file.%S.decl [template = constants.%S.type] +// CHECK:STDOUT: %.Self: %S.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %S.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %T.ref: %assoc_type = name_ref T, @S.%assoc0 [template = constants.%assoc0.1] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %.loc9_28.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc9_28.2: type = converted %.loc9_28.1, constants.%empty_tuple.type [template = constants.%empty_tuple.type] +// CHECK:STDOUT: %.loc9_16: type = where_expr %.Self [template = constants.%S_where.type.1] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc9_28.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %V.param: %S_where.type.1 = value_param runtime_param +// CHECK:STDOUT: %V.loc9_10.1: %S_where.type.1 = bind_symbolic_name V, 0, %V.param [symbolic = %V.loc9_10.2 (constants.%V)] +// CHECK:STDOUT: } +// CHECK:STDOUT: %WithU.decl: %WithU.type = fn_decl @WithU [template = constants.%WithU] { +// CHECK:STDOUT: %W.patt.loc11_10.1: %S_where.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_10.2 (constants.%W.patt)] +// CHECK:STDOUT: %W.param_patt: %S_where.type.2 = value_param_pattern %W.patt.loc11_10.1, runtime_param [symbolic = %W.patt.loc11_10.2 (constants.%W.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %S.ref: type = name_ref S, file.%S.decl [template = constants.%S.type] +// CHECK:STDOUT: %.Self: %S.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %S.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %U.ref: %assoc_type = name_ref U, @S.%assoc1 [template = constants.%assoc1] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem1: type = interface_witness_access %.Self.as_wit, element1 [symbolic = constants.%impl.elem1] +// CHECK:STDOUT: %.loc11_28.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc11_28.2: type = converted %.loc11_28.1, constants.%empty_tuple.type [template = constants.%empty_tuple.type] +// CHECK:STDOUT: %.loc11_16: type = where_expr %.Self [template = constants.%S_where.type.2] { +// CHECK:STDOUT: requirement_rewrite %impl.elem1, %.loc11_28.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %W.param: %S_where.type.2 = value_param runtime_param +// CHECK:STDOUT: %W.loc11_10.1: %S_where.type.2 = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc11_10.2 (constants.%W)] +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @S { +// CHECK:STDOUT: %Self: %S.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1] +// CHECK:STDOUT: %T: type = assoc_const_decl T [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %T [template = constants.%assoc0.1] +// CHECK:STDOUT: %U: type = assoc_const_decl U [template] +// CHECK:STDOUT: %assoc1: %assoc_type = assoc_entity element1, %U [template = constants.%assoc1] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .T = %assoc0 +// CHECK:STDOUT: .U = %assoc1 +// CHECK:STDOUT: witness = (%T, %U) +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: generic fn @WithT(%V.loc9_10.1: %S_where.type.1) { +// CHECK:STDOUT: %V.loc9_10.2: %S_where.type.1 = bind_symbolic_name V, 0 [symbolic = %V.loc9_10.2 (constants.%V)] +// CHECK:STDOUT: %V.patt.loc9_10.2: %S_where.type.1 = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc9_10.2 (constants.%V.patt)] +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%V.param_patt: %S_where.type.1) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: generic fn @WithU(%W.loc11_10.1: %S_where.type.2) { +// CHECK:STDOUT: %W.loc11_10.2: %S_where.type.2 = bind_symbolic_name W, 0 [symbolic = %W.loc11_10.2 (constants.%W)] +// CHECK:STDOUT: %W.patt.loc11_10.2: %S_where.type.2 = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc11_10.2 (constants.%W.patt)] +// CHECK:STDOUT: +// CHECK:STDOUT: !definition: +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%W.param_patt: %S_where.type.2) { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %WithT.ref: %WithT.type = name_ref WithT, file.%WithT.decl [template = constants.%WithT] +// CHECK:STDOUT: %W.ref: %S_where.type.2 = name_ref W, %W.loc11_10.1 [symbolic = %W.loc11_10.2 (constants.%W)] +// CHECK:STDOUT: %.loc22: %S_where.type.1 = converted %W.ref, [template = ] +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @WithT(constants.%V) { +// CHECK:STDOUT: %V.loc9_10.2 => constants.%V +// CHECK:STDOUT: %V.patt.loc9_10.2 => constants.%V +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @WithU(constants.%W) { +// CHECK:STDOUT: %W.loc11_10.2 => constants.%W +// CHECK:STDOUT: %W.patt.loc11_10.2 => constants.%W +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_import_rewrites.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %Calls.type: type = fn_type @Calls [template] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] +// CHECK:STDOUT: %Calls: %Calls.type = struct_value () [template] +// CHECK:STDOUT: %Equal.type: type = fn_type @Equal [template] +// CHECK:STDOUT: %Equal: %Equal.type = struct_value () [template] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] +// CHECK:STDOUT: %N.type: type = facet_type <@N> [template] +// CHECK:STDOUT: %.Self.1: %N.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %.Self.as_wit.1: = facet_access_witness %.Self.1 [symbolic] +// CHECK:STDOUT: %impl.elem0.1: type = interface_witness_access %.Self.as_wit.1, element0 [symbolic] +// CHECK:STDOUT: %N_where.type: type = facet_type <@N where %impl.elem0.1 = %empty_struct_type> [template] +// 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: %Bool.type: type = fn_type @Bool [template] +// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] +// CHECK:STDOUT: %NestedRewrite.type: type = fn_type @NestedRewrite [template] +// CHECK:STDOUT: %NestedRewrite: %NestedRewrite.type = struct_value () [template] +// CHECK:STDOUT: %A.type: type = facet_type <@A> [template] +// CHECK:STDOUT: %.Self.2: %A.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %.Self.as_wit.2: = facet_access_witness %.Self.2 [symbolic] +// CHECK:STDOUT: %impl.elem0.2: type = interface_witness_access %.Self.as_wit.2, element0 [symbolic] +// CHECK:STDOUT: %A_where.type.1: type = facet_type <@A where %impl.elem0.2 = bool> [template] +// CHECK:STDOUT: %.Self.3: %A_where.type.1 = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %.Self.as_wit.3: = facet_access_witness %.Self.3 [symbolic] +// CHECK:STDOUT: %impl.elem1: type = interface_witness_access %.Self.as_wit.3, element1 [symbolic] +// CHECK:STDOUT: %A_where.type.2: type = facet_type <@A where %impl.elem1 = %empty_tuple.type and %impl.elem0.2 = bool> [template] +// CHECK:STDOUT: %D: %A_where.type.2 = bind_symbolic_name D, 0 [symbolic] +// CHECK:STDOUT: %D.patt: %A_where.type.2 = symbolic_binding_pattern D, 0 [symbolic] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template] +// CHECK:STDOUT: %Int.type: type = fn_type @Int [template] +// CHECK:STDOUT: %Int: %Int.type = struct_value () [template] +// CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %import_ref.1 = import_ref Main//equal_constraint, inst+3, unloaded +// CHECK:STDOUT: %import_ref.2: %Equal.type = import_ref Main//equal_constraint, inst+33, loaded [template = constants.%Equal] +// CHECK:STDOUT: %import_ref.3 = import_ref Main//nested_rewrites, inst+3, unloaded +// CHECK:STDOUT: %import_ref.4: %NestedRewrite.type = import_ref Main//nested_rewrites, inst+56, loaded [template = constants.%NestedRewrite] +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .Bool = %import_ref.8 +// CHECK:STDOUT: .ImplicitAs = %import_ref.9 +// CHECK:STDOUT: .Int = %import_ref.50 +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: %import_ref.5 = import_ref Main//equal_constraint, inst+5, unloaded +// CHECK:STDOUT: %import_ref.6 = import_ref Main//equal_constraint, inst+9, unloaded +// CHECK:STDOUT: %import_ref.7 = import_ref Main//equal_constraint, inst+7, unloaded +// CHECK:STDOUT: %import_ref.45 = import_ref Main//nested_rewrites, inst+5, unloaded +// CHECK:STDOUT: %import_ref.46 = import_ref Main//nested_rewrites, inst+9, unloaded +// CHECK:STDOUT: %import_ref.47 = import_ref Main//nested_rewrites, inst+12, unloaded +// CHECK:STDOUT: %import_ref.48 = import_ref Main//nested_rewrites, inst+7, unloaded +// CHECK:STDOUT: %import_ref.49 = import_ref Main//nested_rewrites, inst+11, unloaded +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .N = imports.%import_ref.1 +// CHECK:STDOUT: .Equal = imports.%import_ref.2 +// CHECK:STDOUT: .A = imports.%import_ref.3 +// CHECK:STDOUT: .NestedRewrite = imports.%import_ref.4 +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .Calls = %Calls.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %default.import = import +// CHECK:STDOUT: %Calls.decl: %Calls.type = fn_decl @Calls [template = constants.%Calls] {} {} +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @N { +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = imports.%import_ref.5 +// CHECK:STDOUT: .P = imports.%import_ref.6 +// CHECK:STDOUT: witness = (imports.%import_ref.7) +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @A { +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = imports.%import_ref.45 +// CHECK:STDOUT: .B = imports.%import_ref.46 +// CHECK:STDOUT: .C = imports.%import_ref.47 +// CHECK:STDOUT: witness = (imports.%import_ref.48, imports.%import_ref.49) +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @Calls() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %Equal.ref: %Equal.type = name_ref Equal, imports.%import_ref.2 [template = constants.%Equal] +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc19: %N_where.type = converted %bool.make_type, [template = ] +// CHECK:STDOUT: %NestedRewrite.ref: %NestedRewrite.type = name_ref NestedRewrite, imports.%import_ref.4 [template = constants.%NestedRewrite] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32] +// CHECK:STDOUT: %.loc32: %A_where.type.2 = converted %int.make_type_signed, [template = ] +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: generic fn @Equal(constants.%T: %N_where.type) { +// 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: +// CHECK:STDOUT: fn(%T.param_patt: %N_where.type); +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: generic fn @NestedRewrite(constants.%D: %A_where.type.2) { +// CHECK:STDOUT: %D: %A_where.type.2 = bind_symbolic_name D, 0 [symbolic = %D (constants.%D)] +// CHECK:STDOUT: %D.patt: %A_where.type.2 = symbolic_binding_pattern D, 0 [symbolic = %D.patt (constants.%D.patt)] +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%D.param_patt: %A_where.type.2); +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @Equal(constants.%T) { +// CHECK:STDOUT: %T => constants.%T +// CHECK:STDOUT: %T.patt => constants.%T +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @NestedRewrite(constants.%D) { +// CHECK:STDOUT: %D => constants.%D +// CHECK:STDOUT: %D.patt => constants.%D +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_check_rewrite_constraints.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %I.type: type = facet_type <@I> [template] +// CHECK:STDOUT: %Self.1: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type, type [template] +// CHECK:STDOUT: %assoc0.1: %assoc_type = assoc_entity element0, @I.%Member [template] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [template] +// CHECK:STDOUT: %X.patt: = symbolic_binding_pattern X, 0 [symbolic] +// CHECK:STDOUT: %RewriteTypeMismatch.type: type = fn_type @RewriteTypeMismatch [template] +// CHECK:STDOUT: %RewriteTypeMismatch: %RewriteTypeMismatch.type = struct_value () [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .ImplicitAs = %import_ref.1 +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .I = %I.decl +// CHECK:STDOUT: .RewriteTypeMismatch = %RewriteTypeMismatch.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {} +// CHECK:STDOUT: %RewriteTypeMismatch.decl: %RewriteTypeMismatch.type = fn_decl @RewriteTypeMismatch [template = constants.%RewriteTypeMismatch] { +// CHECK:STDOUT: %X.patt.loc16_24.1: = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc16_24.2 (constants.%X.patt)] +// CHECK:STDOUT: %X.param_patt: = value_param_pattern %X.patt.loc16_24.1, runtime_param [symbolic = %X.patt.loc16_24.2 (constants.%X.patt)] +// CHECK:STDOUT: } { +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %Member.ref: %assoc_type = name_ref Member, @I.%assoc0 [template = constants.%assoc0.1] +// CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [template = constants.%int_2] +// CHECK:STDOUT: %.loc16_46: type = converted %int_2, [template = ] +// CHECK:STDOUT: %.loc16_30: type = where_expr %.Self [template = ] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0, +// CHECK:STDOUT: } +// CHECK:STDOUT: %X.param: = value_param runtime_param +// CHECK:STDOUT: %X: = bind_symbolic_name X, 0, %X.param [template = ] +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @I { +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1] +// CHECK:STDOUT: %Member: type = assoc_const_decl Member [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %Member [template = constants.%assoc0.1] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .Member = %assoc0 +// CHECK:STDOUT: witness = (%Member) +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: generic fn @RewriteTypeMismatch(%X: ) { +// CHECK:STDOUT: %X.patt.loc16_24.2: = symbolic_binding_pattern X, 0 [symbolic = %X.patt.loc16_24.2 (constants.%X.patt)] +// CHECK:STDOUT: +// CHECK:STDOUT: fn(%X.param_patt: ); +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: specific @RewriteTypeMismatch() { +// CHECK:STDOUT: %X.patt.loc16_24.2 => +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_todo_let.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %A.type: type = facet_type <@A> [template] +// CHECK:STDOUT: %Self.1: %A.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %D: type = class_type @D [template] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template] +// CHECK:STDOUT: %interface.1: = interface_witness () [template] +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %type_where: type = facet_type [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .ImplicitAs = %import_ref.1 +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .A = %A.decl +// CHECK:STDOUT: .D = %D.decl +// CHECK:STDOUT: .B = @__global_init.%B +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %A.decl: type = interface_decl @A [template = constants.%A.type] {} {} +// CHECK:STDOUT: %D.decl: type = class_decl @D [template = constants.%D] {} {} +// CHECK:STDOUT: impl_decl @impl.1 [template] {} { +// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [template = constants.%D] +// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [template = constants.%A.type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %A.ref: type = name_ref A, %A.decl [template = constants.%A.type] +// CHECK:STDOUT: %.loc15: type = where_expr %.Self [template = constants.%type_where] { +// CHECK:STDOUT: requirement_impls %.Self.ref, %A.ref +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @A { +// CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: witness = () +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: impl @impl.1: %D.ref as %A.ref { +// CHECK:STDOUT: %interface: = interface_witness () [template = constants.%interface.1] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: witness = %interface +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: class @D { +// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [template = constants.%complete_type] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = constants.%D +// CHECK:STDOUT: complete_type_witness = %complete_type +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl [template = constants.%D] +// CHECK:STDOUT: %.loc15: %type_where = converted %D.ref, [template = ] +// CHECK:STDOUT: %B: %type_where = bind_name B, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_type_does_not_implement_where.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %E.type: type = facet_type <@E> [template] +// CHECK:STDOUT: %Self.1: %E.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %E.type, type [template] +// CHECK:STDOUT: %assoc0.1: %assoc_type = assoc_entity element0, @E.%F [template] +// CHECK:STDOUT: %assoc1: %assoc_type = assoc_entity element1, @E.%G [template] +// CHECK:STDOUT: %.Self.1: %E.type = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [template] +// CHECK:STDOUT: %.Self.as_wit.1: = facet_access_witness %.Self.1 [symbolic] +// CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit.1, element0 [symbolic] +// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] +// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] +// CHECK:STDOUT: %impl.elem1.1: type = interface_witness_access %.Self.as_wit.1, element1 [symbolic] +// CHECK:STDOUT: %E_where.type.1: type = facet_type <@E where %impl.elem1.1 = %empty_tuple.type and %impl.elem0 = bool> [template] +// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [template] +// CHECK:STDOUT: %Float.type: type = fn_type @Float [template] +// CHECK:STDOUT: %Float: %Float.type = struct_value () [template] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [template] +// CHECK:STDOUT: %E_where.type.2: type = facet_type <@E where %impl.elem0 = %empty_struct_type> [template] +// CHECK:STDOUT: %.Self.2: %E_where.type.2 = bind_symbolic_name .Self [symbolic] +// CHECK:STDOUT: %.Self.as_wit.2: = facet_access_witness %.Self.2 [symbolic] +// CHECK:STDOUT: %impl.elem1.2: type = interface_witness_access %.Self.as_wit.2, element1 [symbolic] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template] +// CHECK:STDOUT: %Int.type: type = fn_type @Int [template] +// CHECK:STDOUT: %Int: %Int.type = struct_value () [template] +// CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template] +// CHECK:STDOUT: %E_where.type.3: type = facet_type <@E where %impl.elem1.2 = %i32 and %impl.elem0 = %empty_struct_type> [template] +// CHECK:STDOUT: %E_where.type.4: type = facet_type <@E where %impl.elem0 = %impl.elem1.1> [template] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [template] { +// CHECK:STDOUT: .Bool = %import_ref.1 +// CHECK:STDOUT: .Float = %import_ref.2 +// CHECK:STDOUT: .ImplicitAs = %import_ref.3 +// CHECK:STDOUT: .Int = %import_ref.39 +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [template] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .E = %E.decl +// CHECK:STDOUT: .H = @__global_init.%H +// CHECK:STDOUT: .J = @__global_init.%J +// CHECK:STDOUT: .K = @__global_init.%K +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %E.decl: type = interface_decl @E [template = constants.%E.type] {} {} +// CHECK:STDOUT: %E.ref.loc18: type = name_ref E, %E.decl [template = constants.%E.type] +// CHECK:STDOUT: %.Self.1: %E.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref.loc18_17: %E.type = name_ref .Self, %.Self.1 [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %F.ref.loc18: %assoc_type = name_ref F, @E.%assoc0 [template = constants.%assoc0.1] +// CHECK:STDOUT: %.Self.as_wit.loc18_17: = facet_access_witness %.Self.ref.loc18_17 [symbolic = constants.%.Self.as_wit.1] +// CHECK:STDOUT: %impl.elem0.loc18: type = interface_witness_access %.Self.as_wit.loc18_17, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc18_22.1: type = value_of_initializer %bool.make_type [template = bool] +// CHECK:STDOUT: %.loc18_22.2: type = converted %bool.make_type, %.loc18_22.1 [template = bool] +// CHECK:STDOUT: %.Self.ref.loc18_31: %E.type = name_ref .Self, %.Self.1 [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %G.ref.loc18: %assoc_type = name_ref G, @E.%assoc1 [template = constants.%assoc1] +// CHECK:STDOUT: %.Self.as_wit.loc18_31: = facet_access_witness %.Self.ref.loc18_31 [symbolic = constants.%.Self.as_wit.1] +// CHECK:STDOUT: %impl.elem1.loc18: type = interface_witness_access %.Self.as_wit.loc18_31, element1 [symbolic = constants.%impl.elem1.1] +// CHECK:STDOUT: %.loc18_37.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc18_37.2: type = converted %.loc18_37.1, constants.%empty_tuple.type [template = constants.%empty_tuple.type] +// CHECK:STDOUT: %.loc18_11: type = where_expr %.Self.1 [template = constants.%E_where.type.1] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0.loc18, %.loc18_22.2 +// CHECK:STDOUT: requirement_rewrite %impl.elem1.loc18, %.loc18_37.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %E.ref.loc27: type = name_ref E, %E.decl [template = constants.%E.type] +// CHECK:STDOUT: %.Self.2: %E.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref.loc27_18: %E.type = name_ref .Self, %.Self.2 [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %F.ref.loc27: %assoc_type = name_ref F, @E.%assoc0 [template = constants.%assoc0.1] +// CHECK:STDOUT: %.Self.as_wit.loc27_18: = facet_access_witness %.Self.ref.loc27_18 [symbolic = constants.%.Self.as_wit.1] +// CHECK:STDOUT: %impl.elem0.loc27: type = interface_witness_access %.Self.as_wit.loc27_18, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %.loc27_24.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc27_24.2: type = converted %.loc27_24.1, constants.%empty_struct_type [template = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc27_12: type = where_expr %.Self.2 [template = constants.%E_where.type.2] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0.loc27, %.loc27_24.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %.Self.3: %E_where.type.2 = bind_symbolic_name .Self [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %.Self.ref.loc27_33: %E_where.type.2 = name_ref .Self, %.Self.3 [symbolic = constants.%.Self.2] +// CHECK:STDOUT: %G.ref.loc27: %assoc_type = name_ref G, @E.%assoc1 [template = constants.%assoc1] +// CHECK:STDOUT: %.Self.as_wit.loc27_33: = facet_access_witness %.Self.ref.loc27_33 [symbolic = constants.%.Self.as_wit.2] +// CHECK:STDOUT: %impl.elem1.loc27: type = interface_witness_access %.Self.as_wit.loc27_33, element1 [symbolic = constants.%impl.elem1.2] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32] +// CHECK:STDOUT: %.loc27_38.1: type = value_of_initializer %int.make_type_signed [template = constants.%i32] +// CHECK:STDOUT: %.loc27_38.2: type = converted %int.make_type_signed, %.loc27_38.1 [template = constants.%i32] +// CHECK:STDOUT: %.loc27_27: type = where_expr %.Self.3 [template = constants.%E_where.type.3] { +// CHECK:STDOUT: requirement_rewrite %impl.elem1.loc27, %.loc27_38.2 +// CHECK:STDOUT: } +// CHECK:STDOUT: %E.ref.loc35: type = name_ref E, %E.decl [template = constants.%E.type] +// CHECK:STDOUT: %.Self.4: %E.type = bind_symbolic_name .Self [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %.Self.ref.loc35_17: %E.type = name_ref .Self, %.Self.4 [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %F.ref.loc35: %assoc_type = name_ref F, @E.%assoc0 [template = constants.%assoc0.1] +// CHECK:STDOUT: %.Self.as_wit.loc35_17: = facet_access_witness %.Self.ref.loc35_17 [symbolic = constants.%.Self.as_wit.1] +// CHECK:STDOUT: %impl.elem0.loc35: type = interface_witness_access %.Self.as_wit.loc35_17, element0 [symbolic = constants.%impl.elem0] +// CHECK:STDOUT: %.Self.ref.loc35_22: %E.type = name_ref .Self, %.Self.4 [symbolic = constants.%.Self.1] +// CHECK:STDOUT: %G.ref.loc35: %assoc_type = name_ref G, @E.%assoc1 [template = constants.%assoc1] +// CHECK:STDOUT: %.Self.as_wit.loc35_27: = facet_access_witness %.Self.ref.loc35_22 [symbolic = constants.%.Self.as_wit.1] +// CHECK:STDOUT: %impl.elem1.loc35: type = interface_witness_access %.Self.as_wit.loc35_27, element1 [symbolic = constants.%impl.elem1.1] +// CHECK:STDOUT: %.loc35: type = where_expr %.Self.4 [template = constants.%E_where.type.4] { +// CHECK:STDOUT: requirement_rewrite %impl.elem0.loc35, %impl.elem1.loc35 +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @E { +// CHECK:STDOUT: %Self: %E.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.1] +// CHECK:STDOUT: %F: type = assoc_const_decl F [template] +// CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %F [template = constants.%assoc0.1] +// CHECK:STDOUT: %G: type = assoc_const_decl G [template] +// CHECK:STDOUT: %assoc1: %assoc_type = assoc_entity element1, %G [template = constants.%assoc1] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .F = %assoc0 +// CHECK:STDOUT: .G = %assoc1 +// CHECK:STDOUT: witness = (%F, %G) +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [template = constants.%int_64] +// CHECK:STDOUT: %float.make_type: init type = call constants.%Float(%int_64) [template = f64] +// CHECK:STDOUT: %.loc18: %E_where.type.1 = converted %float.make_type, [template = ] +// CHECK:STDOUT: %H: %E_where.type.1 = bind_name H, +// CHECK:STDOUT: %bool.make_type.loc27: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc27: %E_where.type.3 = converted %bool.make_type.loc27, [template = ] +// CHECK:STDOUT: %J: %E_where.type.3 = bind_name J, +// CHECK:STDOUT: %bool.make_type.loc35: init type = call constants.%Bool() [template = bool] +// CHECK:STDOUT: %.loc35: %E_where.type.4 = converted %bool.make_type.loc35, [template = ] +// CHECK:STDOUT: %K: %E_where.type.4 = bind_name K, +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/where_expr/fail_not_facet.carbon b/toolchain/check/testdata/where_expr/fail_not_facet.carbon index 3e609637e5f9b..559a46b79a3f4 100644 --- a/toolchain/check/testdata/where_expr/fail_not_facet.carbon +++ b/toolchain/check/testdata/where_expr/fail_not_facet.carbon @@ -44,10 +44,8 @@ var v: e where .x = 3; // CHECK:STDOUT: %Int.type: type = fn_type @Int [template] // CHECK:STDOUT: %Int: %Int.type = struct_value () [template] // CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template] -// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self, 0 [symbolic] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] -// CHECK:STDOUT: %T: = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %T.patt: = symbolic_binding_pattern T, 0 [symbolic] // CHECK:STDOUT: %F.type: type = fn_type @F [template] // CHECK:STDOUT: %F: %F.type = struct_value () [template] @@ -76,36 +74,32 @@ var v: e where .x = 3; // CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32] // CHECK:STDOUT: %.loc8_10.1: type = value_of_initializer %int.make_type_signed [template = constants.%i32] // CHECK:STDOUT: %.loc8_10.2: type = converted %int.make_type_signed, %.loc8_10.1 [template = constants.%i32] -// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self [template = ] +// CHECK:STDOUT: %.Self.ref: = name_ref .Self, %.Self [template = ] // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] // CHECK:STDOUT: %.loc8_14: type = where_expr %.Self [template = ] { // CHECK:STDOUT: requirement_equivalent %.Self.ref, %bool.make_type // CHECK:STDOUT: } // CHECK:STDOUT: %T.param: = value_param runtime_param -// CHECK:STDOUT: %T.loc8_6.1: = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_6.2 (constants.%T)] +// CHECK:STDOUT: %T: = bind_symbolic_name T, 0, %T.param [template = ] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @F(%T.loc8_6.1: ) { -// CHECK:STDOUT: %T.loc8_6.2: = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.2 (constants.%T)] +// CHECK:STDOUT: generic fn @F(%T: ) { // CHECK:STDOUT: %T.patt.loc8_6.2: = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%T.param_patt: ); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @F(constants.%T) { -// CHECK:STDOUT: %T.loc8_6.2 => constants.%T -// CHECK:STDOUT: %T.patt.loc8_6.2 => constants.%T +// CHECK:STDOUT: specific @F() { +// CHECK:STDOUT: %T.patt.loc8_6.2 => // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_left_where_unknown.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self, 0 [symbolic] // CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] // CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] -// CHECK:STDOUT: %U: = bind_symbolic_name U, 0 [symbolic] // CHECK:STDOUT: %U.patt: = symbolic_binding_pattern U, 0 [symbolic] // CHECK:STDOUT: %G.type: type = fn_type @G [template] // CHECK:STDOUT: %G: %G.type = struct_value () [template] @@ -130,33 +124,30 @@ var v: e where .x = 3; // CHECK:STDOUT: %U.param_patt: = value_param_pattern %U.patt.loc8_6.1, runtime_param [symbolic = %U.patt.loc8_6.2 (constants.%U.patt)] // CHECK:STDOUT: } { // CHECK:STDOUT: %NOT_DECLARED.ref: = name_ref NOT_DECLARED, [template = ] -// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self [template = ] +// CHECK:STDOUT: %.Self.ref: = name_ref .Self, %.Self [template = ] // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] // CHECK:STDOUT: %.loc8: type = where_expr %.Self [template = ] { // CHECK:STDOUT: requirement_equivalent %.Self.ref, %bool.make_type // CHECK:STDOUT: } // CHECK:STDOUT: %U.param: = value_param runtime_param -// CHECK:STDOUT: %U.loc8_6.1: = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc8_6.2 (constants.%U)] +// CHECK:STDOUT: %U: = bind_symbolic_name U, 0, %U.param [template = ] // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @G(%U.loc8_6.1: ) { -// CHECK:STDOUT: %U.loc8_6.2: = bind_symbolic_name U, 0 [symbolic = %U.loc8_6.2 (constants.%U)] +// CHECK:STDOUT: generic fn @G(%U: ) { // CHECK:STDOUT: %U.patt.loc8_6.2: = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc8_6.2 (constants.%U.patt)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%U.param_patt: ); // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @G(constants.%U) { -// CHECK:STDOUT: %U.loc8_6.2 => constants.%U -// CHECK:STDOUT: %U.patt.loc8_6.2 => constants.%U +// CHECK:STDOUT: specific @G() { +// CHECK:STDOUT: %U.patt.loc8_6.2 => // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_var.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self, 0 [symbolic] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [template] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -174,8 +165,8 @@ var v: e where .x = 3; // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %e.ref: = name_ref e, [template = ] -// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self: = bind_symbolic_name .Self [template = ] +// CHECK:STDOUT: %.Self.ref: = name_ref .Self, %.Self [template = ] // CHECK:STDOUT: %x.ref: = name_ref x, [template = ] // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [template = constants.%int_3] // CHECK:STDOUT: %.loc7: type = where_expr %.Self [template = ] { diff --git a/toolchain/check/testdata/where_expr/non_generic.carbon b/toolchain/check/testdata/where_expr/non_generic.carbon index 28b79ad924d9d..a6ac250b226d9 100644 --- a/toolchain/check/testdata/where_expr/non_generic.carbon +++ b/toolchain/check/testdata/where_expr/non_generic.carbon @@ -16,18 +16,18 @@ fn NotGenericF(U: I where .T == i32) {} // CHECK:STDOUT: --- non_generic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %I.type.1: type = facet_type <@I> [template] -// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic] -// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type.1, type [template] +// CHECK:STDOUT: %I.type: type = facet_type <@I> [template] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: %assoc_type: type = assoc_entity_type %I.type, type [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, @I.%T [template] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self [symbolic] // CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template] // CHECK:STDOUT: %Int.type: type = fn_type @Int [template] // CHECK:STDOUT: %Int: %Int.type = struct_value () [template] // CHECK:STDOUT: %i32: type = int_type signed, %int_32 [template] -// CHECK:STDOUT: %I.type.2: type = facet_type <@I where TODO> [template] +// CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [template] // CHECK:STDOUT: %NotGenericF.type: type = fn_type @NotGenericF [template] // CHECK:STDOUT: %NotGenericF: %NotGenericF.type = struct_value () [template] // CHECK:STDOUT: } @@ -47,29 +47,29 @@ fn NotGenericF(U: I where .T == i32) {} // CHECK:STDOUT: .NotGenericF = %NotGenericF.decl // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type.1] {} {} +// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {} // CHECK:STDOUT: %NotGenericF.decl: %NotGenericF.type = fn_decl @NotGenericF [template = constants.%NotGenericF] { -// CHECK:STDOUT: %U.patt: %I.type.2 = binding_pattern U -// CHECK:STDOUT: %U.param_patt: %I.type.2 = value_param_pattern %U.patt, runtime_param0 +// CHECK:STDOUT: %U.patt: %I_where.type = binding_pattern U +// CHECK:STDOUT: %U.param_patt: %I_where.type = value_param_pattern %U.patt, runtime_param0 // CHECK:STDOUT: } { -// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type.1] -// CHECK:STDOUT: %.Self: %I.type.1 = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] -// CHECK:STDOUT: %.Self.ref: %I.type.1 = name_ref .Self, %.Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [template = constants.%I.type] +// CHECK:STDOUT: %.Self: %I.type = bind_symbolic_name .Self [symbolic = constants.%.Self] +// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self [symbolic = constants.%.Self] // CHECK:STDOUT: %T.ref: %assoc_type = name_ref T, @I.%assoc0 [template = constants.%assoc0] // CHECK:STDOUT: %.Self.as_wit: = facet_access_witness %.Self.ref [symbolic = constants.%.Self.as_wit] // CHECK:STDOUT: %impl.elem0: type = interface_witness_access %.Self.as_wit, element0 [symbolic = constants.%impl.elem0] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [template = constants.%int_32] // CHECK:STDOUT: %int.make_type_signed: init type = call constants.%Int(%int_32) [template = constants.%i32] -// CHECK:STDOUT: %.loc14: type = where_expr %.Self [template = constants.%I.type.2] { +// CHECK:STDOUT: %.loc14: type = where_expr %.Self [template = constants.%I_where.type] { // CHECK:STDOUT: requirement_equivalent %impl.elem0, %int.make_type_signed // CHECK:STDOUT: } -// CHECK:STDOUT: %U.param: %I.type.2 = value_param runtime_param0 -// CHECK:STDOUT: %U: %I.type.2 = bind_name U, %U.param +// CHECK:STDOUT: %U.param: %I_where.type = value_param runtime_param0 +// CHECK:STDOUT: %U: %I_where.type = bind_name U, %U.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { -// CHECK:STDOUT: %Self: %I.type.1 = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] // CHECK:STDOUT: %T: type = assoc_const_decl T [template] // CHECK:STDOUT: %assoc0: %assoc_type = assoc_entity element0, %T [template = constants.%assoc0] // CHECK:STDOUT: @@ -79,7 +79,7 @@ fn NotGenericF(U: I where .T == i32) {} // CHECK:STDOUT: witness = (%T) // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @NotGenericF(%U.param_patt: %I.type.2) { +// CHECK:STDOUT: fn @NotGenericF(%U.param_patt: %I_where.type) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } diff --git a/toolchain/sem_ir/BUILD b/toolchain/sem_ir/BUILD index e64d5e4f984ed..1469ee022b94e 100644 --- a/toolchain/sem_ir/BUILD +++ b/toolchain/sem_ir/BUILD @@ -71,6 +71,7 @@ cc_library( "builtin_function_kind.cpp", "class.cpp", "constant.cpp", + "facet_type_info.cpp", "file.cpp", "function.cpp", "generic.cpp", diff --git a/toolchain/sem_ir/constant.cpp b/toolchain/sem_ir/constant.cpp index e39c259149f96..024492ada7d6d 100644 --- a/toolchain/sem_ir/constant.cpp +++ b/toolchain/sem_ir/constant.cpp @@ -8,21 +8,22 @@ namespace Carbon::SemIR { -auto ConstantStore::GetOrAdd(Inst inst, bool is_symbolic) -> ConstantId { +auto ConstantStore::GetOrAdd(Inst inst, PhaseKind phase) -> ConstantId { auto result = map_.Insert(inst, [&] { auto inst_id = sem_ir_->insts().AddInNoBlock(LocIdAndInst::NoLoc(inst)); ConstantId const_id = ConstantId::Invalid; - if (is_symbolic) { + if (phase == IsTemplate) { + const_id = SemIR::ConstantId::ForTemplateConstant(inst_id); + } else { // The instruction in the constants store is an abstract symbolic // constant, not associated with any particular generic. - auto symbolic_constant = - SymbolicConstant{.inst_id = inst_id, - .generic_id = GenericId::Invalid, - .index = GenericInstIndex::Invalid}; + SymbolicConstant symbolic_constant = { + .inst_id = inst_id, + .generic_id = GenericId::Invalid, + .index = GenericInstIndex::Invalid, + .period_self_only = (phase == IsPeriodSelfSymbolic)}; const_id = sem_ir_->constant_values().AddSymbolicConstant(symbolic_constant); - } else { - const_id = SemIR::ConstantId::ForTemplateConstant(inst_id); } sem_ir_->constant_values().Set(inst_id, const_id); constants_.push_back(inst_id); @@ -30,7 +31,7 @@ auto ConstantStore::GetOrAdd(Inst inst, bool is_symbolic) -> ConstantId { }); CARBON_CHECK(result.value() != ConstantId::Invalid); CARBON_CHECK( - result.value().is_symbolic() == is_symbolic, + result.value().is_symbolic() == (phase != IsTemplate), "Constant {0} registered as both symbolic and template constant.", inst); return result.value(); } diff --git a/toolchain/sem_ir/constant.h b/toolchain/sem_ir/constant.h index e8a4c11ae1047..2d7e74b83484f 100644 --- a/toolchain/sem_ir/constant.h +++ b/toolchain/sem_ir/constant.h @@ -24,10 +24,13 @@ struct SymbolicConstant : Printable { // The index of this symbolic constant within the generic's list of symbolic // constants, or invalid if `generic_id` is invalid. GenericInstIndex index; + // True if this is constant is symbolic just because it uses `.Self`. + bool period_self_only; auto Print(llvm::raw_ostream& out) const -> void { out << "{inst: " << inst_id << ", generic: " << generic_id - << ", index: " << index << "}"; + << ", index: " << index + << ", .Self: " << (period_self_only ? "true" : "false") << "}"; } }; @@ -102,6 +105,13 @@ class ConstantValueStore { return symbolic_constants_[const_id.symbolic_index()]; } + // Returns true for symbolic constants other than those that are only symbolic + // because they depend on `.Self`. + auto DependsOnGenericParameter(ConstantId const_id) const -> bool { + return const_id.is_symbolic() && + !GetSymbolicConstant(const_id).period_self_only; + } + // Collects memory usage of members. auto CollectMemUsage(MemUsage& mem_usage, llvm::StringRef label) const -> void { @@ -148,9 +158,10 @@ class ConstantStore { // Adds a new constant instruction, or gets the existing constant with this // value. Returns the ID of the constant. // - // This updates `sem_ir.insts()` and `sem_ir.constant_values()` if the + // This updates `sem_ir->insts()` and `sem_ir->constant_values()` if the // constant is new. - auto GetOrAdd(Inst inst, bool is_symbolic) -> ConstantId; + enum PhaseKind : uint8_t { IsTemplate, IsPeriodSelfSymbolic, IsSymbolic }; + auto GetOrAdd(Inst inst, PhaseKind phase) -> ConstantId; // Collects memory usage of members. auto CollectMemUsage(MemUsage& mem_usage, llvm::StringRef label) const diff --git a/toolchain/sem_ir/entity_name.h b/toolchain/sem_ir/entity_name.h index d4a6e0eed9bab..1955ca2824138 100644 --- a/toolchain/sem_ir/entity_name.h +++ b/toolchain/sem_ir/entity_name.h @@ -27,7 +27,9 @@ struct EntityName : public Printable { NameId name_id; // The parent scope. NameScopeId parent_scope_id; - // The index for a compile-time binding. Invalid for a runtime binding. + // The index for a compile-time binding. Invalid for a runtime binding, or + // for a symbolic binding, like `.Self`, that does not correspond to a generic + // parameter (and therefore has no index). CompileTimeBindIndex bind_index; }; diff --git a/toolchain/sem_ir/facet_type_info.cpp b/toolchain/sem_ir/facet_type_info.cpp new file mode 100644 index 0000000000000..667c3070a88b9 --- /dev/null +++ b/toolchain/sem_ir/facet_type_info.cpp @@ -0,0 +1,49 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include "toolchain/sem_ir/facet_type_info.h" + +namespace Carbon::SemIR { + +template +static auto SortAndDeduplicate(VecT* vec) -> void { + std::sort(vec->begin(), vec->end()); + vec->erase(std::unique(vec->begin(), vec->end()), vec->end()); +} + +auto FacetTypeInfo::Canonicalize() -> void { + SortAndDeduplicate(&impls_constraints); + SortAndDeduplicate(&rewrite_constraints); +} + +auto FacetTypeInfo::Print(llvm::raw_ostream& out) const -> void { + out << "{"; + llvm::ListSeparator outer_sep("; "); + + if (!impls_constraints.empty()) { + out << outer_sep << "impls interface: "; + llvm::ListSeparator sep; + for (ImplsConstraint req : impls_constraints) { + out << sep << req.interface_id; + if (req.specific_id.is_valid()) { + out << "(" << req.specific_id << ")"; + } + } + } + + if (!rewrite_constraints.empty()) { + out << outer_sep << "rewrites: "; + llvm::ListSeparator sep; + for (RewriteConstraint req : rewrite_constraints) { + out << sep << req.lhs_const_id << "=" << req.rhs_const_id; + } + } + + if (other_requirements) { + out << outer_sep << "+ TODO requirements"; + } + out << "}"; +} + +} // namespace Carbon::SemIR diff --git a/toolchain/sem_ir/facet_type_info.h b/toolchain/sem_ir/facet_type_info.h index 823deac25c67c..e1da12769b6d7 100644 --- a/toolchain/sem_ir/facet_type_info.h +++ b/toolchain/sem_ir/facet_type_info.h @@ -21,6 +21,13 @@ struct FacetTypeInfo : Printable { // `ImplsConstraint` holds the interfaces this facet type requires. struct ImplsConstraint { + // TODO: extend this so it can represent named constraint requirements + // and requirements on members, not just `.Self`. + // TODO: Add whether this is a lookup context. Those that are should sort + // first for easy access. Right now, all are assumed to be lookup contexts. + InterfaceId interface_id; + SpecificId specific_id; + auto operator==(const ImplsConstraint& rhs) const -> bool { return interface_id == rhs.interface_id && specific_id == rhs.specific_id; } @@ -29,38 +36,42 @@ struct FacetTypeInfo : Printable { return std::tie(interface_id.index, specific_id.index) <=> std::tie(rhs.interface_id.index, rhs.specific_id.index); } - - // TODO: extend this so it can represent named constraint requirements - // and requirements on members, not just `.Self`. - // TODO: Add whether this is a lookup context. Those that are should sort - // first for easy access. Right now, all are assumed to be lookup contexts. - InterfaceId interface_id; - SpecificId specific_id; }; llvm::SmallVector impls_constraints; - // TODO: Add rewrite constraints. + + // Rewrite constraints of the form `.T = U` + struct RewriteConstraint { + ConstantId lhs_const_id; + ConstantId rhs_const_id; + + auto operator==(const RewriteConstraint& rhs) const -> bool { + return lhs_const_id == rhs.lhs_const_id && + rhs_const_id == rhs.rhs_const_id; + } + // Canonically ordered by the numerical ids. + auto operator<=>(const RewriteConstraint& rhs) const + -> std::strong_ordering { + return std::tie(lhs_const_id.index, rhs_const_id.index) <=> + std::tie(rhs.lhs_const_id.index, rhs.rhs_const_id.index); + } + }; + llvm::SmallVector rewrite_constraints; + // TODO: Add same-type constraints. - // TODO: Remove `requirement_block_id`. - InstBlockId requirement_block_id; + // TODO: Remove once all requirements are supported. + bool other_requirements; // TODO: Add optional resolved facet type. - auto Print(llvm::raw_ostream& out) const -> void { - out << "{impls interface: "; - llvm::ListSeparator sep; - for (ImplsConstraint req : impls_constraints) { - out << sep << req.interface_id; - if (req.specific_id.is_valid()) { - out << "(" << req.specific_id << ")"; - } - } - out << "; requirements: " << requirement_block_id << "}"; - } + // Sorts and deduplicates constraints. + auto Canonicalize() -> void; + + auto Print(llvm::raw_ostream& out) const -> void; // TODO: Update callers to be able to deal with facet types that aren't a // single interface and then remove this function. auto TryAsSingleInterface() const -> std::optional { - // We are ignoring requirement_block_id for the moment since nothing uses it - // yet. + // We are ignoring other requirements for the moment, since this function is + // (hopefully) temporary. if (impls_constraints.size() == 1) { return impls_constraints.front(); } @@ -69,7 +80,8 @@ struct FacetTypeInfo : Printable { auto operator==(const FacetTypeInfo& rhs) const -> bool { return impls_constraints == rhs.impls_constraints && - requirement_block_id == rhs.requirement_block_id; + rewrite_constraints == rhs.rewrite_constraints && + other_requirements == rhs.other_requirements; } }; @@ -78,7 +90,8 @@ inline auto CarbonHashValue(const FacetTypeInfo& value, uint64_t seed) -> HashCode { Hasher hasher(seed); hasher.HashSizedBytes(llvm::ArrayRef(value.impls_constraints)); - hasher.HashRaw(value.requirement_block_id); + hasher.HashSizedBytes(llvm::ArrayRef(value.rewrite_constraints)); + hasher.HashRaw(value.other_requirements); return static_cast(hasher); } diff --git a/toolchain/sem_ir/formatter.cpp b/toolchain/sem_ir/formatter.cpp index f5ec0b805d0bc..bd6d6a35373f2 100644 --- a/toolchain/sem_ir/formatter.cpp +++ b/toolchain/sem_ir/formatter.cpp @@ -1055,9 +1055,19 @@ class FormatterImpl { } } - if (info.requirement_block_id.is_valid()) { + if (info.other_requirements || !info.rewrite_constraints.empty()) { // TODO: Include specifics. - out_ << " where TODO"; + out_ << " where "; + llvm::ListSeparator and_sep(" and "); + for (auto rewrite : info.rewrite_constraints) { + out_ << and_sep; + FormatConstant(rewrite.lhs_const_id); + out_ << " = "; + FormatConstant(rewrite.rhs_const_id); + } + if (info.other_requirements) { + out_ << and_sep << "TODO"; + } } out_ << ">"; } diff --git a/toolchain/sem_ir/inst_namer.cpp b/toolchain/sem_ir/inst_namer.cpp index 66607bc0eec1a..74542afbd368c 100644 --- a/toolchain/sem_ir/inst_namer.cpp +++ b/toolchain/sem_ir/inst_namer.cpp @@ -552,16 +552,15 @@ auto InstNamer::CollectNamesInBlock(ScopeId scope_id, case CARBON_KIND(FacetType inst): { const auto& facet_type_info = sem_ir_.facet_types().Get(inst.facet_type_id); + bool has_where = facet_type_info.other_requirements || + !facet_type_info.rewrite_constraints.empty(); if (auto interface = facet_type_info.TryAsSingleInterface()) { const auto& interface_info = sem_ir_.interfaces().Get(interface->interface_id); - add_inst_name_id(interface_info.name_id, ".type"); + add_inst_name_id(interface_info.name_id, + has_where ? "_where.type" : ".type"); } else if (facet_type_info.impls_constraints.empty()) { - if (facet_type_info.requirement_block_id.is_valid()) { - add_inst_name("type_where"); - } else { - add_inst_name("type"); - } + add_inst_name(has_where ? "type_where" : "type"); } else { add_inst_name("facet_type"); } diff --git a/toolchain/sem_ir/stringify_type.cpp b/toolchain/sem_ir/stringify_type.cpp index 56759d303f507..5b08e302810a7 100644 --- a/toolchain/sem_ir/stringify_type.cpp +++ b/toolchain/sem_ir/stringify_type.cpp @@ -212,11 +212,31 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id) case CARBON_KIND(FacetType inst): { const FacetTypeInfo& facet_type_info = sem_ir.facet_types().Get(inst.facet_type_id); - // TODO: Also output other restrictions from facet_type_info. - if (facet_type_info.requirement_block_id.is_valid()) { - step_stack.PushString(" where..."); + // Output `where` restrictions. + bool some_where = false; + if (facet_type_info.other_requirements) { + step_stack.PushString("..."); + some_where = true; + } + for (auto rewrite : + llvm::reverse(facet_type_info.rewrite_constraints)) { + if (some_where) { + step_stack.PushString(" and"); + } + step_stack.PushInstId( + sem_ir.constant_values().GetInstId(rewrite.rhs_const_id)); + step_stack.PushString(" = "); + step_stack.PushInstId( + sem_ir.constant_values().GetInstId(rewrite.lhs_const_id)); + step_stack.PushString(" "); + some_where = true; + } + // TODO: Other restrictions from facet_type_info. + if (some_where) { + step_stack.PushString(" where"); } + // Output interface requirements. if (facet_type_info.impls_constraints.empty()) { step_stack.PushString("type"); break; @@ -271,6 +291,15 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id) << ">"; break; } + case CARBON_KIND(ImportRefUnloaded inst): { + if (inst.entity_name_id.is_valid()) { + auto name_id = sem_ir.entity_names().Get(inst.entity_name_id).name_id; + out << sem_ir.names().GetFormatted(name_id); + } else { + out << ""; + } + break; + } case CARBON_KIND(IntType inst): { if (auto width_value = sem_ir.insts().TryGetAs(inst.bit_width_id)) { @@ -283,6 +312,58 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id) } break; } + case CARBON_KIND(InterfaceWitnessAccess inst): { + auto witness_inst_id = + sem_ir.constant_values().GetConstantInstId(inst.witness_id); + auto witness = + sem_ir.insts().GetAs(witness_inst_id); + auto witness_type_id = + sem_ir.insts().Get(witness.facet_value_inst_id).type_id(); + auto facet_type = sem_ir.types().GetAs(witness_type_id); + step_stack.PushString(")"); + // TODO: Support != 1 interface better. + if (auto impls_constraint = sem_ir.facet_types() + .Get(facet_type.facet_type_id) + .TryAsSingleInterface()) { + const auto& interface = + sem_ir.interfaces().Get(impls_constraint->interface_id); + auto entities = + sem_ir.inst_blocks().Get(interface.associated_entities_id); + size_t index = inst.index.index; + CARBON_CHECK(index < entities.size(), "Access out of bounds."); + auto entity_inst_id = entities[index]; + if (auto associated_const = + sem_ir.insts().TryGetAs( + entity_inst_id)) { + step_stack.PushNameId(associated_const->name_id); + } else if (auto function_decl = sem_ir.insts().TryGetAs( + entity_inst_id)) { + const auto& function = + sem_ir.functions().Get(function_decl->function_id); + step_stack.PushNameId(function.name_id); + } else { + step_stack.PushInstId(entity_inst_id); + } + step_stack.PushString("."); + step_stack.PushNameId(interface.name_id); + step_stack.PushString(".("); + } else { + step_stack.PushTypeId(witness_type_id); + step_stack.PushString(".(TODO: "); + } + + bool period_self = false; + if (auto sym_name = sem_ir.insts().TryGetAs( + witness.facet_value_inst_id)) { + auto name_id = + sem_ir.entity_names().Get(sym_name->entity_name_id).name_id; + period_self = (name_id == SemIR::NameId::PeriodSelf); + } + if (!period_self) { + step_stack.PushInstId(witness.facet_value_inst_id); + } + break; + } case CARBON_KIND(IntValue inst): { sem_ir.ints().Get(inst.int_id).print(out, /*isSigned=*/true); break; @@ -343,15 +424,6 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id) step_stack.PushTypeId(inst.class_type_id); break; } - case CARBON_KIND(WhereExpr inst): { - out << ""); - TypeId type_id = sem_ir.insts().Get(inst.period_self_id).type_id(); - step_stack.PushTypeId(type_id); - // TODO: Also output restrictions from the inst block - // inst.requirements_id. - break; - } case AdaptDecl::Kind: case AddrOf::Kind: case AddrPattern::Kind: @@ -384,11 +456,9 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id) case ImplDecl::Kind: case ImportDecl::Kind: case ImportRefLoaded::Kind: - case ImportRefUnloaded::Kind: case InitializeFrom::Kind: case InterfaceDecl::Kind: case InterfaceWitness::Kind: - case InterfaceWitnessAccess::Kind: case Namespace::Kind: case OutParam::Kind: case OutParamPattern::Kind: @@ -420,6 +490,7 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id) case ValueParam::Kind: case ValueParamPattern::Kind: case VarStorage::Kind: + case WhereExpr::Kind: // We don't know how to print this instruction, but it might have a // constant value that we can print. auto const_inst_id =