From c74bb933d2ede623539869ca1e7f689ba822bbc3 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 9 Jul 2026 16:38:56 -0400 Subject: [PATCH] Avoid impl lookup cycles from evaluating lookup instructions inside an impl decl (#7454) `LookupImplWitness` instructions inside the impl declaration can't use the impl they are apart of. Previously we had an heuristic in eval which would try to prevent finding the impl for a lookup from inside that impl. But it breaks when the `.Self` is replaced in a generic impl with a symbolic, and then that symbolic is replaced in a specific. The specific's decl block contains that `LookupImplWitness` instruction and it tries to use the impl it came from. This causes the same specific to be formed again, but now it exists, so it's used as-is but it has no decl block yet, and so we crash. Now we ban an impl while we resolve its specific, both deduction of its arguments and from any other substitution. The prevents instructions from inside the impl (which are evaluated when resolving the specific) from finding their own impl. We do so by adding the ImplId to a stack on the Context, and then skipping such impls when looking for candidates during eval. This fixes a crash, which was demonstrated by the new test being added. It also makes another todo test pass. There's a whole lot of other semir churn, which seems to be mostly reordering of constants. There are some fingerprint changes in constants, but it appears they are the same canonical instructions, so they don't represent a behaviour change. For example in `toolchain/check/testdata/for/actual.carbon` the `%N.patt` constant has been given its fingerprint suffix now as `%N.patt.aa5`. But they are both this instruction, so it is just a formatting change: ``` inst6100001A: {kind: SymbolicBindingPattern, arg0: entity_name61000002, type: type(inst61000018)} - name: `N` - type: type(inst61000018): ; {kind: PatternType, arg0: inst(IntLiteralType), type: type(TypeType)} (concrete) - value: symbolic_constant61000001 ``` --- toolchain/check/context.h | 9 + toolchain/check/deduce.cpp | 3 +- toolchain/check/deduce.h | 2 +- toolchain/check/generic.cpp | 15 + toolchain/check/impl.cpp | 6 +- toolchain/check/impl_lookup.cpp | 53 +- toolchain/check/impl_lookup.h | 2 +- .../check/testdata/facet/period_self.carbon | 9 +- .../facet/validate_rewrite_constraints.carbon | 2 +- toolchain/check/testdata/for/actual.carbon | 290 +++--- .../testdata/impl/impl_assoc_const.carbon | 21 + .../testdata/interop/cpp/range_for.carbon | 860 +++++++++--------- toolchain/lower/testdata/for/bindings.carbon | 4 +- .../lower/testdata/for/break_continue.carbon | 4 +- toolchain/lower/testdata/for/for.carbon | 4 +- 15 files changed, 659 insertions(+), 625 deletions(-) diff --git a/toolchain/check/context.h b/toolchain/check/context.h index bb7113232edb..14607723317b 100644 --- a/toolchain/check/context.h +++ b/toolchain/check/context.h @@ -291,6 +291,10 @@ class Context { return where_stack_; } + auto forbidden_impls() -> llvm::SmallVector& { + return forbidden_impls_; + } + // Data about a form expression. // // TODO: consider moving this out of Context. @@ -579,6 +583,11 @@ class Context { // being checked so that they can be used by later constraints. llvm::SmallVector where_stack_; + // Impls that cannot be used in impl lookup. This prevents cycles where a + // `LookupImplWitness` instruction inside the impl decl should not be able to + // find the containing impl decl. + llvm::SmallVector forbidden_impls_; + // Declared return form for the in-progress function declaration, if any. std::optional return_form_expr_; diff --git a/toolchain/check/deduce.cpp b/toolchain/check/deduce.cpp index ea0fc8dbc267..3d65cc15fd61 100644 --- a/toolchain/check/deduce.cpp +++ b/toolchain/check/deduce.cpp @@ -647,9 +647,10 @@ auto DeduceGenericCallArguments( } auto DeduceImplArguments(Context& context, SemIR::LocId loc_id, - const SemIR::Impl& impl, SemIR::ConstantId self_id, + SemIR::ImplId impl_id, SemIR::ConstantId self_id, SemIR::SpecificId constraint_specific_id) -> SemIR::SpecificId { + const auto& impl = context.impls().Get(impl_id); DeductionContext deduction(&context, loc_id, impl.generic_id, /*enclosing_specific_id=*/SemIR::SpecificId::None, /*diagnose=*/false); diff --git a/toolchain/check/deduce.h b/toolchain/check/deduce.h index a8bd70a17688..5e661377de16 100644 --- a/toolchain/check/deduce.h +++ b/toolchain/check/deduce.h @@ -23,7 +23,7 @@ auto DeduceGenericCallArguments(Context& context, SemIR::LocId loc_id, // Deduces the impl arguments to use in a use of a parameterized impl. Returns // `None` if deduction fails. auto DeduceImplArguments(Context& context, SemIR::LocId loc_id, - const SemIR::Impl& impl, SemIR::ConstantId self_id, + SemIR::ImplId impl_id, SemIR::ConstantId self_id, SemIR::SpecificId constraint_specific_id) -> SemIR::SpecificId; diff --git a/toolchain/check/generic.cpp b/toolchain/check/generic.cpp index 0c204984018c..a0204f5b6405 100644 --- a/toolchain/check/generic.cpp +++ b/toolchain/check/generic.cpp @@ -666,9 +666,24 @@ auto ResolveSpecificDecl(Context& context, SemIR::LocId loc_id, // recursively resolve the same specific. specific.decl_block_id = SemIR::InstBlockId::Empty; + // When resolving a specific for an `impl`, we will rebuild and evaluate any + // `LookupImplWitness` instructions in the `impl` declaration. These lookups + // should not find the `impl` that contains them or they become cyclical. + const auto& generic = context.generics().Get(specific.generic_id); + bool is_impl_decl = false; + if (auto decl = + context.insts().TryGetAs(generic.decl_id)) { + is_impl_decl = true; + context.forbidden_impls().push_back(decl->impl_id); + } + std::tie(specific.decl_block_id, specific.decl_block_has_error) = TryEvalBlockForSpecific(context, loc_id, specific_id, SemIR::GenericInstIndex::Region::Declaration); + + if (is_impl_decl) { + context.forbidden_impls().pop_back(); + } } } diff --git a/toolchain/check/impl.cpp b/toolchain/check/impl.cpp index 576227382879..04e9a49a4f9a 100644 --- a/toolchain/check/impl.cpp +++ b/toolchain/check/impl.cpp @@ -206,6 +206,7 @@ static auto VerifyImplRedecl(Context& context, const SemIR::Impl& new_impl, // false is returned. static auto VerifyAllGenericBindingsUsed(Context& context, SemIR::LocId loc_id, SemIR::LocId implicit_params_loc_id, + SemIR::ImplId impl_id, SemIR::Impl& impl) -> bool { if (impl.witness_id == SemIR::ErrorInst::InstId) { return true; @@ -225,7 +226,7 @@ static auto VerifyAllGenericBindingsUsed(Context& context, SemIR::LocId loc_id, } auto deduced_specific_id = DeduceImplArguments( - context, loc_id, impl, context.constant_values().Get(impl.self_id), + context, loc_id, impl_id, context.constant_values().Get(impl.self_id), impl.interface.specific_id); if (deduced_specific_id.has_value()) { // Deduction succeeded, all bindings were used. @@ -376,7 +377,8 @@ auto AddImpl(Context& context, const SemIR::Impl& impl, // its generic bindings, and will never be matched. This should be // diagnossed to the user. if (!VerifyAllGenericBindingsUsed(context, SemIR::LocId(impl_decl_id), - implicit_params_loc_id, stored_impl)) { + implicit_params_loc_id, impl_id, + stored_impl)) { FillImplWitnessWithErrors(context, stored_impl); } diff --git a/toolchain/check/impl_lookup.cpp b/toolchain/check/impl_lookup.cpp index d27e413229f7..ee7bf5f16af4 100644 --- a/toolchain/check/impl_lookup.cpp +++ b/toolchain/check/impl_lookup.cpp @@ -256,15 +256,15 @@ static auto TreatImplAsFinal(Context& context, const SemIR::Impl& impl) static auto TryGetSpecificWitnessIdForImpl( Context& context, SemIR::LocId loc_id, SemIR::ConstantId query_self_const_id, - const SemIR::SpecificInterface& interface, const SemIR::Impl& impl) - -> SemIR::ConstantId { + const SemIR::SpecificInterface& interface, SemIR::ImplId impl_id, + const SemIR::Impl& impl) -> SemIR::ConstantId { // The impl may have generic arguments, in which case we need to deduce them // to find what they are given the specific type and interface query. We use // that specific to map values in the impl to the deduced values. auto specific_id = SemIR::SpecificId::None; if (impl.generic_id.has_value()) { specific_id = DeduceImplArguments( - context, loc_id, impl, query_self_const_id, interface.specific_id); + context, loc_id, impl_id, query_self_const_id, interface.specific_id); if (!specific_id.has_value()) { return SemIR::ConstantId::None; } @@ -672,6 +672,7 @@ class ImportImplFilter { } // namespace struct CandidateImpl { + SemIR::ImplId impl_id; const SemIR::Impl* impl; // Used for sorting the candidates to find the most-specialized match. @@ -717,13 +718,17 @@ static auto CollectCandidateImplsForQuery( for (auto [id, impl] : context.impls().enumerate()) { CARBON_CHECK(impl.witness_id.has_value()); + // If the impl's interface_id differs from the query, then this impl can + // not possibly provide the queried interface. + if (impl.interface.interface_id != query_specific_interface.interface_id) { + continue; + } + if (final_only && !TreatImplAsFinal(context, impl)) { continue; } - // If the impl's interface_id differs from the query, then this impl can - // not possibly provide the queried interface. - if (impl.interface.interface_id != query_specific_interface.interface_id) { + if (llvm::is_contained(context.forbidden_impls(), id)) { continue; } @@ -756,7 +761,7 @@ static auto CollectCandidateImplsForQuery( continue; } - candidates.impls.push_back({&impl, std::move(*type_structure)}); + candidates.impls.push_back({id, &impl, std::move(*type_structure)}); } auto compare = [](auto& lhs, auto& rhs) -> bool { @@ -911,11 +916,13 @@ static auto FindNonFinalWitness( req_specific_interface); for (const auto& candidate : candidates.impls) { + auto impl_id = candidate.impl_id; const auto& impl = *candidate.impl; context.impl_lookup_stack().back().impl_loc = impl.definition_id; - auto witness_id = TryGetSpecificWitnessIdForImpl( - context, loc_id, req_self_const_id, req_specific_interface, impl); + auto witness_id = + TryGetSpecificWitnessIdForImpl(context, loc_id, req_self_const_id, + req_specific_interface, impl_id, impl); if (witness_id.has_value()) { // We looked for errors in the query self and facet type already, and // we're not dealing with monomorphizations here. @@ -1179,26 +1186,6 @@ auto EvalLookupSingleFinalWitness(Context& context, SemIR::LocId loc_id, } } - // If the query is on `.Self` and looking for the same interface as `.Self` - // provides, do not look for a witness in monomorphization - a non-final - // witness will be found from the facet type. This happens inside an `impl` - // declaration, and we must avoid finding that same `impl` and trying to - // deduce `.Self` for it, as that results in a specific declaration for the - // `impl` which evaluates this lookup again, producing a cycle. - // - // If the query is for `.Self` and for the facet type of `.Self`, then there - // is no final witness yet. - if (auto bind = context.insts().TryGetAs( - eval_query.query_self_inst_id)) { - const auto& entity = context.entity_names().Get(bind->entity_name_id); - if (entity.name_id == SemIR::NameId::PeriodSelf) { - if (FacetTypeIsSingleInterface(context, bind->type_id, - query_specific_interface)) { - return SemIR::ConstantId::None; - } - } - } - // Check to see if this result is in the cache. But skip the cache if we're // re-checking a poisoned result and need to redo the lookup. auto impl_lookup_cache_key = Context::ImplLookupCacheKey{ @@ -1261,6 +1248,7 @@ auto EvalLookupSingleFinalWitness(Context& context, SemIR::LocId loc_id, // Only consider candidates when a custom witness didn't apply. if (!used_custom_witness) { for (const auto& candidate : candidates.impls) { + auto impl_id = candidate.impl_id; const auto& impl = *candidate.impl; // In monomorphization, while resolving a specific, there may be no stack @@ -1271,7 +1259,8 @@ auto EvalLookupSingleFinalWitness(Context& context, SemIR::LocId loc_id, } auto witness_id = TryGetSpecificWitnessIdForImpl( - context, loc_id, query_self_const_id, query_specific_interface, impl); + context, loc_id, query_self_const_id, query_specific_interface, + impl_id, impl); if (witness_id.has_value()) { PoisonImplLookupQuery(context, loc_id, mode, eval_query, witness_id, impl); @@ -1308,13 +1297,13 @@ auto EvalLookupSingleFinalWitness(Context& context, SemIR::LocId loc_id, auto LookupMatchesImpl(Context& context, SemIR::LocId loc_id, SemIR::ConstantId query_self_const_id, SemIR::SpecificInterface query_specific_interface, - SemIR::ImplId target_impl) -> bool { + SemIR::ImplId target_impl_id) -> bool { if (query_self_const_id == SemIR::ErrorInst::ConstantId) { return false; } auto witness_id = TryGetSpecificWitnessIdForImpl( context, loc_id, query_self_const_id, query_specific_interface, - context.impls().Get(target_impl)); + target_impl_id, context.impls().Get(target_impl_id)); // TODO: If this fails, it would be because there is an error in the specific // interface. Should we check for that and return false? CARBON_CHECK(witness_id != SemIR::ErrorInst::ConstantId, diff --git a/toolchain/check/impl_lookup.h b/toolchain/check/impl_lookup.h index cd42003fe688..54cbb5f58976 100644 --- a/toolchain/check/impl_lookup.h +++ b/toolchain/check/impl_lookup.h @@ -45,7 +45,7 @@ auto LookupImplWitness(Context& context, SemIR::LocId loc_id, auto LookupMatchesImpl(Context& context, SemIR::LocId loc_id, SemIR::ConstantId query_self_const_id, SemIR::SpecificInterface query_specific_interface, - SemIR::ImplId target_impl) -> bool; + SemIR::ImplId target_impl_id) -> bool; // Given a self facet, returns the canonical query self for a LookupImplWitness // instruction. The canonicalization looks through `FacetValue` and makes a diff --git a/toolchain/check/testdata/facet/period_self.carbon b/toolchain/check/testdata/facet/period_self.carbon index 757d68464102..16d7abc9cd31 100644 --- a/toolchain/check/testdata/facet/period_self.carbon +++ b/toolchain/check/testdata/facet/period_self.carbon @@ -468,7 +468,7 @@ fn H(T:! (L where .Self impls M) where C(.W) impls Z(.Self)) { C(()) as Z(T); } -// --- fail_todo_concrete_access_witness_m_in_earlier_constraint.carbon +// --- concrete_access_witness_m_in_earlier_constraint.carbon library "[[@TEST_NAME]]"; interface L { let W:! type; } @@ -484,14 +484,7 @@ class C(C1:! type); // Should pass. `.W` can resolve to `()` immediately through the type of `.Self` // (since the type of `.Self` contains `M`) and the `final impl`. So we can get // a witness for `C(())` from `T`. -// -// TODO: How come we don't get `.W` evaluating to `()` when `M` comes from an -// earlier constraint? Is the `where_stack` not working with `.Self`? fn G(T:! L where .Self impls M and C(.W) impls Z(.Self)) { - // CHECK:STDERR: fail_todo_concrete_access_witness_m_in_earlier_constraint.carbon:[[@LINE+4]]:3: error: cannot convert type `C(())` into type implementing `Z(T)` [ConversionFailureTypeToFacet] - // CHECK:STDERR: C(()) as Z(T); - // CHECK:STDERR: ^~~~~~~~~~~~~ - // CHECK:STDERR: C(()) as Z(T); } diff --git a/toolchain/check/testdata/facet/validate_rewrite_constraints.carbon b/toolchain/check/testdata/facet/validate_rewrite_constraints.carbon index 8a6af02f9d67..00bc65779d2e 100644 --- a/toolchain/check/testdata/facet/validate_rewrite_constraints.carbon +++ b/toolchain/check/testdata/facet/validate_rewrite_constraints.carbon @@ -48,7 +48,7 @@ fn F(U:! type, unused T:! I(U) where .X = ()) {} fn G() { // This finds the impl where `.X = {}`, but F requires that `.X = ()`. // - // CHECK:STDERR: fail_generic_interface_facet_value_wrong_specific_impl.carbon:[[@LINE+7]]:3: error: cannot convert type `C` into type implementing `I({}) where .(I({}).X) = ()` [ConversionFailureTypeToFacet] + // CHECK:STDERR: fail_generic_interface_facet_value_wrong_specific_impl.carbon:[[@LINE+7]]:3: error: cannot convert type `C` into type implementing `I({}) where {} = ()` [ConversionFailureTypeToFacet] // CHECK:STDERR: F({}, C); // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_generic_interface_facet_value_wrong_specific_impl.carbon:[[@LINE-7]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] diff --git a/toolchain/check/testdata/for/actual.carbon b/toolchain/check/testdata/for/actual.carbon index 9e63712b6a71..3ff0f85e15dc 100644 --- a/toolchain/check/testdata/for/actual.carbon +++ b/toolchain/check/testdata/for/actual.carbon @@ -56,15 +56,15 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %type: type = facet_type [concrete] // CHECK:STDOUT: %.Self.frozen.197: %type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %pattern_type.dc0: type = pattern_type Core.IntLiteral [concrete] -// CHECK:STDOUT: %N.patt: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] -// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] +// CHECK:STDOUT: %N.patt.aa5: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic] +// CHECK:STDOUT: %N.fe9: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %IntRange.type: type = generic_class_type @IntRange [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %IntRange.generic: %IntRange.type = struct_value () [concrete] -// CHECK:STDOUT: %IntRange.2c4: type = class_type @IntRange, @IntRange(%N) [symbolic] +// CHECK:STDOUT: %IntRange.2c4: type = class_type @IntRange, @IntRange(%N.fe9) [symbolic] // CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] // CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] -// CHECK:STDOUT: %Int.67af24.1: type = class_type @Int, @Int(%N) [symbolic] +// CHECK:STDOUT: %Int.67af24.1: type = class_type @Int, @Int(%N.fe9) [symbolic] // CHECK:STDOUT: %pattern_type.142cb7.1: type = pattern_type %Int.67af24.1 [symbolic] // CHECK:STDOUT: %start.param_patt.b2c: %pattern_type.142cb7.1 = value_param_pattern [symbolic] // CHECK:STDOUT: %start.patt.9ef: %pattern_type.142cb7.1 = at_binding_pattern start, %start.param_patt.b2c [symbolic] @@ -74,7 +74,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %pattern_type.1ea: type = pattern_type %IntRange.2c4 [symbolic] // CHECK:STDOUT: %return.param_patt.262: %pattern_type.1ea = out_param_pattern [symbolic] // CHECK:STDOUT: %return.patt.dbf: %pattern_type.1ea = return_slot_pattern %return.param_patt.262, %IntRange.2c4 [symbolic] -// CHECK:STDOUT: %IntRange.Make.type.522: type = fn_type @IntRange.Make, @IntRange(%N) [symbolic] +// CHECK:STDOUT: %IntRange.Make.type.522: type = fn_type @IntRange.Make, @IntRange(%N.fe9) [symbolic] // CHECK:STDOUT: %IntRange.Make.8ef: %IntRange.Make.type.522 = struct_value () [symbolic] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] @@ -92,45 +92,62 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %.Self.frozen.as_type: type = facet_access_type %.Self.frozen.bdd [symbolic_self] // CHECK:STDOUT: %Iterate.assoc_type: type = assoc_entity_type @Iterate [concrete] // CHECK:STDOUT: %assoc1.c91: %Iterate.assoc_type = assoc_entity element1, imports.%Core.import_ref.dd9 [concrete] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] +// CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] +// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] +// CHECK:STDOUT: %impl.elem1.6f4: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element1 [symbolic_self] +// CHECK:STDOUT: %impl.elem0.294: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] +// CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] +// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] +// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%To) [symbolic] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.845: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74 = struct_value () [symbolic] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ba: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%int_32) [concrete] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ba = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] +// CHECK:STDOUT: %ImplicitAs.impl_witness.778: = impl_witness imports.%ImplicitAs.impl_witness_table.1f3, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%int_32) [concrete] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] +// CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] +// CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.98d: = lookup_impl_witness %.Self.frozen.bdd, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem1.990: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.98d, element1 [symbolic_self] // CHECK:STDOUT: %Destroy.lookup_impl_witness.173: = lookup_impl_witness %Int.67af24.1, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.7bb: %Destroy.type = facet_value %Int.67af24.1, (%Destroy.lookup_impl_witness.173) [symbolic] // CHECK:STDOUT: %assoc0.0f0: %Iterate.assoc_type = assoc_entity element0, imports.%Core.import_ref.ebd7 [concrete] // CHECK:STDOUT: %impl.elem0.94d: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.98d, element0 [symbolic_self] -// CHECK:STDOUT: %require_complete.4dfb92.1: = require_complete_type %Int.67af24.1 [symbolic] -// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] +// CHECK:STDOUT: %require_complete.4dfb92.2: = require_complete_type %Int.67af24.1 [symbolic] +// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] -// CHECK:STDOUT: %return.param_patt.5a2679.1: %pattern_type.142cb7.1 = out_param_pattern [symbolic] -// CHECK:STDOUT: %.df5d8d.1: Core.Form = init_form %Int.67af24.1 [symbolic] +// CHECK:STDOUT: %return.param_patt.5a2679.2: %pattern_type.142cb7.1 = out_param_pattern [symbolic] +// CHECK:STDOUT: %.df5d8d.2: Core.Form = init_form %Int.67af24.1 [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.df6: = lookup_impl_witness %Int.67af24.1, @Copy [symbolic] -// CHECK:STDOUT: %.a53: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic] -// CHECK:STDOUT: %facet_value: %facet_type.f48 = facet_value %Int.67af24.1, (%Destroy.lookup_impl_witness.173, %Copy.lookup_impl_witness.df6) [symbolic] -// CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] -// CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] -// CHECK:STDOUT: %impl.elem1.6f4: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element1 [symbolic_self] -// CHECK:STDOUT: %impl.elem0.294: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type: type = facet_type <@Iterate where %impl.elem1.6f4 = %Destroy.facet.7bb and %impl.elem0.294 = %facet_value> [symbolic] -// CHECK:STDOUT: %Iterate.impl_witness: = impl_witness @IntRange.as.Iterate.impl.%Iterate.impl_witness_table, @IntRange.as.Iterate.impl(%N) [symbolic] -// CHECK:STDOUT: %require_complete.466: = require_complete_type %Iterate_where.type [symbolic] +// CHECK:STDOUT: %.a53: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N.fe9) [symbolic] +// CHECK:STDOUT: %facet_value.c69: %facet_type.f48 = facet_value %Int.67af24.1, (%Destroy.lookup_impl_witness.173, %Copy.lookup_impl_witness.df6) [symbolic] +// CHECK:STDOUT: %Iterate_where.type.836: type = facet_type <@Iterate where %impl.elem1.6f4 = %Destroy.facet.7bb and %impl.elem0.294 = %facet_value.c69> [symbolic] +// CHECK:STDOUT: %Iterate.impl_witness.81c: = impl_witness @IntRange.as.Iterate.impl.%Iterate.impl_witness_table, @IntRange.as.Iterate.impl(%N.fe9) [symbolic] +// CHECK:STDOUT: %require_complete.466: = require_complete_type %Iterate_where.type.836 [symbolic] // CHECK:STDOUT: %self.param_patt.5cc: %pattern_type.1ea = value_param_pattern [symbolic] // CHECK:STDOUT: %self.patt.13b: %pattern_type.1ea = at_binding_pattern self, %self.param_patt.5cc [symbolic] -// CHECK:STDOUT: %return.patt.434: %pattern_type.142cb7.1 = return_slot_pattern %return.param_patt.5a2679.1, %Int.67af24.1 [symbolic] -// CHECK:STDOUT: %IntRange.as.Iterate.impl.NewCursor.type: type = fn_type @IntRange.as.Iterate.impl.NewCursor, @IntRange.as.Iterate.impl(%N) [symbolic] +// CHECK:STDOUT: %return.patt.434: %pattern_type.142cb7.1 = return_slot_pattern %return.param_patt.5a2679.2, %Int.67af24.1 [symbolic] +// CHECK:STDOUT: %IntRange.as.Iterate.impl.NewCursor.type: type = fn_type @IntRange.as.Iterate.impl.NewCursor, @IntRange.as.Iterate.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %IntRange.as.Iterate.impl.NewCursor: %IntRange.as.Iterate.impl.NewCursor.type = struct_value () [symbolic] // CHECK:STDOUT: %ptr.41e: type = ptr_type %Int.67af24.1 [symbolic] // CHECK:STDOUT: %pattern_type.833: type = pattern_type %ptr.41e [symbolic] // CHECK:STDOUT: %cursor.param_patt.328: %pattern_type.833 = value_param_pattern [symbolic] // CHECK:STDOUT: %cursor.patt.652: %pattern_type.833 = at_binding_pattern cursor, %cursor.param_patt.328 [symbolic] // CHECK:STDOUT: %OptionalStorage.lookup_impl_witness.a32: = lookup_impl_witness %Int.67af24.1, @OptionalStorage [symbolic] -// CHECK:STDOUT: %.3c5: require_specific_def_type = require_specific_def @T.as_type.as.OptionalStorage.impl(%facet_value) [symbolic] +// CHECK:STDOUT: %.3c5: require_specific_def_type = require_specific_def @T.as_type.as.OptionalStorage.impl(%facet_value.c69) [symbolic] // CHECK:STDOUT: %OptionalStorage.facet.b99: %OptionalStorage.type = facet_value %Int.67af24.1, (%OptionalStorage.lookup_impl_witness.a32) [symbolic] // CHECK:STDOUT: %Optional.5ec: type = class_type @Optional, @Optional(%OptionalStorage.facet.b99) [symbolic] // CHECK:STDOUT: %.3f3: Core.Form = init_form %Optional.5ec [symbolic] // CHECK:STDOUT: %pattern_type.b38: type = pattern_type %Optional.5ec [symbolic] // CHECK:STDOUT: %return.param_patt.4bb: %pattern_type.b38 = out_param_pattern [symbolic] // CHECK:STDOUT: %return.patt.427: %pattern_type.b38 = return_slot_pattern %return.param_patt.4bb, %Optional.5ec [symbolic] -// CHECK:STDOUT: %IntRange.as.Iterate.impl.Next.type: type = fn_type @IntRange.as.Iterate.impl.Next, @IntRange.as.Iterate.impl(%N) [symbolic] +// CHECK:STDOUT: %IntRange.as.Iterate.impl.Next.type: type = fn_type @IntRange.as.Iterate.impl.Next, @IntRange.as.Iterate.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %IntRange.as.Iterate.impl.Next: %IntRange.as.Iterate.impl.Next.type = struct_value () [symbolic] // CHECK:STDOUT: %start.patt.477: %pattern_type.142cb7.1 = ref_binding_pattern start [symbolic] // CHECK:STDOUT: %IntRange.elem.bed: type = unbound_element_type %IntRange.2c4, %Int.67af24.1 [symbolic] @@ -153,7 +170,6 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %value.var_patt: %pattern_type.142cb7.1 = var_pattern %value.patt.505 [symbolic] // CHECK:STDOUT: %OrderedWith.type.ad8: type = generic_interface_type @OrderedWith [concrete] // CHECK:STDOUT: %OrderedWith.generic: %OrderedWith.type.ad8 = struct_value () [concrete] -// CHECK:STDOUT: %Other: type = symbolic_binding Other, 0 [symbolic] // CHECK:STDOUT: %OrderedWith.type.32a: type = facet_type <@OrderedWith, @OrderedWith(%Other)> [symbolic] // CHECK:STDOUT: %Self.7df: %OrderedWith.type.32a = symbolic_binding Self, 1 [symbolic] // CHECK:STDOUT: %OrderedWith.assoc_type.1d2: type = assoc_entity_type @OrderedWith, @OrderedWith(%Other) [symbolic] @@ -165,35 +181,29 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %require_complete.4c8: = require_complete_type %OrderedWith.type.6f8 [symbolic] // CHECK:STDOUT: %assoc0.13c: %OrderedWith.assoc_type.1d2 = assoc_entity element0, imports.%Core.import_ref.447 [symbolic] // CHECK:STDOUT: %M: Core.IntLiteral = symbolic_binding M, 1 [symbolic] -// CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.type.89b: type = fn_type @Int.as.OrderedWith.impl.Less.1, @Int.as.OrderedWith.impl.ab3(%N, %M) [symbolic] +// CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.type.89b: type = fn_type @Int.as.OrderedWith.impl.Less.1, @Int.as.OrderedWith.impl.ab3(%N.fe9, %M) [symbolic] // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.050: %Int.as.OrderedWith.impl.Less.type.89b = struct_value () [symbolic] -// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] -// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] -// CHECK:STDOUT: %OrderedWith.impl_witness.339: = impl_witness imports.%OrderedWith.impl_witness_table.5c1, @Int.as.OrderedWith.impl.ab3(%N, %N) [symbolic] -// CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.type.f5c: type = fn_type @Int.as.OrderedWith.impl.Less.1, @Int.as.OrderedWith.impl.ab3(%N, %N) [symbolic] +// CHECK:STDOUT: %OrderedWith.impl_witness.339: = impl_witness imports.%OrderedWith.impl_witness_table.5c1, @Int.as.OrderedWith.impl.ab3(%N.fe9, %N.fe9) [symbolic] +// CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.type.f5c: type = fn_type @Int.as.OrderedWith.impl.Less.1, @Int.as.OrderedWith.impl.ab3(%N.fe9, %N.fe9) [symbolic] // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.13c: %Int.as.OrderedWith.impl.Less.type.f5c = struct_value () [symbolic] -// CHECK:STDOUT: %.4a8: require_specific_def_type = require_specific_def @Int.as.OrderedWith.impl.ab3(%N, %N) [symbolic] +// CHECK:STDOUT: %.4a8: require_specific_def_type = require_specific_def @Int.as.OrderedWith.impl.ab3(%N.fe9, %N.fe9) [symbolic] // CHECK:STDOUT: %OrderedWith.facet.bf1: %OrderedWith.type.6f8 = facet_value %Int.67af24.1, (%OrderedWith.impl_witness.339) [symbolic] // CHECK:STDOUT: %OrderedWith.WithSelf.Less.type.c02: type = fn_type @OrderedWith.WithSelf.Less, @OrderedWith.WithSelf(%Int.67af24.1, %OrderedWith.facet.bf1) [symbolic] // CHECK:STDOUT: %.08f: type = fn_type_with_self_type %OrderedWith.WithSelf.Less.type.c02, %OrderedWith.facet.bf1 [symbolic] -// CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.specific_fn.6ce: = specific_function %Int.as.OrderedWith.impl.Less.13c, @Int.as.OrderedWith.impl.Less.1(%N, %N) [symbolic] -// CHECK:STDOUT: %Inc.type: type = facet_type <@Inc> [concrete] -// CHECK:STDOUT: %Inc.lookup_impl_witness: = lookup_impl_witness %Int.67af24.1, @Inc [symbolic] -// CHECK:STDOUT: %.f62: require_specific_def_type = require_specific_def @Int.as.Inc.impl(%N) [symbolic] -// CHECK:STDOUT: %Inc.facet: %Inc.type = facet_value %Int.67af24.1, (%Inc.lookup_impl_witness) [symbolic] -// CHECK:STDOUT: %Inc.WithSelf.Op.type.36a: type = fn_type @Inc.WithSelf.Op, @Inc.WithSelf(%Inc.facet) [symbolic] -// CHECK:STDOUT: %.952: type = fn_type_with_self_type %Inc.WithSelf.Op.type.36a, %Inc.facet [symbolic] -// CHECK:STDOUT: %impl.elem0.7b5: %.952 = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.ed1: = specific_impl_function %impl.elem0.7b5, @Inc.WithSelf.Op(%Inc.facet) [symbolic] -// CHECK:STDOUT: %Optional.Some.specific_fn: = specific_function %Optional.Some.bcf, @Optional.Some(%OptionalStorage.facet.b99) [symbolic] +// CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.specific_fn.6ce: = specific_function %Int.as.OrderedWith.impl.Less.13c, @Int.as.OrderedWith.impl.Less.1(%N.fe9, %N.fe9) [symbolic] +// CHECK:STDOUT: %Inc.lookup_impl_witness.428: = lookup_impl_witness %Int.67af24.1, @Inc [symbolic] +// CHECK:STDOUT: %.f62: require_specific_def_type = require_specific_def @Int.as.Inc.impl(%N.fe9) [symbolic] +// CHECK:STDOUT: %Inc.facet.a38: %Inc.type = facet_value %Int.67af24.1, (%Inc.lookup_impl_witness.428) [symbolic] +// CHECK:STDOUT: %Inc.WithSelf.Op.type.36a: type = fn_type @Inc.WithSelf.Op, @Inc.WithSelf(%Inc.facet.a38) [symbolic] +// CHECK:STDOUT: %.952c: type = fn_type_with_self_type %Inc.WithSelf.Op.type.36a, %Inc.facet.a38 [symbolic] +// CHECK:STDOUT: %impl.elem0.7b5: %.952c = impl_witness_access %Inc.lookup_impl_witness.428, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.ed1: = specific_impl_function %impl.elem0.7b5, @Inc.WithSelf.Op(%Inc.facet.a38) [symbolic] +// CHECK:STDOUT: %Optional.Some.specific_fn.d36: = specific_function %Optional.Some.bcf, @Optional.Some(%OptionalStorage.facet.b99) [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.8f1: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.7bb) [symbolic] // CHECK:STDOUT: %.2c6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.8f1, %Destroy.facet.7bb [symbolic] // CHECK:STDOUT: %impl.elem0.604: %.2c6 = impl_witness_access %Destroy.lookup_impl_witness.173, element0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.693: = specific_impl_function %impl.elem0.604, @Destroy.WithSelf.Op(%Destroy.facet.7bb) [symbolic] -// CHECK:STDOUT: %Optional.None.specific_fn: = specific_function %Optional.None.fb7, @Optional.None(%OptionalStorage.facet.b99) [symbolic] -// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] -// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] +// CHECK:STDOUT: %Optional.None.specific_fn.5e5: = specific_function %Optional.None.fb7, @Optional.None(%OptionalStorage.facet.b99) [symbolic] // CHECK:STDOUT: %end.param_patt.c55: %pattern_type.6b6 = value_param_pattern [concrete] // CHECK:STDOUT: %end.patt.367: %pattern_type.6b6 = at_binding_pattern end, %end.param_patt.c55 [concrete] // CHECK:STDOUT: %IntRange.bbd: type = class_type @IntRange, @IntRange(%int_32) [concrete] @@ -203,8 +213,6 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %return.patt.7d9: %pattern_type.0f3 = return_slot_pattern %return.param_patt.108, %IntRange.bbd [concrete] // CHECK:STDOUT: %Range.type: type = fn_type @Range [concrete] // CHECK:STDOUT: %Range: %Range.type = struct_value () [concrete] -// CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete] -// CHECK:STDOUT: %complete_type.f8a: = complete_type_witness %i32.builtin [concrete] // CHECK:STDOUT: %IntRange.Make.type.d27: type = fn_type @IntRange.Make, @IntRange(%int_32) [concrete] // CHECK:STDOUT: %IntRange.Make.9ef: %IntRange.Make.type.d27 = struct_value () [concrete] // CHECK:STDOUT: %start.patt.c23: %pattern_type.6b6 = ref_binding_pattern start [concrete] @@ -216,19 +224,11 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %start.param_patt.619: %pattern_type.6b6 = value_param_pattern [concrete] // CHECK:STDOUT: %start.patt.304: %pattern_type.6b6 = at_binding_pattern start, %start.param_patt.619 [concrete] // CHECK:STDOUT: %IntRange.Make.specific_fn: = specific_function %IntRange.Make.9ef, @IntRange.Make(%int_32) [concrete] -// CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] -// CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%To) [symbolic] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.845: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74 = struct_value () [symbolic] -// CHECK:STDOUT: %ImplicitAs.impl_witness.a23: = impl_witness imports.%ImplicitAs.impl_witness_table.b3c, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%int_32) [concrete] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ba: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%int_32) [concrete] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.2ba = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.facet.9f1: %ImplicitAs.type.914 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.a23) [concrete] -// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.740: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet.9f1) [concrete] -// CHECK:STDOUT: %.1c5: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.740, %ImplicitAs.facet.9f1 [concrete] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] -// CHECK:STDOUT: %bound_method: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] +// CHECK:STDOUT: %ImplicitAs.facet.a2b: %ImplicitAs.type.914 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.778) [concrete] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.2eb: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet.a2b) [concrete] +// CHECK:STDOUT: %.d74: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.2eb, %ImplicitAs.facet.a2b [concrete] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.7b4: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] +// CHECK:STDOUT: %bound_method.6e0: = bound_method %int_0.5c6, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_0.3c0: %i32 = int_value 0 [concrete] // CHECK:STDOUT: %Copy.impl_witness.0e0: = impl_witness imports.%Copy.impl_witness_table.367, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.3f6: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%int_32) [concrete] @@ -262,6 +262,8 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Core.import_ref.6e4: @Optional.%Optional.None.type (%Optional.None.type.bdc) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.None (constants.%Optional.None.01e)] // CHECK:STDOUT: %Core.import_ref.84ba: @Optional.%Optional.Some.type (%Optional.Some.type.304) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Some (constants.%Optional.Some.2a0)] // CHECK:STDOUT: %Core.import_ref.dd9: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [concrete = %CursorType] +// CHECK:STDOUT: %Core.import_ref.717c: @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] +// CHECK:STDOUT: %ImplicitAs.impl_witness_table.1f3 = impl_witness_table (%Core.import_ref.717c), @Core.IntLiteral.as.ImplicitAs.impl.0e9 [concrete] // CHECK:STDOUT: %CursorType: %Destroy.type = assoc_const_decl @CursorType [concrete] {} // CHECK:STDOUT: %Core.import_ref.ebd7: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [concrete = %ElementType] // CHECK:STDOUT: %ElementType: %facet_type.f48 = assoc_const_decl @ElementType [concrete] {} @@ -281,8 +283,6 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Core.Inc: type = import_ref Core//prelude/operators/arithmetic, Inc, loaded [concrete = constants.%Inc.type] // CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type] // CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.0ff = import_ref Core//prelude/operators/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] -// CHECK:STDOUT: %Core.import_ref.edf: @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] -// CHECK:STDOUT: %ImplicitAs.impl_witness_table.b3c = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl.0e9 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -293,14 +293,14 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %IntRange.decl: %IntRange.type = class_decl @IntRange [concrete = constants.%IntRange.generic] { -// CHECK:STDOUT: %N.patt.loc4_17.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_17.2 (constants.%N.patt)] +// CHECK:STDOUT: %N.patt.loc4_17.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_17.2 (constants.%N.patt.aa5)] // CHECK:STDOUT: } { // CHECK:STDOUT: %.loc4: type = splice_block %IntLiteral.ref [concrete = Core.IntLiteral] { // CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen.197] // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = Core.IntLiteral] // CHECK:STDOUT: } -// CHECK:STDOUT: %N.loc4_17.2: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_17.1 (constants.%N)] +// CHECK:STDOUT: %N.loc4_17.2: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_17.1 (constants.%N.fe9)] // CHECK:STDOUT: } // CHECK:STDOUT: %Range.decl: %Range.type = fn_decl @Range [concrete = constants.%Range] { // CHECK:STDOUT: %end.param_patt: %pattern_type.6b6 = value_param_pattern [concrete = constants.%end.param_patt.c55] @@ -321,16 +321,16 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @IntRange.as.Iterate.impl(@IntRange.%N.loc4_17.2: Core.IntLiteral) { -// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] +// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N.fe9)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %Int.loc9_54.1: type = class_type @Int, @Int(%N) [symbolic = %Int.loc9_54.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Int.loc9_54.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.173)] // CHECK:STDOUT: %Destroy.facet.loc9_54.1: %Destroy.type = facet_value %Int.loc9_54.1, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc9_54.1 (constants.%Destroy.facet.7bb)] // CHECK:STDOUT: %.loc9_85.1: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc9_85.1 (constants.%.a53)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %Int.loc9_54.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.df6)] -// CHECK:STDOUT: %facet_value.loc9_85.1: %facet_type.f48 = facet_value %Int.loc9_54.1, (%Destroy.lookup_impl_witness, %Copy.lookup_impl_witness) [symbolic = %facet_value.loc9_85.1 (constants.%facet_value)] -// CHECK:STDOUT: %Iterate_where.type: type = facet_type <@Iterate where constants.%impl.elem1.6f4 = %Destroy.facet.loc9_54.1 and constants.%impl.elem0.294 = %facet_value.loc9_85.1> [symbolic = %Iterate_where.type (constants.%Iterate_where.type)] -// CHECK:STDOUT: %Iterate.impl_witness.loc9_87.2: = impl_witness %Iterate.impl_witness_table, @IntRange.as.Iterate.impl(%N) [symbolic = %Iterate.impl_witness.loc9_87.2 (constants.%Iterate.impl_witness)] +// CHECK:STDOUT: %facet_value.loc9_85.1: %facet_type.f48 = facet_value %Int.loc9_54.1, (%Destroy.lookup_impl_witness, %Copy.lookup_impl_witness) [symbolic = %facet_value.loc9_85.1 (constants.%facet_value.c69)] +// CHECK:STDOUT: %Iterate_where.type: type = facet_type <@Iterate where constants.%impl.elem1.6f4 = %Destroy.facet.loc9_54.1 and constants.%impl.elem0.294 = %facet_value.loc9_85.1> [symbolic = %Iterate_where.type (constants.%Iterate_where.type.836)] +// CHECK:STDOUT: %Iterate.impl_witness.loc9_87.2: = impl_witness %Iterate.impl_witness_table, @IntRange.as.Iterate.impl(%N) [symbolic = %Iterate.impl_witness.loc9_87.2 (constants.%Iterate.impl_witness.81c)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete: = require_complete_type %Iterate_where.type [symbolic = %require_complete (constants.%require_complete.466)] @@ -343,17 +343,17 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.as.Iterate.impl.NewCursor.decl: @IntRange.as.Iterate.impl.%IntRange.as.Iterate.impl.NewCursor.type (%IntRange.as.Iterate.impl.NewCursor.type) = fn_decl @IntRange.as.Iterate.impl.NewCursor [symbolic = @IntRange.as.Iterate.impl.%IntRange.as.Iterate.impl.NewCursor (constants.%IntRange.as.Iterate.impl.NewCursor)] { // CHECK:STDOUT: %self.param_patt.loc10_18.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = value_param_pattern [symbolic = %self.param_patt.loc10_18.2 (constants.%self.param_patt.5cc)] // CHECK:STDOUT: %self.patt.loc10_18.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = at_binding_pattern self, %self.param_patt.loc10_18.1 [symbolic = %self.patt.loc10_18.2 (constants.%self.patt.13b)] -// CHECK:STDOUT: %return.param_patt.loc10_37.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = out_param_pattern [symbolic = %return.param_patt.loc10_37.2 (constants.%return.param_patt.5a2679.1)] +// CHECK:STDOUT: %return.param_patt.loc10_37.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = out_param_pattern [symbolic = %return.param_patt.loc10_37.2 (constants.%return.param_patt.5a2679.2)] // CHECK:STDOUT: %return.patt.loc10_24.1: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = return_slot_pattern %return.param_patt.loc10_37.1, %Int.loc10_37.2 [symbolic = %return.patt.loc10_24.2 (constants.%return.patt.434)] // CHECK:STDOUT: } { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc10_37.2: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc10_37.1 (constants.%Int.67af24.1)] -// CHECK:STDOUT: %.loc10_37.2: Core.Form = init_form %Int.loc10_37.2 [symbolic = %.loc10_37.1 (constants.%.df5d8d.1)] +// CHECK:STDOUT: %N.ref: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc10_37.2: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc10_37.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %.loc10_37.2: Core.Form = init_form %Int.loc10_37.2 [symbolic = %.loc10_37.1 (constants.%.df5d8d.2)] // CHECK:STDOUT: %self.param: @IntRange.as.Iterate.impl.NewCursor.%IntRange (%IntRange.2c4) = value_param call_param0 // CHECK:STDOUT: %.loc10_18.1: type = splice_block %Self.ref [symbolic = %IntRange (constants.%IntRange.2c4)] { -// CHECK:STDOUT: %.loc10_18.2: type = specific_constant constants.%IntRange.2c4, @IntRange(constants.%N) [symbolic = %IntRange (constants.%IntRange.2c4)] +// CHECK:STDOUT: %.loc10_18.2: type = specific_constant constants.%IntRange.2c4, @IntRange(constants.%N.fe9) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc10_18.2 [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: } // CHECK:STDOUT: %self: @IntRange.as.Iterate.impl.NewCursor.%IntRange (%IntRange.2c4) = wrapper_binding self, %self.param @@ -372,15 +372,15 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Optional.ref.loc11: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] // CHECK:STDOUT: %Core.ref.loc11_58: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc11_62: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc11_67: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc11_68: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %N.ref.loc11_67: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc11_68: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %OptionalStorage.facet.loc11_69.2: %OptionalStorage.type = facet_value %Int.loc11_68, (constants.%OptionalStorage.lookup_impl_witness.a32) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %.loc11_69.5: %OptionalStorage.type = converted %Int.loc11_68, %OptionalStorage.facet.loc11_69.2 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %Optional.loc11_69.2: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.loc11_69.1 (constants.%Optional.5ec)] // CHECK:STDOUT: %.loc11_69.6: Core.Form = init_form %Optional.loc11_69.2 [symbolic = %.loc11_69.4 (constants.%.3f3)] // CHECK:STDOUT: %self.param: @IntRange.as.Iterate.impl.Next.%IntRange (%IntRange.2c4) = value_param call_param0 // CHECK:STDOUT: %.loc11_13.1: type = splice_block %Self.ref [symbolic = %IntRange (constants.%IntRange.2c4)] { -// CHECK:STDOUT: %.loc11_13.2: type = specific_constant constants.%IntRange.2c4, @IntRange(constants.%N) [symbolic = %IntRange (constants.%IntRange.2c4)] +// CHECK:STDOUT: %.loc11_13.2: type = specific_constant constants.%IntRange.2c4, @IntRange(constants.%N.fe9) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc11_13.2 [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: } // CHECK:STDOUT: %self: @IntRange.as.Iterate.impl.Next.%IntRange (%IntRange.2c4) = wrapper_binding self, %self.param @@ -388,8 +388,8 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %.loc11_38: type = splice_block %ptr.loc11_38.2 [symbolic = %ptr.loc11_38.1 (constants.%ptr.41e)] { // CHECK:STDOUT: %Core.ref.loc11_27: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc11_31: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc11_36: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc11_37.2: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %N.ref.loc11_36: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc11_37.2: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %ptr.loc11_38.2: type = ptr_type %Int.loc11_37.2 [symbolic = %ptr.loc11_38.1 (constants.%ptr.41e)] // CHECK:STDOUT: } // CHECK:STDOUT: %cursor: @IntRange.as.Iterate.impl.Next.%ptr.loc11_38.1 (%ptr.41e) = wrapper_binding cursor, %cursor.param @@ -397,9 +397,9 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %return: ref @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %Iterate.impl_witness_table = impl_witness_table (%impl_witness_assoc_constant.loc9_87.2, %impl_witness_assoc_constant.loc9_87.1, %IntRange.as.Iterate.impl.NewCursor.decl, %IntRange.as.Iterate.impl.Next.decl), @IntRange.as.Iterate.impl [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.loc9_87.1: = impl_witness %Iterate.impl_witness_table, @IntRange.as.Iterate.impl(constants.%N) [symbolic = %Iterate.impl_witness.loc9_87.2 (constants.%Iterate.impl_witness)] +// CHECK:STDOUT: %Iterate.impl_witness.loc9_87.1: = impl_witness %Iterate.impl_witness_table, @IntRange.as.Iterate.impl(constants.%N.fe9) [symbolic = %Iterate.impl_witness.loc9_87.2 (constants.%Iterate.impl_witness.81c)] // CHECK:STDOUT: %impl_witness_assoc_constant.loc9_87.1: %Destroy.type = impl_witness_assoc_constant constants.%Destroy.facet.7bb [symbolic = %Destroy.facet.loc9_54.1 (constants.%Destroy.facet.7bb)] -// CHECK:STDOUT: %impl_witness_assoc_constant.loc9_87.2: %facet_type.f48 = impl_witness_assoc_constant constants.%facet_value [symbolic = %facet_value.loc9_85.1 (constants.%facet_value)] +// CHECK:STDOUT: %impl_witness_assoc_constant.loc9_87.2: %facet_type.f48 = impl_witness_assoc_constant constants.%facet_value.c69 [symbolic = %facet_value.loc9_85.1 (constants.%facet_value.c69)] // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .N = @@ -411,14 +411,14 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @IntRange(%N.loc4_17.2: Core.IntLiteral) { -// CHECK:STDOUT: %N.patt.loc4_17.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_17.2 (constants.%N.patt)] -// CHECK:STDOUT: %N.loc4_17.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_17.1 (constants.%N)] +// CHECK:STDOUT: %N.patt.loc4_17.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_17.2 (constants.%N.patt.aa5)] +// CHECK:STDOUT: %N.loc4_17.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_17.1 (constants.%N.fe9)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %IntRange.Make.type: type = fn_type @IntRange.Make, @IntRange(%N.loc4_17.1) [symbolic = %IntRange.Make.type (constants.%IntRange.Make.type.522)] // CHECK:STDOUT: %IntRange.Make: @IntRange.%IntRange.Make.type (%IntRange.Make.type.522) = struct_value () [symbolic = %IntRange.Make (constants.%IntRange.Make.8ef)] // CHECK:STDOUT: %Int: type = class_type @Int, @Int(%N.loc4_17.1) [symbolic = %Int (constants.%Int.67af24.1)] -// CHECK:STDOUT: %require_complete: = require_complete_type %Int [symbolic = %require_complete (constants.%require_complete.4dfb92.1)] +// CHECK:STDOUT: %require_complete: = require_complete_type %Int [symbolic = %require_complete (constants.%require_complete.4dfb92.2)] // CHECK:STDOUT: %pattern_type: type = pattern_type %Int [symbolic = %pattern_type (constants.%pattern_type.142cb7.1)] // CHECK:STDOUT: %start.patt: @IntRange.%pattern_type (%pattern_type.142cb7.1) = ref_binding_pattern start [symbolic = %start.patt (constants.%start.patt.477)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N.loc4_17.1) [symbolic = %IntRange (constants.%IntRange.2c4)] @@ -436,23 +436,23 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %return.param_patt.loc5_52.1: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = out_param_pattern [symbolic = %return.param_patt.loc5_52.2 (constants.%return.param_patt.262)] // CHECK:STDOUT: %return.patt.loc5_49.1: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = return_slot_pattern %return.param_patt.loc5_52.1, %Self.ref [symbolic = %return.patt.loc5_49.2 (constants.%return.patt.dbf)] // CHECK:STDOUT: } { -// CHECK:STDOUT: %.loc5_52.2: type = specific_constant constants.%IntRange.2c4, @IntRange(constants.%N) [symbolic = %IntRange (constants.%IntRange.2c4)] +// CHECK:STDOUT: %.loc5_52.2: type = specific_constant constants.%IntRange.2c4, @IntRange(constants.%N.fe9) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc5_52.2 [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %.loc5_52.3: Core.Form = init_form %Self.ref [symbolic = %.loc5_52.1 (constants.%.5c3)] // CHECK:STDOUT: %start.param: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = value_param call_param0 // CHECK:STDOUT: %.loc5_28: type = splice_block %Int.loc5_28.2 [symbolic = %Int.loc5_28.1 (constants.%Int.67af24.1)] { // CHECK:STDOUT: %Core.ref.loc5_18: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc5_22: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc5_27: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc5_28.2: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc5_28.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %N.ref.loc5_27: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc5_28.2: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc5_28.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: } // CHECK:STDOUT: %start: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = wrapper_binding start, %start.param // CHECK:STDOUT: %end.param: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = value_param call_param1 // CHECK:STDOUT: %.loc5_46: type = splice_block %Int.loc5_46 [symbolic = %Int.loc5_28.1 (constants.%Int.67af24.1)] { // CHECK:STDOUT: %Core.ref.loc5_36: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc5_40: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc5_45: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc5_46: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc5_28.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %N.ref.loc5_45: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc5_46: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc5_28.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: } // CHECK:STDOUT: %end: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1) = wrapper_binding end, %end.param // CHECK:STDOUT: %return.param: ref @IntRange.Make.%IntRange (%IntRange.2c4) = out_param call_param2 @@ -471,8 +471,8 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %impl.elem1.loc9_30.1: %Destroy.type = impl_witness_access constants.%Iterate.lookup_impl_witness.98d, element1 [symbolic_self = constants.%impl.elem1.990] // CHECK:STDOUT: %Core.ref.loc9_44: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc9_48: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc9_53: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc9_54.2: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc9_54.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %N.ref.loc9_53: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc9_54.2: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc9_54.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %Destroy.facet.loc9_54.2: %Destroy.type = facet_value %Int.loc9_54.2, (constants.%Destroy.lookup_impl_witness.173) [symbolic = %Destroy.facet.loc9_54.1 (constants.%Destroy.facet.7bb)] // CHECK:STDOUT: %.loc9_54: %Destroy.type = converted %Int.loc9_54.2, %Destroy.facet.loc9_54.2 [symbolic = %Destroy.facet.loc9_54.1 (constants.%Destroy.facet.7bb)] // CHECK:STDOUT: %rewrite.loc9_42.1 = requirement_rewrite %impl.elem1.loc9_30.1, %.loc9_54 [concrete] @@ -483,16 +483,16 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %impl.elem0.loc9_60.1: %facet_type.f48 = impl_witness_access constants.%Iterate.lookup_impl_witness.98d, element0 [symbolic_self = constants.%impl.elem0.94d] // CHECK:STDOUT: %Core.ref.loc9_75: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc9_79: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc9_84: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc9_85: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc9_54.1 (constants.%Int.67af24.1)] -// CHECK:STDOUT: %facet_value.loc9_85.2: %facet_type.f48 = facet_value %Int.loc9_85, (constants.%Destroy.lookup_impl_witness.173, constants.%Copy.lookup_impl_witness.df6) [symbolic = %facet_value.loc9_85.1 (constants.%facet_value)] -// CHECK:STDOUT: %.loc9_85.2: %facet_type.f48 = converted %Int.loc9_85, %facet_value.loc9_85.2 [symbolic = %facet_value.loc9_85.1 (constants.%facet_value)] +// CHECK:STDOUT: %N.ref.loc9_84: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc9_85: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc9_54.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %facet_value.loc9_85.2: %facet_type.f48 = facet_value %Int.loc9_85, (constants.%Destroy.lookup_impl_witness.173, constants.%Copy.lookup_impl_witness.df6) [symbolic = %facet_value.loc9_85.1 (constants.%facet_value.c69)] +// CHECK:STDOUT: %.loc9_85.2: %facet_type.f48 = converted %Int.loc9_85, %facet_value.loc9_85.2 [symbolic = %facet_value.loc9_85.1 (constants.%facet_value.c69)] // CHECK:STDOUT: %rewrite.loc9_73.1 = requirement_rewrite %impl.elem0.loc9_60.1, %.loc9_85.2 [concrete] // CHECK:STDOUT: %impl.elem1.loc9_30.2: %Destroy.type = impl_witness_access constants.%Iterate.lookup_impl_witness.1d8, element1 [symbolic_self = constants.%impl.elem1.6f4] // CHECK:STDOUT: %rewrite.loc9_42.2 = requirement_rewrite %impl.elem1.loc9_30.2, %.loc9_54 [concrete] // CHECK:STDOUT: %impl.elem0.loc9_60.2: %facet_type.f48 = impl_witness_access constants.%Iterate.lookup_impl_witness.1d8, element0 [symbolic_self = constants.%impl.elem0.294] // CHECK:STDOUT: %rewrite.loc9_73.2 = requirement_rewrite %impl.elem0.loc9_60.2, %.loc9_85.2 [concrete] -// CHECK:STDOUT: %.loc9_24: type = where_expr [symbolic = %Iterate_where.type (constants.%Iterate_where.type)] { +// CHECK:STDOUT: %.loc9_24: type = where_expr [symbolic = %Iterate_where.type (constants.%Iterate_where.type.836)] { // CHECK:STDOUT: %base_facet_type = requirement_base_facet_type %Iterate.ref [concrete] // CHECK:STDOUT: %rewrite.loc9_42.2 = requirement_rewrite %impl.elem1.loc9_30.2, %.loc9_54 [concrete] // CHECK:STDOUT: %rewrite.loc9_73.2 = requirement_rewrite %impl.elem0.loc9_60.2, %.loc9_85.2 [concrete] @@ -513,7 +513,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @IntRange.Make(@IntRange.%N.loc4_17.2: Core.IntLiteral) { -// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] +// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N.fe9)] // CHECK:STDOUT: %Int.loc5_28.1: type = class_type @Int, @Int(%N) [symbolic = %Int.loc5_28.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %pattern_type.loc5_16: type = pattern_type %Int.loc5_28.1 [symbolic = %pattern_type.loc5_16 (constants.%pattern_type.142cb7.1)] // CHECK:STDOUT: %start.param_patt.loc5_16.2: @IntRange.Make.%pattern_type.loc5_16 (%pattern_type.142cb7.1) = value_param_pattern [symbolic = %start.param_patt.loc5_16.2 (constants.%start.param_patt.b2c)] @@ -527,7 +527,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %return.patt.loc5_49.2: @IntRange.Make.%pattern_type.loc5_52 (%pattern_type.1ea) = return_slot_pattern %return.param_patt.loc5_52.2, %IntRange [symbolic = %return.patt.loc5_49.2 (constants.%return.patt.dbf)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: -// CHECK:STDOUT: %require_complete.loc5_16: = require_complete_type %Int.loc5_28.1 [symbolic = %require_complete.loc5_16 (constants.%require_complete.4dfb92.1)] +// CHECK:STDOUT: %require_complete.loc5_16: = require_complete_type %Int.loc5_28.1 [symbolic = %require_complete.loc5_16 (constants.%require_complete.4dfb92.2)] // CHECK:STDOUT: %require_complete.loc5_49: = require_complete_type %IntRange [symbolic = %require_complete.loc5_49 (constants.%require_complete.5d9)] // CHECK:STDOUT: %struct_type.start.end: type = struct_type {.start: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1), .end: @IntRange.Make.%Int.loc5_28.1 (%Int.67af24.1)} [symbolic = %struct_type.start.end (constants.%struct_type.start.end.d4d)] // CHECK:STDOUT: %.loc6_22.3: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc6_22.3 (constants.%.a53)] @@ -574,21 +574,21 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @IntRange.as.Iterate.impl.NewCursor(@IntRange.%N.loc4_17.2: Core.IntLiteral) { -// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] +// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N.fe9)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %pattern_type.loc10_18: type = pattern_type %IntRange [symbolic = %pattern_type.loc10_18 (constants.%pattern_type.1ea)] // CHECK:STDOUT: %self.param_patt.loc10_18.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = value_param_pattern [symbolic = %self.param_patt.loc10_18.2 (constants.%self.param_patt.5cc)] // CHECK:STDOUT: %self.patt.loc10_18.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_18 (%pattern_type.1ea) = at_binding_pattern self, %self.param_patt.loc10_18.2 [symbolic = %self.patt.loc10_18.2 (constants.%self.patt.13b)] // CHECK:STDOUT: %Int.loc10_37.1: type = class_type @Int, @Int(%N) [symbolic = %Int.loc10_37.1 (constants.%Int.67af24.1)] -// CHECK:STDOUT: %.loc10_37.1: Core.Form = init_form %Int.loc10_37.1 [symbolic = %.loc10_37.1 (constants.%.df5d8d.1)] +// CHECK:STDOUT: %.loc10_37.1: Core.Form = init_form %Int.loc10_37.1 [symbolic = %.loc10_37.1 (constants.%.df5d8d.2)] // CHECK:STDOUT: %pattern_type.loc10_37: type = pattern_type %Int.loc10_37.1 [symbolic = %pattern_type.loc10_37 (constants.%pattern_type.142cb7.1)] -// CHECK:STDOUT: %return.param_patt.loc10_37.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = out_param_pattern [symbolic = %return.param_patt.loc10_37.2 (constants.%return.param_patt.5a2679.1)] +// CHECK:STDOUT: %return.param_patt.loc10_37.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = out_param_pattern [symbolic = %return.param_patt.loc10_37.2 (constants.%return.param_patt.5a2679.2)] // CHECK:STDOUT: %return.patt.loc10_24.2: @IntRange.as.Iterate.impl.NewCursor.%pattern_type.loc10_37 (%pattern_type.142cb7.1) = return_slot_pattern %return.param_patt.loc10_37.2, %Int.loc10_37.1 [symbolic = %return.patt.loc10_24.2 (constants.%return.patt.434)] // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc10_18: = require_complete_type %IntRange [symbolic = %require_complete.loc10_18 (constants.%require_complete.5d9)] // CHECK:STDOUT: %IntRange.elem: type = unbound_element_type %IntRange, %Int.loc10_37.1 [symbolic = %IntRange.elem (constants.%IntRange.elem.bed)] -// CHECK:STDOUT: %require_complete.loc10_52: = require_complete_type %Int.loc10_37.1 [symbolic = %require_complete.loc10_52 (constants.%require_complete.4dfb92.1)] +// CHECK:STDOUT: %require_complete.loc10_52: = require_complete_type %Int.loc10_37.1 [symbolic = %require_complete.loc10_52 (constants.%require_complete.4dfb92.2)] // CHECK:STDOUT: %.loc10_52.5: require_specific_def_type = require_specific_def @Int.as.Copy.impl(%N) [symbolic = %.loc10_52.5 (constants.%.a53)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %Int.loc10_37.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.df6)] // CHECK:STDOUT: %Copy.facet.loc10_52.3: %Copy.type = facet_value %Int.loc10_37.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc10_52.3 (constants.%Copy.facet.f12)] @@ -619,7 +619,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @IntRange.as.Iterate.impl.Next(@IntRange.%N.loc4_17.2: Core.IntLiteral) { -// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N)] +// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N (constants.%N.fe9)] // CHECK:STDOUT: %IntRange: type = class_type @IntRange, @IntRange(%N) [symbolic = %IntRange (constants.%IntRange.2c4)] // CHECK:STDOUT: %pattern_type.loc11_13: type = pattern_type %IntRange [symbolic = %pattern_type.loc11_13 (constants.%pattern_type.1ea)] // CHECK:STDOUT: %self.param_patt.loc11_13.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_13 (%pattern_type.1ea) = value_param_pattern [symbolic = %self.param_patt.loc11_13.2 (constants.%self.param_patt.5cc)] @@ -631,7 +631,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %cursor.patt.loc11_25.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc11_25 (%pattern_type.833) = at_binding_pattern cursor, %cursor.param_patt.loc11_25.2 [symbolic = %cursor.patt.loc11_25.2 (constants.%cursor.patt.652)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %Int.loc11_37.1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.173)] // CHECK:STDOUT: %Copy.lookup_impl_witness: = lookup_impl_witness %Int.loc11_37.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.df6)] -// CHECK:STDOUT: %facet_value: %facet_type.f48 = facet_value %Int.loc11_37.1, (%Destroy.lookup_impl_witness, %Copy.lookup_impl_witness) [symbolic = %facet_value (constants.%facet_value)] +// CHECK:STDOUT: %facet_value: %facet_type.f48 = facet_value %Int.loc11_37.1, (%Destroy.lookup_impl_witness, %Copy.lookup_impl_witness) [symbolic = %facet_value (constants.%facet_value.c69)] // CHECK:STDOUT: %.loc11_69.3: require_specific_def_type = require_specific_def @T.as_type.as.OptionalStorage.impl(%facet_value) [symbolic = %.loc11_69.3 (constants.%.3c5)] // CHECK:STDOUT: %OptionalStorage.lookup_impl_witness: = lookup_impl_witness %Int.loc11_37.1, @OptionalStorage [symbolic = %OptionalStorage.lookup_impl_witness (constants.%OptionalStorage.lookup_impl_witness.a32)] // CHECK:STDOUT: %OptionalStorage.facet.loc11_69.1: %OptionalStorage.type = facet_value %Int.loc11_37.1, (%OptionalStorage.lookup_impl_witness) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] @@ -645,7 +645,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %require_complete.loc11_13: = require_complete_type %IntRange [symbolic = %require_complete.loc11_13 (constants.%require_complete.5d9)] // CHECK:STDOUT: %require_complete.loc11_25: = require_complete_type %ptr.loc11_38.1 [symbolic = %require_complete.loc11_25 (constants.%require_complete.f79)] // CHECK:STDOUT: %require_complete.loc11_41: = require_complete_type %Optional.loc11_69.1 [symbolic = %require_complete.loc11_41 (constants.%require_complete.63c)] -// CHECK:STDOUT: %require_complete.loc12: = require_complete_type %Int.loc11_37.1 [symbolic = %require_complete.loc12 (constants.%require_complete.4dfb92.1)] +// CHECK:STDOUT: %require_complete.loc12: = require_complete_type %Int.loc11_37.1 [symbolic = %require_complete.loc12 (constants.%require_complete.4dfb92.2)] // CHECK:STDOUT: %pattern_type.loc12: type = pattern_type %Int.loc11_37.1 [symbolic = %pattern_type.loc12 (constants.%pattern_type.142cb7.1)] // CHECK:STDOUT: %value.patt.loc12_16.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc12 (%pattern_type.142cb7.1) = ref_binding_pattern value [symbolic = %value.patt.loc12_16.2 (constants.%value.patt.505)] // CHECK:STDOUT: %value.var_patt.loc12_7.2: @IntRange.as.Iterate.impl.Next.%pattern_type.loc12 (%pattern_type.142cb7.1) = var_pattern %value.patt.loc12_16.2 [symbolic = %value.var_patt.loc12_7.2 (constants.%value.var_patt)] @@ -669,15 +669,15 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less: @IntRange.as.Iterate.impl.Next.%Int.as.OrderedWith.impl.Less.type (%Int.as.OrderedWith.impl.Less.type.f5c) = struct_value () [symbolic = %Int.as.OrderedWith.impl.Less (constants.%Int.as.OrderedWith.impl.Less.13c)] // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.specific_fn: = specific_function %Int.as.OrderedWith.impl.Less, @Int.as.OrderedWith.impl.Less.1(%N, %N) [symbolic = %Int.as.OrderedWith.impl.Less.specific_fn (constants.%Int.as.OrderedWith.impl.Less.specific_fn.6ce)] // CHECK:STDOUT: %.loc14_9.3: require_specific_def_type = require_specific_def @Int.as.Inc.impl(%N) [symbolic = %.loc14_9.3 (constants.%.f62)] -// CHECK:STDOUT: %Inc.lookup_impl_witness: = lookup_impl_witness %Int.loc11_37.1, @Inc [symbolic = %Inc.lookup_impl_witness (constants.%Inc.lookup_impl_witness)] -// CHECK:STDOUT: %Inc.facet.loc14_9.3: %Inc.type = facet_value %Int.loc11_37.1, (%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] +// CHECK:STDOUT: %Inc.lookup_impl_witness: = lookup_impl_witness %Int.loc11_37.1, @Inc [symbolic = %Inc.lookup_impl_witness (constants.%Inc.lookup_impl_witness.428)] +// CHECK:STDOUT: %Inc.facet.loc14_9.3: %Inc.type = facet_value %Int.loc11_37.1, (%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet.a38)] // CHECK:STDOUT: %Inc.WithSelf.Op.type: type = fn_type @Inc.WithSelf.Op, @Inc.WithSelf(%Inc.facet.loc14_9.3) [symbolic = %Inc.WithSelf.Op.type (constants.%Inc.WithSelf.Op.type.36a)] -// CHECK:STDOUT: %.loc14_9.4: type = fn_type_with_self_type %Inc.WithSelf.Op.type, %Inc.facet.loc14_9.3 [symbolic = %.loc14_9.4 (constants.%.952)] -// CHECK:STDOUT: %impl.elem0.loc14_9.2: @IntRange.as.Iterate.impl.Next.%.loc14_9.4 (%.952) = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_9.2 (constants.%impl.elem0.7b5)] +// CHECK:STDOUT: %.loc14_9.4: type = fn_type_with_self_type %Inc.WithSelf.Op.type, %Inc.facet.loc14_9.3 [symbolic = %.loc14_9.4 (constants.%.952c)] +// CHECK:STDOUT: %impl.elem0.loc14_9.2: @IntRange.as.Iterate.impl.Next.%.loc14_9.4 (%.952c) = impl_witness_access %Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_9.2 (constants.%impl.elem0.7b5)] // CHECK:STDOUT: %specific_impl_fn.loc14_9.2: = specific_impl_function %impl.elem0.loc14_9.2, @Inc.WithSelf.Op(%Inc.facet.loc14_9.3) [symbolic = %specific_impl_fn.loc14_9.2 (constants.%specific_impl_fn.ed1)] // CHECK:STDOUT: %Optional.Some.type: type = fn_type @Optional.Some, @Optional(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.Some.type (constants.%Optional.Some.type.422)] // CHECK:STDOUT: %Optional.Some: @IntRange.as.Iterate.impl.Next.%Optional.Some.type (%Optional.Some.type.422) = struct_value () [symbolic = %Optional.Some (constants.%Optional.Some.bcf)] -// CHECK:STDOUT: %Optional.Some.specific_fn.loc15_42.2: = specific_function %Optional.Some, @Optional.Some(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.Some.specific_fn.loc15_42.2 (constants.%Optional.Some.specific_fn)] +// CHECK:STDOUT: %Optional.Some.specific_fn.loc15_42.2: = specific_function %Optional.Some, @Optional.Some(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.Some.specific_fn.loc15_42.2 (constants.%Optional.Some.specific_fn.d36)] // CHECK:STDOUT: %Destroy.facet.loc12_7.5: %Destroy.type = facet_value %Int.loc11_37.1, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc12_7.5 (constants.%Destroy.facet.7bb)] // CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.loc12_7.5) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.8f1)] // CHECK:STDOUT: %.loc12_7.5: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %Destroy.facet.loc12_7.5 [symbolic = %.loc12_7.5 (constants.%.2c6)] @@ -685,7 +685,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %specific_impl_fn.loc12_7.3: = specific_impl_function %impl.elem0.loc12_7.3, @Destroy.WithSelf.Op(%Destroy.facet.loc12_7.5) [symbolic = %specific_impl_fn.loc12_7.3 (constants.%specific_impl_fn.693)] // CHECK:STDOUT: %Optional.None.type: type = fn_type @Optional.None, @Optional(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.None.type (constants.%Optional.None.type.2aa)] // CHECK:STDOUT: %Optional.None: @IntRange.as.Iterate.impl.Next.%Optional.None.type (%Optional.None.type.2aa) = struct_value () [symbolic = %Optional.None (constants.%Optional.None.fb7)] -// CHECK:STDOUT: %Optional.None.specific_fn.loc17_42.2: = specific_function %Optional.None, @Optional.None(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.None.specific_fn.loc17_42.2 (constants.%Optional.None.specific_fn)] +// CHECK:STDOUT: %Optional.None.specific_fn.loc17_42.2: = specific_function %Optional.None, @Optional.None(%OptionalStorage.facet.loc11_69.1) [symbolic = %Optional.None.specific_fn.loc17_42.2 (constants.%Optional.None.specific_fn.5e5)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%self.param: @IntRange.as.Iterate.impl.Next.%IntRange (%IntRange.2c4), %cursor.param: @IntRange.as.Iterate.impl.Next.%ptr.loc11_38.1 (%ptr.41e)) -> out %return.param: @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) { // CHECK:STDOUT: !entry: @@ -706,8 +706,8 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %.loc12_28: type = splice_block %Int.loc12 [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] { // CHECK:STDOUT: %Core.ref.loc12: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc12: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc12: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc12: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %N.ref.loc12: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc12: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: } // CHECK:STDOUT: %value: ref @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = wrapper_binding value, %value.var // CHECK:STDOUT: name_binding_decl { @@ -724,7 +724,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Less.ref: @IntRange.as.Iterate.impl.Next.%OrderedWith.assoc_type (%OrderedWith.assoc_type.e6d) = name_ref Less, %.loc13_17.1 [symbolic = %assoc0 (constants.%assoc0.ebc)] // CHECK:STDOUT: %impl.elem0.loc13: @IntRange.as.Iterate.impl.Next.%.loc13_17.3 (%.08f) = impl_witness_access constants.%OrderedWith.impl_witness.339, element0 [symbolic = %Int.as.OrderedWith.impl.Less (constants.%Int.as.OrderedWith.impl.Less.13c)] // CHECK:STDOUT: %bound_method.loc13_17.1: = bound_method %value.ref.loc13, %impl.elem0.loc13 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc13, @Int.as.OrderedWith.impl.Less.1(constants.%N, constants.%N) [symbolic = %Int.as.OrderedWith.impl.Less.specific_fn (constants.%Int.as.OrderedWith.impl.Less.specific_fn.6ce)] +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc13, @Int.as.OrderedWith.impl.Less.1(constants.%N.fe9, constants.%N.fe9) [symbolic = %Int.as.OrderedWith.impl.Less.specific_fn (constants.%Int.as.OrderedWith.impl.Less.specific_fn.6ce)] // CHECK:STDOUT: %bound_method.loc13_17.2: = bound_method %value.ref.loc13, %specific_fn // CHECK:STDOUT: %.loc13_11: @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = acquire_value %value.ref.loc13 // CHECK:STDOUT: %Int.as.OrderedWith.impl.Less.call: init bool = call %bound_method.loc13_17.2(%.loc13_11, %.loc13_23.2) @@ -735,21 +735,21 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: !if.then: // CHECK:STDOUT: %cursor.ref.loc14: @IntRange.as.Iterate.impl.Next.%ptr.loc11_38.1 (%ptr.41e) = name_ref cursor, %cursor // CHECK:STDOUT: %.loc14_11: ref @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = deref %cursor.ref.loc14 -// CHECK:STDOUT: %impl.elem0.loc14_9.1: @IntRange.as.Iterate.impl.Next.%.loc14_9.4 (%.952) = impl_witness_access constants.%Inc.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc14_9.2 (constants.%impl.elem0.7b5)] +// CHECK:STDOUT: %impl.elem0.loc14_9.1: @IntRange.as.Iterate.impl.Next.%.loc14_9.4 (%.952c) = impl_witness_access constants.%Inc.lookup_impl_witness.428, element0 [symbolic = %impl.elem0.loc14_9.2 (constants.%impl.elem0.7b5)] // CHECK:STDOUT: %bound_method.loc14_9.1: = bound_method %.loc14_11, %impl.elem0.loc14_9.1 -// CHECK:STDOUT: %Inc.facet.loc14_9.1: %Inc.type = facet_value constants.%Int.67af24.1, (constants.%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] -// CHECK:STDOUT: %.loc14_9.1: %Inc.type = converted constants.%Int.67af24.1, %Inc.facet.loc14_9.1 [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] -// CHECK:STDOUT: %Inc.facet.loc14_9.2: %Inc.type = facet_value constants.%Int.67af24.1, (constants.%Inc.lookup_impl_witness) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] -// CHECK:STDOUT: %.loc14_9.2: %Inc.type = converted constants.%Int.67af24.1, %Inc.facet.loc14_9.2 [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet)] -// CHECK:STDOUT: %specific_impl_fn.loc14_9.1: = specific_impl_function %impl.elem0.loc14_9.1, @Inc.WithSelf.Op(constants.%Inc.facet) [symbolic = %specific_impl_fn.loc14_9.2 (constants.%specific_impl_fn.ed1)] +// CHECK:STDOUT: %Inc.facet.loc14_9.1: %Inc.type = facet_value constants.%Int.67af24.1, (constants.%Inc.lookup_impl_witness.428) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet.a38)] +// CHECK:STDOUT: %.loc14_9.1: %Inc.type = converted constants.%Int.67af24.1, %Inc.facet.loc14_9.1 [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet.a38)] +// CHECK:STDOUT: %Inc.facet.loc14_9.2: %Inc.type = facet_value constants.%Int.67af24.1, (constants.%Inc.lookup_impl_witness.428) [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet.a38)] +// CHECK:STDOUT: %.loc14_9.2: %Inc.type = converted constants.%Int.67af24.1, %Inc.facet.loc14_9.2 [symbolic = %Inc.facet.loc14_9.3 (constants.%Inc.facet.a38)] +// CHECK:STDOUT: %specific_impl_fn.loc14_9.1: = specific_impl_function %impl.elem0.loc14_9.1, @Inc.WithSelf.Op(constants.%Inc.facet.a38) [symbolic = %specific_impl_fn.loc14_9.2 (constants.%specific_impl_fn.ed1)] // CHECK:STDOUT: %bound_method.loc14_9.2: = bound_method %.loc14_11, %specific_impl_fn.loc14_9.1 // CHECK:STDOUT: %Inc.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc14_9.2(%.loc14_11) // CHECK:STDOUT: %Core.ref.loc15_16: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref.loc15: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] // CHECK:STDOUT: %Core.ref.loc15_30: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc15: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc15: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc15: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %N.ref.loc15: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc15: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %OptionalStorage.facet.loc15_41: %OptionalStorage.type = facet_value %Int.loc15, (constants.%OptionalStorage.lookup_impl_witness.a32) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %.loc15_41: %OptionalStorage.type = converted %Int.loc15, %OptionalStorage.facet.loc15_41 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %Optional.loc15: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.loc11_69.1 (constants.%Optional.5ec)] @@ -760,7 +760,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %.loc15_53.1: %OptionalStorage.type = converted constants.%Int.67af24.1, %OptionalStorage.facet.loc15_53.1 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %OptionalStorage.facet.loc15_53.2: %OptionalStorage.type = facet_value constants.%Int.67af24.1, (constants.%OptionalStorage.lookup_impl_witness.a32) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %.loc15_53.2: %OptionalStorage.type = converted constants.%Int.67af24.1, %OptionalStorage.facet.loc15_53.2 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] -// CHECK:STDOUT: %Optional.Some.specific_fn.loc15_42.1: = specific_function %Some.ref, @Optional.Some(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.Some.specific_fn.loc15_42.2 (constants.%Optional.Some.specific_fn)] +// CHECK:STDOUT: %Optional.Some.specific_fn.loc15_42.1: = specific_function %Some.ref, @Optional.Some(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.Some.specific_fn.loc15_42.2 (constants.%Optional.Some.specific_fn.d36)] // CHECK:STDOUT: %.loc11_69.1: ref @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) = splice_block %return.param {} // CHECK:STDOUT: %.loc15_48: @IntRange.as.Iterate.impl.Next.%Int.loc11_37.1 (%Int.67af24.1) = acquire_value %value.ref.loc15 // CHECK:STDOUT: %Optional.Some.call: init @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) to %.loc11_69.1 = call %Optional.Some.specific_fn.loc15_42.1(%.loc15_48) @@ -780,14 +780,14 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %Optional.ref.loc17: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] // CHECK:STDOUT: %Core.ref.loc17_30: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Int.ref.loc17: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] -// CHECK:STDOUT: %N.ref.loc17: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N)] -// CHECK:STDOUT: %Int.loc17: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] +// CHECK:STDOUT: %N.ref.loc17: Core.IntLiteral = name_ref N, @IntRange.%N.loc4_17.2 [symbolic = %N (constants.%N.fe9)] +// CHECK:STDOUT: %Int.loc17: type = class_type @Int, @Int(constants.%N.fe9) [symbolic = %Int.loc11_37.1 (constants.%Int.67af24.1)] // CHECK:STDOUT: %OptionalStorage.facet.loc17: %OptionalStorage.type = facet_value %Int.loc17, (constants.%OptionalStorage.lookup_impl_witness.a32) [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %.loc17_41: %OptionalStorage.type = converted %Int.loc17, %OptionalStorage.facet.loc17 [symbolic = %OptionalStorage.facet.loc11_69.1 (constants.%OptionalStorage.facet.b99)] // CHECK:STDOUT: %Optional.loc17: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.loc11_69.1 (constants.%Optional.5ec)] // CHECK:STDOUT: %.loc17_42: @IntRange.as.Iterate.impl.Next.%Optional.None.type (%Optional.None.type.2aa) = specific_constant imports.%Core.import_ref.6e4, @Optional(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.None (constants.%Optional.None.fb7)] // CHECK:STDOUT: %None.ref: @IntRange.as.Iterate.impl.Next.%Optional.None.type (%Optional.None.type.2aa) = name_ref None, %.loc17_42 [symbolic = %Optional.None (constants.%Optional.None.fb7)] -// CHECK:STDOUT: %Optional.None.specific_fn.loc17_42.1: = specific_function %None.ref, @Optional.None(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.None.specific_fn.loc17_42.2 (constants.%Optional.None.specific_fn)] +// CHECK:STDOUT: %Optional.None.specific_fn.loc17_42.1: = specific_function %None.ref, @Optional.None(constants.%OptionalStorage.facet.b99) [symbolic = %Optional.None.specific_fn.loc17_42.2 (constants.%Optional.None.specific_fn.5e5)] // CHECK:STDOUT: %.loc11_69.2: ref @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) = splice_block %return.param {} // CHECK:STDOUT: %Optional.None.call: init @IntRange.as.Iterate.impl.Next.%Optional.loc11_69.1 (%Optional.5ec) to %.loc11_69.2 = call %Optional.None.specific_fn.loc17_42.1() // CHECK:STDOUT: %impl.elem0.loc12_7.2: @IntRange.as.Iterate.impl.Next.%.loc12_7.5 (%.2c6) = impl_witness_access constants.%Destroy.lookup_impl_witness.173, element0 [symbolic = %impl.elem0.loc12_7.3 (constants.%impl.elem0.604)] @@ -816,10 +816,10 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %end.ref: %i32 = name_ref end, %end // CHECK:STDOUT: %IntRange.Make.specific_fn: = specific_function %Make.ref, @IntRange.Make(constants.%int_32) [concrete = constants.%IntRange.Make.specific_fn] // CHECK:STDOUT: %.loc26_34.1: ref %IntRange.bbd = splice_block %return.param {} -// CHECK:STDOUT: %impl.elem0: %.1c5 = impl_witness_access constants.%ImplicitAs.impl_witness.a23, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc27_28.1: = bound_method %int_0, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] +// CHECK:STDOUT: %impl.elem0: %.d74 = impl_witness_access constants.%ImplicitAs.impl_witness.778, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc27_28.1: = bound_method %int_0, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.7b4] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc27_28.2: = bound_method %int_0, %specific_fn [concrete = constants.%bound_method] +// CHECK:STDOUT: %bound_method.loc27_28.2: = bound_method %int_0, %specific_fn [concrete = constants.%bound_method.6e0] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc27_28.2(%int_0) [concrete = constants.%int_0.3c0] // CHECK:STDOUT: %.loc27_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_0.3c0] // CHECK:STDOUT: %.loc27_28.2: %i32 = converted %int_0, %.loc27_28.1 [concrete = constants.%int_0.3c0] @@ -829,15 +829,15 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: !observes: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange(constants.%N) { -// CHECK:STDOUT: %N.patt.loc4_17.2 => constants.%N.patt -// CHECK:STDOUT: %N.loc4_17.1 => constants.%N +// CHECK:STDOUT: specific @IntRange(constants.%N.fe9) { +// CHECK:STDOUT: %N.patt.loc4_17.2 => constants.%N.patt.aa5 +// CHECK:STDOUT: %N.loc4_17.1 => constants.%N.fe9 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %IntRange.Make.type => constants.%IntRange.Make.type.522 // CHECK:STDOUT: %IntRange.Make => constants.%IntRange.Make.8ef // CHECK:STDOUT: %Int => constants.%Int.67af24.1 -// CHECK:STDOUT: %require_complete => constants.%require_complete.4dfb92.1 +// CHECK:STDOUT: %require_complete => constants.%require_complete.4dfb92.2 // CHECK:STDOUT: %pattern_type => constants.%pattern_type.142cb7.1 // CHECK:STDOUT: %start.patt => constants.%start.patt.477 // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 @@ -847,8 +847,8 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %complete_type.loc24_1.2 => constants.%complete_type.aa1 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.Make(constants.%N) { -// CHECK:STDOUT: %N => constants.%N +// CHECK:STDOUT: specific @IntRange.Make(constants.%N.fe9) { +// CHECK:STDOUT: %N => constants.%N.fe9 // CHECK:STDOUT: %Int.loc5_28.1 => constants.%Int.67af24.1 // CHECK:STDOUT: %pattern_type.loc5_16 => constants.%pattern_type.142cb7.1 // CHECK:STDOUT: %start.param_patt.loc5_16.2 => constants.%start.param_patt.b2c @@ -862,17 +862,17 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %return.patt.loc5_49.2 => constants.%return.patt.dbf // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Iterate.impl(constants.%N) { -// CHECK:STDOUT: %N => constants.%N +// CHECK:STDOUT: specific @IntRange.as.Iterate.impl(constants.%N.fe9) { +// CHECK:STDOUT: %N => constants.%N.fe9 // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %Int.loc9_54.1 => constants.%Int.67af24.1 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%Destroy.lookup_impl_witness.173 // CHECK:STDOUT: %Destroy.facet.loc9_54.1 => constants.%Destroy.facet.7bb // CHECK:STDOUT: %.loc9_85.1 => constants.%.a53 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.df6 -// CHECK:STDOUT: %facet_value.loc9_85.1 => constants.%facet_value -// CHECK:STDOUT: %Iterate_where.type => constants.%Iterate_where.type -// CHECK:STDOUT: %Iterate.impl_witness.loc9_87.2 => constants.%Iterate.impl_witness +// CHECK:STDOUT: %facet_value.loc9_85.1 => constants.%facet_value.c69 +// CHECK:STDOUT: %Iterate_where.type => constants.%Iterate_where.type.836 +// CHECK:STDOUT: %Iterate.impl_witness.loc9_87.2 => constants.%Iterate.impl_witness.81c // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete => constants.%require_complete.466 @@ -882,21 +882,21 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %IntRange.as.Iterate.impl.Next => constants.%IntRange.as.Iterate.impl.Next // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Iterate.impl.NewCursor(constants.%N) { -// CHECK:STDOUT: %N => constants.%N +// CHECK:STDOUT: specific @IntRange.as.Iterate.impl.NewCursor(constants.%N.fe9) { +// CHECK:STDOUT: %N => constants.%N.fe9 // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %pattern_type.loc10_18 => constants.%pattern_type.1ea // CHECK:STDOUT: %self.param_patt.loc10_18.2 => constants.%self.param_patt.5cc // CHECK:STDOUT: %self.patt.loc10_18.2 => constants.%self.patt.13b // CHECK:STDOUT: %Int.loc10_37.1 => constants.%Int.67af24.1 -// CHECK:STDOUT: %.loc10_37.1 => constants.%.df5d8d.1 +// CHECK:STDOUT: %.loc10_37.1 => constants.%.df5d8d.2 // CHECK:STDOUT: %pattern_type.loc10_37 => constants.%pattern_type.142cb7.1 -// CHECK:STDOUT: %return.param_patt.loc10_37.2 => constants.%return.param_patt.5a2679.1 +// CHECK:STDOUT: %return.param_patt.loc10_37.2 => constants.%return.param_patt.5a2679.2 // CHECK:STDOUT: %return.patt.loc10_24.2 => constants.%return.patt.434 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @IntRange.as.Iterate.impl.Next(constants.%N) { -// CHECK:STDOUT: %N => constants.%N +// CHECK:STDOUT: specific @IntRange.as.Iterate.impl.Next(constants.%N.fe9) { +// CHECK:STDOUT: %N => constants.%N.fe9 // CHECK:STDOUT: %IntRange => constants.%IntRange.2c4 // CHECK:STDOUT: %pattern_type.loc11_13 => constants.%pattern_type.1ea // CHECK:STDOUT: %self.param_patt.loc11_13.2 => constants.%self.param_patt.5cc @@ -908,7 +908,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: %cursor.patt.loc11_25.2 => constants.%cursor.patt.652 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%Destroy.lookup_impl_witness.173 // CHECK:STDOUT: %Copy.lookup_impl_witness => constants.%Copy.lookup_impl_witness.df6 -// CHECK:STDOUT: %facet_value => constants.%facet_value +// CHECK:STDOUT: %facet_value => constants.%facet_value.c69 // CHECK:STDOUT: %.loc11_69.3 => constants.%.3c5 // CHECK:STDOUT: %OptionalStorage.lookup_impl_witness => constants.%OptionalStorage.lookup_impl_witness.a32 // CHECK:STDOUT: %OptionalStorage.facet.loc11_69.1 => constants.%OptionalStorage.facet.b99 @@ -920,7 +920,7 @@ fn Read(y:! Core.IntLiteral) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @IntRange(constants.%int_32) { -// CHECK:STDOUT: %N.patt.loc4_17.2 => constants.%N.patt +// CHECK:STDOUT: %N.patt.loc4_17.2 => constants.%N.patt.aa5 // CHECK:STDOUT: %N.loc4_17.1 => constants.%int_32 // CHECK:STDOUT: // CHECK:STDOUT: !definition: diff --git a/toolchain/check/testdata/impl/impl_assoc_const.carbon b/toolchain/check/testdata/impl/impl_assoc_const.carbon index 0a5dc540fda6..c4fd95eada50 100644 --- a/toolchain/check/testdata/impl/impl_assoc_const.carbon +++ b/toolchain/check/testdata/impl/impl_assoc_const.carbon @@ -400,6 +400,27 @@ fn G() { C as (Z where .Z1 = .Self); } +// --- assoc_const_impls_in_decl.carbon +library "[[@TEST_NAME]]"; + +interface I { let X:! type; } +interface J {} + +// Test that we avoid an infinite impl lookup cycle from an LookupImplWitness +// instruction in the impl declaration. When matching this impl during impl +// lookup, we deduce and replace `T` with a specific argument, and resolve that +// specific's decl eval block. Doing so re-evaluates the lookup for `I` inside +// `.X`. If that lookup found this impl (since it's a final impl, eval can find +// it), we would deduce and produce an infinite cycle. Instructions inside the +// impl decl should not be able to find the impl. +final impl forall [T:! type] T as I where .X impls J and .X = () {} + +fn F(unused T:! I where .X = ()) {} +fn G() { + class C; + F(C); +} + // CHECK:STDOUT: --- fail_many_different.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/interop/cpp/range_for.carbon b/toolchain/check/testdata/interop/cpp/range_for.carbon index 822a833b9093..c96ae368a551 100644 --- a/toolchain/check/testdata/interop/cpp/range_for.carbon +++ b/toolchain/check/testdata/interop/cpp/range_for.carbon @@ -739,32 +739,12 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Int.67af24.1: type = class_type @Int, @Int(%N.fe9) [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc30_54.2 [concrete] -// CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.df9cc1.2: = custom_witness (%Destroy.Op.1a2547.2), @Destroy [concrete] -// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N.fe9) [symbolic] -// CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] -// CHECK:STDOUT: %Copy.impl_witness.0e0: = impl_witness imports.%Copy.impl_witness_table.367, @Int.as.Copy.impl(%int_32) [concrete] -// CHECK:STDOUT: %facet_value.ba2: %facet_type.f48 = facet_value %i32, (%custom_witness.df9cc1.2, %Copy.impl_witness.0e0) [concrete] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.ec1: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ba2> [concrete] -// CHECK:STDOUT: %pattern_type.a4d: type = pattern_type %Iterate_where.type.ec1 [concrete] -// CHECK:STDOUT: %R.patt.bbc: %pattern_type.a4d = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R.869: %Iterate_where.type.ec1 = symbolic_binding R, 0 [symbolic] -// CHECK:STDOUT: %R.as_type.a02: type = facet_access_type %R.869 [symbolic] -// CHECK:STDOUT: %pattern_type.b2da: type = pattern_type %R.as_type.a02 [symbolic] -// CHECK:STDOUT: %r.param_patt.774: %pattern_type.b2da = value_param_pattern [symbolic] -// CHECK:STDOUT: %r.patt.54b: %pattern_type.b2da = at_binding_pattern r, %r.param_patt.774 [symbolic] -// CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Int.67af24.2: type = class_type @Int, @Int(%To) [symbolic] -// CHECK:STDOUT: %facet_type.037: type = facet_type <@IntFitsIn, @IntFitsIn(%Int.67af24.2) & @AnyInt> [symbolic] -// CHECK:STDOUT: %From.6a4: %facet_type.037 = symbolic_binding From, 1 [symbolic] -// CHECK:STDOUT: %From.as_type.as.ImplicitAs.impl.Convert.type.7fa: type = fn_type @From.as_type.as.ImplicitAs.impl.Convert, @From.as_type.as.ImplicitAs.impl(%To, %From.6a4) [symbolic] -// CHECK:STDOUT: %From.as_type.as.ImplicitAs.impl.Convert.643: %From.as_type.as.ImplicitAs.impl.Convert.type.7fa = struct_value () [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.aed: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.f6b: = lookup_impl_witness %.Self.aed, @CppRangeForIterate [symbolic_self] @@ -785,10 +765,30 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.lookup_impl_witness.ec3: = lookup_impl_witness %impl.elem0.af7, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.a7a: = lookup_impl_witness %impl.elem0.af7, @Copy [symbolic] // CHECK:STDOUT: %facet_value.194: %facet_type.f48 = facet_value %impl.elem0.af7, (%Destroy.lookup_impl_witness.ec3, %Copy.lookup_impl_witness.a7a) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.d8f: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c6d: %R.as_type.as.Iterate.impl.Next.type.d8f = struct_value () [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.127: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.627: %R.as_type.as.Iterate.impl.NewCursor.type.127 = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.c6a: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.49a: %R.as_type.as.Iterate.impl.Next.type.c6a = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.2e2: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.71b: %R.as_type.as.Iterate.impl.NewCursor.type.2e2 = struct_value () [symbolic] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc30_54.2 [concrete] +// CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.df9cc1.3: = custom_witness (%Destroy.Op.1a2547.3), @Destroy [concrete] +// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N.fe9) [symbolic] +// CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] +// CHECK:STDOUT: %Copy.impl_witness.0e0: = impl_witness imports.%Copy.impl_witness_table.367, @Int.as.Copy.impl(%int_32) [concrete] +// CHECK:STDOUT: %facet_value.ba2: %facet_type.f48 = facet_value %i32, (%custom_witness.df9cc1.3, %Copy.impl_witness.0e0) [concrete] +// CHECK:STDOUT: %Iterate_where.type.ec1: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ba2> [concrete] +// CHECK:STDOUT: %pattern_type.a4d: type = pattern_type %Iterate_where.type.ec1 [concrete] +// CHECK:STDOUT: %R.patt.bbc: %pattern_type.a4d = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R.869: %Iterate_where.type.ec1 = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %R.as_type.a02: type = facet_access_type %R.869 [symbolic] +// CHECK:STDOUT: %pattern_type.b2da: type = pattern_type %R.as_type.a02 [symbolic] +// CHECK:STDOUT: %r.param_patt.774: %pattern_type.b2da = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.54b: %pattern_type.b2da = at_binding_pattern r, %r.param_patt.774 [symbolic] +// CHECK:STDOUT: %facet_type.037: type = facet_type <@IntFitsIn, @IntFitsIn(%Int.67af24.2) & @AnyInt> [symbolic] +// CHECK:STDOUT: %From.6a4: %facet_type.037 = symbolic_binding From, 1 [symbolic] +// CHECK:STDOUT: %From.as_type.as.ImplicitAs.impl.Convert.type.7fa: type = fn_type @From.as_type.as.ImplicitAs.impl.Convert, @From.as_type.as.ImplicitAs.impl(%To, %From.6a4) [symbolic] +// CHECK:STDOUT: %From.as_type.as.ImplicitAs.impl.Convert.643: %From.as_type.as.ImplicitAs.impl.Convert.type.7fa = struct_value () [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.6b6 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.18b: = lookup_impl_witness %R.869, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.353: %Iterate.type = facet_value %R.as_type.a02, (%Iterate.lookup_impl_witness.18b) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.8fb: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.353) [symbolic] @@ -810,7 +810,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Optional.HasValue.bef: %Optional.HasValue.type.560 = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.11a: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.563) [concrete] // CHECK:STDOUT: %Optional.Get.0ee: %Optional.Get.type.11a = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.d07318.2: %Destroy.type = facet_value %i32, (%custom_witness.df9cc1.2) [concrete] +// CHECK:STDOUT: %Destroy.facet.d07318.2: %Destroy.type = facet_value %i32, (%custom_witness.df9cc1.3) [concrete] // CHECK:STDOUT: %MaybeUnformed.023: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.d07318.2) [concrete] // CHECK:STDOUT: %.1d6a7: type = maybe_unformed_type %i32 [concrete] // CHECK:STDOUT: %struct_type.value.has_value.ad0: type = struct_type {.value: %MaybeUnformed.023, .has_value: bool} [concrete] @@ -877,19 +877,19 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Iterator.Op.type.0aed5d.4: type = fn_type @Iterator.Op.4 [concrete] // CHECK:STDOUT: %Iterator.Op.a2a866.4: %Iterator.Op.type.0aed5d.4 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.444: = custom_witness (%Iterator.Op.a2a866.4), @Inc [concrete] -// CHECK:STDOUT: %facet_value.cd6: %CppRangeForIterate_where.type.1c721f.1 = facet_value %MutableRange, (%custom_witness.df9cc1.2, %Copy.impl_witness.0e0, %custom_witness.ed3, %custom_witness.955, %custom_witness.1f5, %custom_witness.ef8, %custom_witness.981, %custom_witness.444) [concrete] +// CHECK:STDOUT: %facet_value.cd6: %CppRangeForIterate_where.type.1c721f.1 = facet_value %MutableRange, (%custom_witness.df9cc1.3, %Copy.impl_witness.0e0, %custom_witness.ed3, %custom_witness.955, %custom_witness.1f5, %custom_witness.ef8, %custom_witness.981, %custom_witness.444) [concrete] // CHECK:STDOUT: %tuple.type.508: type = tuple_type (%Iterator.3ee, %Iterator.3ee) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.10: type = fn_type @Destroy.Op.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.10: %Destroy.Op.type.1d8f74.10 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.10: = custom_witness (%Destroy.Op.1a2547.10), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.30f: %Destroy.type = facet_value %tuple.type.508, (%custom_witness.df9cc1.10) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.b92: = impl_witness imports.%Iterate.impl_witness_table.ccd, @R.as_type.as.Iterate.impl(%facet_value.cd6) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.c9f: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.cd6) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.d98: %R.as_type.as.Iterate.impl.NewCursor.type.c9f = struct_value () [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.ad0: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.cd6) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.d29: %R.as_type.as.Iterate.impl.Next.type.ad0 = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.b2e: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.b92) [concrete] -// CHECK:STDOUT: %facet_value.8de: %Iterate_where.type.ec1 = facet_value %MutableRange, (%Iterate.impl_witness.b92) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.7dd: = impl_witness imports.%Iterate.impl_witness_table.cd6, @R.as_type.as.Iterate.impl(%facet_value.cd6) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.13b: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.cd6) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.0a0: %R.as_type.as.Iterate.impl.NewCursor.type.13b = struct_value () [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.4fa: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.cd6) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.693: %R.as_type.as.Iterate.impl.Next.type.4fa = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.3e3: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.7dd) [concrete] +// CHECK:STDOUT: %facet_value.04f: %Iterate_where.type.ec1 = facet_value %MutableRange, (%Iterate.impl_witness.7dd) [concrete] // CHECK:STDOUT: %r.param_patt.c79: %pattern_type.e635 = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.16f: %pattern_type.e635 = at_binding_pattern r, %r.param_patt.c79 [concrete] // CHECK:STDOUT: %Iterator.260: type = class_type @Iterator.2 [concrete] @@ -915,35 +915,35 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Iterator.Op.type.0f34b8.4: type = fn_type @Iterator.Op.8 [concrete] // CHECK:STDOUT: %Iterator.Op.1c3e4a.4: %Iterator.Op.type.0f34b8.4 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.746: = custom_witness (%Iterator.Op.1c3e4a.4), @Inc [concrete] -// CHECK:STDOUT: %facet_value.e88: %CppRangeForIterate_where.type.1c721f.1 = facet_value %ConstRange, (%custom_witness.df9cc1.2, %Copy.impl_witness.0e0, %custom_witness.23e, %custom_witness.6e8, %custom_witness.150, %custom_witness.adb, %custom_witness.941, %custom_witness.746) [concrete] +// CHECK:STDOUT: %facet_value.e88: %CppRangeForIterate_where.type.1c721f.1 = facet_value %ConstRange, (%custom_witness.df9cc1.3, %Copy.impl_witness.0e0, %custom_witness.23e, %custom_witness.6e8, %custom_witness.150, %custom_witness.adb, %custom_witness.941, %custom_witness.746) [concrete] // CHECK:STDOUT: %tuple.type.69f: type = tuple_type (%Iterator.260, %Iterator.260) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.11: type = fn_type @Destroy.Op.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.11: %Destroy.Op.type.1d8f74.11 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.11: = custom_witness (%Destroy.Op.1a2547.11), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.e4c: %Destroy.type = facet_value %tuple.type.69f, (%custom_witness.df9cc1.11) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.a61: = impl_witness imports.%Iterate.impl_witness_table.ccd, @R.as_type.as.Iterate.impl(%facet_value.e88) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.50d: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.e88) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.0b2: %R.as_type.as.Iterate.impl.NewCursor.type.50d = struct_value () [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.121: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.e88) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.bec: %R.as_type.as.Iterate.impl.Next.type.121 = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.d83: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.a61) [concrete] -// CHECK:STDOUT: %facet_value.227: %Iterate_where.type.ec1 = facet_value %ConstRange, (%Iterate.impl_witness.a61) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.cf5: = impl_witness imports.%Iterate.impl_witness_table.cd6, @R.as_type.as.Iterate.impl(%facet_value.e88) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.ee6: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.e88) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.e1b: %R.as_type.as.Iterate.impl.NewCursor.type.ee6 = struct_value () [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.c4a: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.e88) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.119: %R.as_type.as.Iterate.impl.Next.type.c4a = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.da6: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.cf5) [concrete] +// CHECK:STDOUT: %facet_value.f37: %Iterate_where.type.ec1 = facet_value %ConstRange, (%Iterate.impl_witness.cf5) [concrete] // CHECK:STDOUT: %r.param_patt.83e: %pattern_type.0ba = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.116: %pattern_type.0ba = at_binding_pattern r, %r.param_patt.83e [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.7db: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.b2e) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.c02: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.b2e) [concrete] -// CHECK:STDOUT: %.55e: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.7db, %Iterate.facet.b2e [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.bad: = specific_function %R.as_type.as.Iterate.impl.NewCursor.d98, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.cd6) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.083: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.3e3) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.4ed: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.3e3) [concrete] +// CHECK:STDOUT: %.0e97: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.083, %Iterate.facet.3e3 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.3ac: = specific_function %R.as_type.as.Iterate.impl.NewCursor.0a0, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.cd6) [concrete] // CHECK:STDOUT: %ptr.45c: type = ptr_type %tuple.type.508 [concrete] -// CHECK:STDOUT: %.d4b: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.c02, %Iterate.facet.b2e [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn.4ca: = specific_function %R.as_type.as.Iterate.impl.Next.d29, @R.as_type.as.Iterate.impl.Next(%facet_value.cd6) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.825: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.d83) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.d4a: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.d83) [concrete] -// CHECK:STDOUT: %.e89c: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.825, %Iterate.facet.d83 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.e65: = specific_function %R.as_type.as.Iterate.impl.NewCursor.0b2, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.e88) [concrete] +// CHECK:STDOUT: %.037: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.4ed, %Iterate.facet.3e3 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn.50d: = specific_function %R.as_type.as.Iterate.impl.Next.693, @R.as_type.as.Iterate.impl.Next(%facet_value.cd6) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.005: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.da6) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.212: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.da6) [concrete] +// CHECK:STDOUT: %.bb7: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.005, %Iterate.facet.da6 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.e84: = specific_function %R.as_type.as.Iterate.impl.NewCursor.e1b, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.e88) [concrete] // CHECK:STDOUT: %ptr.c5c: type = ptr_type %tuple.type.69f [concrete] -// CHECK:STDOUT: %.f6d: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.d4a, %Iterate.facet.d83 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn.bf1: = specific_function %R.as_type.as.Iterate.impl.Next.bec, @R.as_type.as.Iterate.impl.Next(%facet_value.e88) [concrete] +// CHECK:STDOUT: %.fc66: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.212, %Iterate.facet.da6 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn.9ce: = specific_function %R.as_type.as.Iterate.impl.Next.119, @R.as_type.as.Iterate.impl.Next(%facet_value.e88) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.7ec: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.e4c) [concrete] // CHECK:STDOUT: %.0e7: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.7ec, %Destroy.facet.e4c [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.c6c: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.30f) [concrete] @@ -962,15 +962,15 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.e31: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.671) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.a54)] // CHECK:STDOUT: %Core.import_ref.cea = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.199 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.6d6, %Core.import_ref.6f3, %Core.import_ref.af2, %Core.import_ref.e31, %Core.import_ref.cea), @T.as_type.as.OptionalStorage.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.301: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] +// CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] +// CHECK:STDOUT: %Core.import_ref.f6b: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.2e2) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.71b)] +// CHECK:STDOUT: %Core.import_ref.630: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.c6a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.49a)] +// CHECK:STDOUT: %Iterate.impl_witness_table.cd6 = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.f6b, %Core.import_ref.630), @R.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %Core.import_ref.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.367 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.2a4: @From.as_type.as.ImplicitAs.impl.%From.as_type.as.ImplicitAs.impl.Convert.type (%From.as_type.as.ImplicitAs.impl.Convert.type.7fa) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @From.as_type.as.ImplicitAs.impl.%From.as_type.as.ImplicitAs.impl.Convert (constants.%From.as_type.as.ImplicitAs.impl.Convert.643)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.3b9 = impl_witness_table (%Core.import_ref.2a4), @From.as_type.as.ImplicitAs.impl [concrete] -// CHECK:STDOUT: %Core.import_ref.301: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] -// CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] -// CHECK:STDOUT: %Core.import_ref.940: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.127) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.627)] -// CHECK:STDOUT: %Core.import_ref.fe7: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.d8f) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.c6d)] -// CHECK:STDOUT: %Iterate.impl_witness_table.ccd = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.940, %Core.import_ref.fe7), @R.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %Core.import_ref.098: @Int.as.AddAssignWith.impl.%Int.as.AddAssignWith.impl.Op.type.2 (%Int.as.AddAssignWith.impl.Op.type.a58fbe.1) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.AddAssignWith.impl.%Int.as.AddAssignWith.impl.Op.2 (constants.%Int.as.AddAssignWith.impl.Op.45b360.1)] // CHECK:STDOUT: %AddAssignWith.impl_witness_table = impl_witness_table (%Core.import_ref.098), @Int.as.AddAssignWith.impl [concrete] // CHECK:STDOUT: %Core.Op.1b1: @Int.as.AddAssignWith.impl.%Int.as.AddAssignWith.impl.Op.type.1 (%Int.as.AddAssignWith.impl.Op.type.a58fbe.2) = import_ref Core//prelude/types/int, Op, loaded [symbolic = @Int.as.AddAssignWith.impl.%Int.as.AddAssignWith.impl.Op.1 (constants.%Int.as.AddAssignWith.impl.Op.45b360.2)] @@ -1134,13 +1134,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %i.patt.loc49: %pattern_type.6b6 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %m.ref: ref %MutableRange = name_ref m, %m -// CHECK:STDOUT: %impl.elem2.loc49: %.55e = impl_witness_access constants.%Iterate.impl_witness.b92, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.d98] +// CHECK:STDOUT: %impl.elem2.loc49: %.0e97 = impl_witness_access constants.%Iterate.impl_witness.7dd, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.0a0] // CHECK:STDOUT: %bound_method.loc49_19.1: = bound_method %m.ref, %impl.elem2.loc49 -// CHECK:STDOUT: %facet_value.loc49_19.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.0e0, constants.%custom_witness.ed3, constants.%custom_witness.955, constants.%custom_witness.1f5, constants.%custom_witness.ef8, constants.%custom_witness.981, constants.%custom_witness.444) [concrete = constants.%facet_value.cd6] +// CHECK:STDOUT: %facet_value.loc49_19.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.0e0, constants.%custom_witness.ed3, constants.%custom_witness.955, constants.%custom_witness.1f5, constants.%custom_witness.ef8, constants.%custom_witness.981, constants.%custom_witness.444) [concrete = constants.%facet_value.cd6] // CHECK:STDOUT: %.loc49_19.1: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc49_19.1 [concrete = constants.%facet_value.cd6] -// CHECK:STDOUT: %facet_value.loc49_19.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.0e0, constants.%custom_witness.ed3, constants.%custom_witness.955, constants.%custom_witness.1f5, constants.%custom_witness.ef8, constants.%custom_witness.981, constants.%custom_witness.444) [concrete = constants.%facet_value.cd6] +// CHECK:STDOUT: %facet_value.loc49_19.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.0e0, constants.%custom_witness.ed3, constants.%custom_witness.955, constants.%custom_witness.1f5, constants.%custom_witness.ef8, constants.%custom_witness.981, constants.%custom_witness.444) [concrete = constants.%facet_value.cd6] // CHECK:STDOUT: %.loc49_19.2: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc49_19.2 [concrete = constants.%facet_value.cd6] -// CHECK:STDOUT: %specific_fn.loc49_19.1: = specific_function %impl.elem2.loc49, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.cd6) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.bad] +// CHECK:STDOUT: %specific_fn.loc49_19.1: = specific_function %impl.elem2.loc49, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.cd6) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.3ac] // CHECK:STDOUT: %bound_method.loc49_19.2: = bound_method %m.ref, %specific_fn.loc49_19.1 // CHECK:STDOUT: %var.loc49: ref %tuple.type.508 = var_storage invalid // CHECK:STDOUT: %.loc49_18.1: %MutableRange = acquire_value %m.ref @@ -1150,13 +1150,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc49: // CHECK:STDOUT: %addr.loc49: %ptr.45c = addr_of %var.loc49 -// CHECK:STDOUT: %impl.elem3.loc49: %.d4b = impl_witness_access constants.%Iterate.impl_witness.b92, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.d29] +// CHECK:STDOUT: %impl.elem3.loc49: %.037 = impl_witness_access constants.%Iterate.impl_witness.7dd, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.693] // CHECK:STDOUT: %bound_method.loc49_19.3: = bound_method %m.ref, %impl.elem3.loc49 -// CHECK:STDOUT: %facet_value.loc49_19.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.0e0, constants.%custom_witness.ed3, constants.%custom_witness.955, constants.%custom_witness.1f5, constants.%custom_witness.ef8, constants.%custom_witness.981, constants.%custom_witness.444) [concrete = constants.%facet_value.cd6] +// CHECK:STDOUT: %facet_value.loc49_19.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.0e0, constants.%custom_witness.ed3, constants.%custom_witness.955, constants.%custom_witness.1f5, constants.%custom_witness.ef8, constants.%custom_witness.981, constants.%custom_witness.444) [concrete = constants.%facet_value.cd6] // CHECK:STDOUT: %.loc49_19.3: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc49_19.3 [concrete = constants.%facet_value.cd6] -// CHECK:STDOUT: %facet_value.loc49_19.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.0e0, constants.%custom_witness.ed3, constants.%custom_witness.955, constants.%custom_witness.1f5, constants.%custom_witness.ef8, constants.%custom_witness.981, constants.%custom_witness.444) [concrete = constants.%facet_value.cd6] +// CHECK:STDOUT: %facet_value.loc49_19.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.0e0, constants.%custom_witness.ed3, constants.%custom_witness.955, constants.%custom_witness.1f5, constants.%custom_witness.ef8, constants.%custom_witness.981, constants.%custom_witness.444) [concrete = constants.%facet_value.cd6] // CHECK:STDOUT: %.loc49_19.4: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc49_19.4 [concrete = constants.%facet_value.cd6] -// CHECK:STDOUT: %specific_fn.loc49_19.2: = specific_function %impl.elem3.loc49, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.cd6) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn.4ca] +// CHECK:STDOUT: %specific_fn.loc49_19.2: = specific_function %impl.elem3.loc49, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.cd6) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn.50d] // CHECK:STDOUT: %bound_method.loc49_19.4: = bound_method %m.ref, %specific_fn.loc49_19.2 // CHECK:STDOUT: %.loc49_19.5: ref %Optional.a23 = temporary_storage // CHECK:STDOUT: %.loc49_18.2: %MutableRange = acquire_value %m.ref @@ -1204,13 +1204,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %i.patt.loc55: %pattern_type.6b6 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c -// CHECK:STDOUT: %impl.elem2.loc55: %.e89c = impl_witness_access constants.%Iterate.impl_witness.a61, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.0b2] +// CHECK:STDOUT: %impl.elem2.loc55: %.bb7 = impl_witness_access constants.%Iterate.impl_witness.cf5, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.e1b] // CHECK:STDOUT: %bound_method.loc55_19.1: = bound_method %c.ref, %impl.elem2.loc55 -// CHECK:STDOUT: %facet_value.loc55_19.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.0e0, constants.%custom_witness.23e, constants.%custom_witness.6e8, constants.%custom_witness.150, constants.%custom_witness.adb, constants.%custom_witness.941, constants.%custom_witness.746) [concrete = constants.%facet_value.e88] +// CHECK:STDOUT: %facet_value.loc55_19.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.0e0, constants.%custom_witness.23e, constants.%custom_witness.6e8, constants.%custom_witness.150, constants.%custom_witness.adb, constants.%custom_witness.941, constants.%custom_witness.746) [concrete = constants.%facet_value.e88] // CHECK:STDOUT: %.loc55_19.1: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc55_19.1 [concrete = constants.%facet_value.e88] -// CHECK:STDOUT: %facet_value.loc55_19.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.0e0, constants.%custom_witness.23e, constants.%custom_witness.6e8, constants.%custom_witness.150, constants.%custom_witness.adb, constants.%custom_witness.941, constants.%custom_witness.746) [concrete = constants.%facet_value.e88] +// CHECK:STDOUT: %facet_value.loc55_19.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.0e0, constants.%custom_witness.23e, constants.%custom_witness.6e8, constants.%custom_witness.150, constants.%custom_witness.adb, constants.%custom_witness.941, constants.%custom_witness.746) [concrete = constants.%facet_value.e88] // CHECK:STDOUT: %.loc55_19.2: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc55_19.2 [concrete = constants.%facet_value.e88] -// CHECK:STDOUT: %specific_fn.loc55_19.1: = specific_function %impl.elem2.loc55, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.e88) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.e65] +// CHECK:STDOUT: %specific_fn.loc55_19.1: = specific_function %impl.elem2.loc55, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.e88) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.e84] // CHECK:STDOUT: %bound_method.loc55_19.2: = bound_method %c.ref, %specific_fn.loc55_19.1 // CHECK:STDOUT: %var.loc55: ref %tuple.type.69f = var_storage invalid // CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.call.loc55: init %tuple.type.69f to %var.loc55 = call %bound_method.loc55_19.2(%c.ref) @@ -1219,13 +1219,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc55: // CHECK:STDOUT: %addr.loc55: %ptr.c5c = addr_of %var.loc55 -// CHECK:STDOUT: %impl.elem3.loc55: %.f6d = impl_witness_access constants.%Iterate.impl_witness.a61, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.bec] +// CHECK:STDOUT: %impl.elem3.loc55: %.fc66 = impl_witness_access constants.%Iterate.impl_witness.cf5, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.119] // CHECK:STDOUT: %bound_method.loc55_19.3: = bound_method %c.ref, %impl.elem3.loc55 -// CHECK:STDOUT: %facet_value.loc55_19.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.0e0, constants.%custom_witness.23e, constants.%custom_witness.6e8, constants.%custom_witness.150, constants.%custom_witness.adb, constants.%custom_witness.941, constants.%custom_witness.746) [concrete = constants.%facet_value.e88] +// CHECK:STDOUT: %facet_value.loc55_19.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.0e0, constants.%custom_witness.23e, constants.%custom_witness.6e8, constants.%custom_witness.150, constants.%custom_witness.adb, constants.%custom_witness.941, constants.%custom_witness.746) [concrete = constants.%facet_value.e88] // CHECK:STDOUT: %.loc55_19.3: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc55_19.3 [concrete = constants.%facet_value.e88] -// CHECK:STDOUT: %facet_value.loc55_19.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.0e0, constants.%custom_witness.23e, constants.%custom_witness.6e8, constants.%custom_witness.150, constants.%custom_witness.adb, constants.%custom_witness.941, constants.%custom_witness.746) [concrete = constants.%facet_value.e88] +// CHECK:STDOUT: %facet_value.loc55_19.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.0e0, constants.%custom_witness.23e, constants.%custom_witness.6e8, constants.%custom_witness.150, constants.%custom_witness.adb, constants.%custom_witness.941, constants.%custom_witness.746) [concrete = constants.%facet_value.e88] // CHECK:STDOUT: %.loc55_19.4: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc55_19.4 [concrete = constants.%facet_value.e88] -// CHECK:STDOUT: %specific_fn.loc55_19.2: = specific_function %impl.elem3.loc55, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.e88) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn.bf1] +// CHECK:STDOUT: %specific_fn.loc55_19.2: = specific_function %impl.elem3.loc55, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.e88) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn.9ce] // CHECK:STDOUT: %bound_method.loc55_19.4: = bound_method %c.ref, %specific_fn.loc55_19.2 // CHECK:STDOUT: %.loc55_19.5: ref %Optional.a23 = temporary_storage // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.call.loc55: init %Optional.a23 to %.loc55_19.5 = call %bound_method.loc55_19.4(%c.ref, %addr.loc55) @@ -1290,9 +1290,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %r.patt.loc30_60.2 => constants.%r.patt.54b // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.8de) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.04f) { // CHECK:STDOUT: %R.patt.loc30_17.2 => constants.%R.patt.bbc -// CHECK:STDOUT: %R.loc30_17.1 => constants.%facet_value.8de +// CHECK:STDOUT: %R.loc30_17.1 => constants.%facet_value.04f // CHECK:STDOUT: %R.as_type.loc30_62.1 => constants.%MutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e635 // CHECK:STDOUT: %r.param_patt.loc30_60.2 => constants.%r.param_patt.c79 @@ -1300,20 +1300,20 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.b92 -// CHECK:STDOUT: %Iterate.facet.loc34_19.5 => constants.%Iterate.facet.b2e -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.7db -// CHECK:STDOUT: %.loc34_19.19 => constants.%.55e -// CHECK:STDOUT: %impl.elem2.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.d98 -// CHECK:STDOUT: %specific_impl_fn.loc34_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.bad +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.7dd +// CHECK:STDOUT: %Iterate.facet.loc34_19.5 => constants.%Iterate.facet.3e3 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.083 +// CHECK:STDOUT: %.loc34_19.19 => constants.%.0e97 +// CHECK:STDOUT: %impl.elem2.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.0a0 +// CHECK:STDOUT: %specific_impl_fn.loc34_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.3ac // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.30f // CHECK:STDOUT: %as_type => constants.%tuple.type.508 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.c28 // CHECK:STDOUT: %ptr => constants.%ptr.45c -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.c02 -// CHECK:STDOUT: %.loc34_19.20 => constants.%.d4b -// CHECK:STDOUT: %impl.elem3.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.Next.d29 -// CHECK:STDOUT: %specific_impl_fn.loc34_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.4ca +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.4ed +// CHECK:STDOUT: %.loc34_19.20 => constants.%.037 +// CHECK:STDOUT: %impl.elem3.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.Next.693 +// CHECK:STDOUT: %specific_impl_fn.loc34_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.50d // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c6c // CHECK:STDOUT: %.loc34_19.21 => constants.%.0a4 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.10 @@ -1321,9 +1321,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %specific_impl_fn.loc34_19.6 => constants.%Destroy.Op.1a2547.10 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.227) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.f37) { // CHECK:STDOUT: %R.patt.loc30_17.2 => constants.%R.patt.bbc -// CHECK:STDOUT: %R.loc30_17.1 => constants.%facet_value.227 +// CHECK:STDOUT: %R.loc30_17.1 => constants.%facet_value.f37 // CHECK:STDOUT: %R.as_type.loc30_62.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0ba // CHECK:STDOUT: %r.param_patt.loc30_60.2 => constants.%r.param_patt.83e @@ -1331,20 +1331,20 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.a61 -// CHECK:STDOUT: %Iterate.facet.loc34_19.5 => constants.%Iterate.facet.d83 -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.825 -// CHECK:STDOUT: %.loc34_19.19 => constants.%.e89c -// CHECK:STDOUT: %impl.elem2.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.0b2 -// CHECK:STDOUT: %specific_impl_fn.loc34_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.e65 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.cf5 +// CHECK:STDOUT: %Iterate.facet.loc34_19.5 => constants.%Iterate.facet.da6 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.005 +// CHECK:STDOUT: %.loc34_19.19 => constants.%.bb7 +// CHECK:STDOUT: %impl.elem2.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.e1b +// CHECK:STDOUT: %specific_impl_fn.loc34_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.e84 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.e4c // CHECK:STDOUT: %as_type => constants.%tuple.type.69f // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.8d5 // CHECK:STDOUT: %ptr => constants.%ptr.c5c -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.d4a -// CHECK:STDOUT: %.loc34_19.20 => constants.%.f6d -// CHECK:STDOUT: %impl.elem3.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.Next.bec -// CHECK:STDOUT: %specific_impl_fn.loc34_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.bf1 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.212 +// CHECK:STDOUT: %.loc34_19.20 => constants.%.fc66 +// CHECK:STDOUT: %impl.elem3.loc34_19.2 => constants.%R.as_type.as.Iterate.impl.Next.119 +// CHECK:STDOUT: %specific_impl_fn.loc34_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.9ce // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.7ec // CHECK:STDOUT: %.loc34_19.21 => constants.%.0e7 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.11 @@ -1375,34 +1375,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.c3a: %T.as_type.as.OptionalStorage.impl.Some.type.973 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.f62: type = fn_type @T.as_type.as.OptionalStorage.impl.None, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.faf: %T.as_type.as.OptionalStorage.impl.None.type.f62 = struct_value () [symbolic] -// CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %pattern_type.e9f: type = pattern_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %ValueType.Op.type.83af6e.1: type = fn_type @ValueType.Op.1 [concrete] -// CHECK:STDOUT: %ValueType.Op.4dca31.1: %ValueType.Op.type.83af6e.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.e7a31c.1: = custom_witness (%ValueType.Op.4dca31.1), @Destroy [concrete] -// CHECK:STDOUT: %const.243: type = const_type %ValueType [concrete] -// CHECK:STDOUT: %ptr.6bf: type = ptr_type %const.243 [concrete] -// CHECK:STDOUT: %ptr.a3d: type = ptr_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.Op.type.83af6e.2: type = fn_type @ValueType.Op.2 [concrete] -// CHECK:STDOUT: %ValueType.Op.4dca31.2: %ValueType.Op.type.83af6e.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%ValueType.Op.4dca31.2), @Copy [concrete] -// CHECK:STDOUT: %facet_value.bf1: %facet_type = facet_value %ValueType, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1) [concrete] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.502: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.bf1> [concrete] -// CHECK:STDOUT: %pattern_type.4c7: type = pattern_type %Iterate_where.type.502 [concrete] -// CHECK:STDOUT: %R.patt.35d: %pattern_type.4c7 = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R.0bd: %Iterate_where.type.502 = symbolic_binding R, 0 [symbolic] -// CHECK:STDOUT: %R.as_type.f55: type = facet_access_type %R.0bd [symbolic] -// CHECK:STDOUT: %pattern_type.d2d: type = pattern_type %R.as_type.f55 [symbolic] -// CHECK:STDOUT: %r.patt.d27: %pattern_type.d2d = ref_binding_pattern r [symbolic] -// CHECK:STDOUT: %r.param_patt.a41: %pattern_type.d2d = var_param_pattern %r.patt.d27 [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.e9f = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.aed: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.f6b: = lookup_impl_witness %.Self.aed, @CppRangeForIterate [symbolic_self] @@ -1423,10 +1398,35 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.lookup_impl_witness.ec3: = lookup_impl_witness %impl.elem0.af7, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.a7a: = lookup_impl_witness %impl.elem0.af7, @Copy [symbolic] // CHECK:STDOUT: %facet_value.194: %facet_type = facet_value %impl.elem0.af7, (%Destroy.lookup_impl_witness.ec3, %Copy.lookup_impl_witness.a7a) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.d8f: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c6d: %R.as_type.as.Iterate.impl.Next.type.d8f = struct_value () [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.127: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.627: %R.as_type.as.Iterate.impl.NewCursor.type.127 = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.c6a: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.49a: %R.as_type.as.Iterate.impl.Next.type.c6a = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.2e2: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.71b: %R.as_type.as.Iterate.impl.NewCursor.type.2e2 = struct_value () [symbolic] +// CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.e9f: type = pattern_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] +// CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %ValueType.Op.type.83af6e.1: type = fn_type @ValueType.Op.1 [concrete] +// CHECK:STDOUT: %ValueType.Op.4dca31.1: %ValueType.Op.type.83af6e.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.e7a31c.1: = custom_witness (%ValueType.Op.4dca31.1), @Destroy [concrete] +// CHECK:STDOUT: %const.243: type = const_type %ValueType [concrete] +// CHECK:STDOUT: %ptr.6bf: type = ptr_type %const.243 [concrete] +// CHECK:STDOUT: %ptr.a3d: type = ptr_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.Op.type.83af6e.2: type = fn_type @ValueType.Op.2 [concrete] +// CHECK:STDOUT: %ValueType.Op.4dca31.2: %ValueType.Op.type.83af6e.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%ValueType.Op.4dca31.2), @Copy [concrete] +// CHECK:STDOUT: %facet_value.bf1: %facet_type = facet_value %ValueType, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1) [concrete] +// CHECK:STDOUT: %Iterate_where.type.502: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.bf1> [concrete] +// CHECK:STDOUT: %pattern_type.4c7: type = pattern_type %Iterate_where.type.502 [concrete] +// CHECK:STDOUT: %R.patt.35d: %pattern_type.4c7 = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R.0bd: %Iterate_where.type.502 = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %R.as_type.f55: type = facet_access_type %R.0bd [symbolic] +// CHECK:STDOUT: %pattern_type.d2d: type = pattern_type %R.as_type.f55 [symbolic] +// CHECK:STDOUT: %r.patt.d27: %pattern_type.d2d = ref_binding_pattern r [symbolic] +// CHECK:STDOUT: %r.param_patt.a41: %pattern_type.d2d = var_param_pattern %r.patt.d27 [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.e9f = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.06b: = lookup_impl_witness %R.0bd, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.dbf: %Iterate.type = facet_value %R.as_type.f55, (%Iterate.lookup_impl_witness.06b) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.1b1: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.dbf) [symbolic] @@ -1503,13 +1503,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.Op.1a2547.8: %Destroy.Op.type.1d8f74.8 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.8: = custom_witness (%Destroy.Op.1a2547.8), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.305: %Destroy.type = facet_value %tuple.type.829, (%custom_witness.df9cc1.8) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.af4: = impl_witness imports.%Iterate.impl_witness_table.ccd, @R.as_type.as.Iterate.impl(%facet_value.55a) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.ba0: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.55a) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.435: %R.as_type.as.Iterate.impl.NewCursor.type.ba0 = struct_value () [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.52b: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.55a) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.687: %R.as_type.as.Iterate.impl.Next.type.52b = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.cc7: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.af4) [concrete] -// CHECK:STDOUT: %facet_value.c11: %Iterate_where.type.502 = facet_value %MutableRange, (%Iterate.impl_witness.af4) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.ef2: = impl_witness imports.%Iterate.impl_witness_table.cd6, @R.as_type.as.Iterate.impl(%facet_value.55a) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.b08: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.55a) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.aa8: %R.as_type.as.Iterate.impl.NewCursor.type.b08 = struct_value () [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.210: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.55a) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.de6: %R.as_type.as.Iterate.impl.Next.type.210 = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.ac1: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.ef2) [concrete] +// CHECK:STDOUT: %facet_value.82d: %Iterate_where.type.502 = facet_value %MutableRange, (%Iterate.impl_witness.ef2) [concrete] // CHECK:STDOUT: %r.patt.f69: %pattern_type.e635 = ref_binding_pattern r [concrete] // CHECK:STDOUT: %r.param_patt.91e: %pattern_type.e635 = var_param_pattern %r.patt.f69 [concrete] // CHECK:STDOUT: %Iterator.260: type = class_type @Iterator.2 [concrete] @@ -1548,29 +1548,29 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.Op.1a2547.9: %Destroy.Op.type.1d8f74.9 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.9: = custom_witness (%Destroy.Op.1a2547.9), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.e08: %Destroy.type = facet_value %tuple.type.99f, (%custom_witness.df9cc1.9) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.534: = impl_witness imports.%Iterate.impl_witness_table.ccd, @R.as_type.as.Iterate.impl(%facet_value.445) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.010: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.445) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.d09: %R.as_type.as.Iterate.impl.NewCursor.type.010 = struct_value () [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.fca: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.445) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.dce: %R.as_type.as.Iterate.impl.Next.type.fca = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.f61: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.534) [concrete] -// CHECK:STDOUT: %facet_value.877: %Iterate_where.type.502 = facet_value %ConstRange, (%Iterate.impl_witness.534) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.214: = impl_witness imports.%Iterate.impl_witness_table.cd6, @R.as_type.as.Iterate.impl(%facet_value.445) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.799: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.445) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.865: %R.as_type.as.Iterate.impl.NewCursor.type.799 = struct_value () [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.75d: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.445) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.31e: %R.as_type.as.Iterate.impl.Next.type.75d = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.02a: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.214) [concrete] +// CHECK:STDOUT: %facet_value.915: %Iterate_where.type.502 = facet_value %ConstRange, (%Iterate.impl_witness.214) [concrete] // CHECK:STDOUT: %r.patt.36a: %pattern_type.0ba = ref_binding_pattern r [concrete] // CHECK:STDOUT: %r.param_patt.501: %pattern_type.0ba = var_param_pattern %r.patt.36a [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.7c9: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.cc7) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.464: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.cc7) [concrete] -// CHECK:STDOUT: %.753: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.7c9, %Iterate.facet.cc7 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.f09: = specific_function %R.as_type.as.Iterate.impl.NewCursor.435, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.55a) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.625: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.ac1) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.810: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.ac1) [concrete] +// CHECK:STDOUT: %.44e: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.625, %Iterate.facet.ac1 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.6f4: = specific_function %R.as_type.as.Iterate.impl.NewCursor.aa8, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.55a) [concrete] // CHECK:STDOUT: %ptr.d6b: type = ptr_type %tuple.type.829 [concrete] -// CHECK:STDOUT: %.010: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.464, %Iterate.facet.cc7 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn.5bb: = specific_function %R.as_type.as.Iterate.impl.Next.687, @R.as_type.as.Iterate.impl.Next(%facet_value.55a) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.f50: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.f61) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.724: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.f61) [concrete] -// CHECK:STDOUT: %.0be: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.f50, %Iterate.facet.f61 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.749: = specific_function %R.as_type.as.Iterate.impl.NewCursor.d09, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.445) [concrete] +// CHECK:STDOUT: %.121: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.810, %Iterate.facet.ac1 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn.c86: = specific_function %R.as_type.as.Iterate.impl.Next.de6, @R.as_type.as.Iterate.impl.Next(%facet_value.55a) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.3b7: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.02a) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.c48: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.02a) [concrete] +// CHECK:STDOUT: %.71c: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.3b7, %Iterate.facet.02a [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn.4ff: = specific_function %R.as_type.as.Iterate.impl.NewCursor.865, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.445) [concrete] // CHECK:STDOUT: %ptr.2f7: type = ptr_type %tuple.type.99f [concrete] -// CHECK:STDOUT: %.c98: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.724, %Iterate.facet.f61 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn.f0e: = specific_function %R.as_type.as.Iterate.impl.Next.dce, @R.as_type.as.Iterate.impl.Next(%facet_value.445) [concrete] +// CHECK:STDOUT: %.7e8: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.c48, %Iterate.facet.02a [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn.e3d: = specific_function %R.as_type.as.Iterate.impl.Next.31e, @R.as_type.as.Iterate.impl.Next(%facet_value.445) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.e30: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.e08) [concrete] // CHECK:STDOUT: %.987: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.e30, %Destroy.facet.e08 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.c89: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.305) [concrete] @@ -1595,17 +1595,17 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.e31: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.671) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.a54)] // CHECK:STDOUT: %Core.import_ref.cea = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.199 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.6d6, %Core.import_ref.6f3, %Core.import_ref.af2, %Core.import_ref.e31, %Core.import_ref.cea), @T.as_type.as.OptionalStorage.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] +// CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] +// CHECK:STDOUT: %Core.import_ref.f6b: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.2e2) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.71b)] +// CHECK:STDOUT: %Core.import_ref.630: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.c6a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.49a)] +// CHECK:STDOUT: %Iterate.impl_witness_table.cd6 = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.f6b, %Core.import_ref.630), @R.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %ValueType.decl: type = class_decl @ValueType [concrete = constants.%ValueType] {} {} // CHECK:STDOUT: %ValueType.cpp_destructor.decl: %ValueType.cpp_destructor.type = fn_decl @ValueType.cpp_destructor [concrete = constants.%ValueType.cpp_destructor] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] -// CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] -// CHECK:STDOUT: %Core.import_ref.940: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.127) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.627)] -// CHECK:STDOUT: %Core.import_ref.fe7: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.d8f) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.c6d)] -// CHECK:STDOUT: %Iterate.impl_witness_table.ccd = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.940, %Core.import_ref.fe7), @R.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.decl: %operator_PlusEqual__carbon_thunk.type = fn_decl @operator_PlusEqual__carbon_thunk [concrete = constants.%operator_PlusEqual__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { @@ -1775,13 +1775,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %i.patt.loc59: %pattern_type.e9f = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %m.ref: ref %MutableRange = name_ref m, %m -// CHECK:STDOUT: %impl.elem2.loc59: %.753 = impl_witness_access constants.%Iterate.impl_witness.af4, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.435] +// CHECK:STDOUT: %impl.elem2.loc59: %.44e = impl_witness_access constants.%Iterate.impl_witness.ef2, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.aa8] // CHECK:STDOUT: %bound_method.loc59_29.1: = bound_method %m.ref, %impl.elem2.loc59 // CHECK:STDOUT: %facet_value.loc59_29.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.6b6, constants.%custom_witness.95581e.1, constants.%custom_witness.1f52e9.1, constants.%custom_witness.90a, constants.%custom_witness.3e8, constants.%custom_witness.444, constants.%custom_witness.95581e.2, constants.%custom_witness.1f52e9.2) [concrete = constants.%facet_value.55a] // CHECK:STDOUT: %.loc59_29.1: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc59_29.1 [concrete = constants.%facet_value.55a] // CHECK:STDOUT: %facet_value.loc59_29.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.6b6, constants.%custom_witness.95581e.1, constants.%custom_witness.1f52e9.1, constants.%custom_witness.90a, constants.%custom_witness.3e8, constants.%custom_witness.444, constants.%custom_witness.95581e.2, constants.%custom_witness.1f52e9.2) [concrete = constants.%facet_value.55a] // CHECK:STDOUT: %.loc59_29.2: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc59_29.2 [concrete = constants.%facet_value.55a] -// CHECK:STDOUT: %specific_fn.loc59_29.1: = specific_function %impl.elem2.loc59, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.55a) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.f09] +// CHECK:STDOUT: %specific_fn.loc59_29.1: = specific_function %impl.elem2.loc59, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.55a) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.6f4] // CHECK:STDOUT: %bound_method.loc59_29.2: = bound_method %m.ref, %specific_fn.loc59_29.1 // CHECK:STDOUT: %var.loc59: ref %tuple.type.829 = var_storage invalid // CHECK:STDOUT: %.loc59_28.1: %MutableRange = acquire_value %m.ref @@ -1791,13 +1791,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc59: // CHECK:STDOUT: %addr.loc59: %ptr.d6b = addr_of %var.loc59 -// CHECK:STDOUT: %impl.elem3.loc59: %.010 = impl_witness_access constants.%Iterate.impl_witness.af4, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.687] +// CHECK:STDOUT: %impl.elem3.loc59: %.121 = impl_witness_access constants.%Iterate.impl_witness.ef2, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.de6] // CHECK:STDOUT: %bound_method.loc59_29.3: = bound_method %m.ref, %impl.elem3.loc59 // CHECK:STDOUT: %facet_value.loc59_29.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.6b6, constants.%custom_witness.95581e.1, constants.%custom_witness.1f52e9.1, constants.%custom_witness.90a, constants.%custom_witness.3e8, constants.%custom_witness.444, constants.%custom_witness.95581e.2, constants.%custom_witness.1f52e9.2) [concrete = constants.%facet_value.55a] // CHECK:STDOUT: %.loc59_29.3: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc59_29.3 [concrete = constants.%facet_value.55a] // CHECK:STDOUT: %facet_value.loc59_29.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.6b6, constants.%custom_witness.95581e.1, constants.%custom_witness.1f52e9.1, constants.%custom_witness.90a, constants.%custom_witness.3e8, constants.%custom_witness.444, constants.%custom_witness.95581e.2, constants.%custom_witness.1f52e9.2) [concrete = constants.%facet_value.55a] // CHECK:STDOUT: %.loc59_29.4: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc59_29.4 [concrete = constants.%facet_value.55a] -// CHECK:STDOUT: %specific_fn.loc59_29.2: = specific_function %impl.elem3.loc59, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.55a) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn.5bb] +// CHECK:STDOUT: %specific_fn.loc59_29.2: = specific_function %impl.elem3.loc59, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.55a) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn.c86] // CHECK:STDOUT: %bound_method.loc59_29.4: = bound_method %m.ref, %specific_fn.loc59_29.2 // CHECK:STDOUT: %.loc59_29.5: ref %Optional.f2f = temporary_storage // CHECK:STDOUT: %.loc59_28.2: %MutableRange = acquire_value %m.ref @@ -1844,13 +1844,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %i.patt.loc63: %pattern_type.e9f = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c -// CHECK:STDOUT: %impl.elem2.loc63: %.0be = impl_witness_access constants.%Iterate.impl_witness.534, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.d09] +// CHECK:STDOUT: %impl.elem2.loc63: %.71c = impl_witness_access constants.%Iterate.impl_witness.214, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.865] // CHECK:STDOUT: %bound_method.loc63_29.1: = bound_method %c.ref, %impl.elem2.loc63 // CHECK:STDOUT: %facet_value.loc63_29.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.a03, constants.%custom_witness.6e8a2e.1, constants.%custom_witness.15091a.1, constants.%custom_witness.78b, constants.%custom_witness.c55, constants.%custom_witness.746, constants.%custom_witness.6e8a2e.2, constants.%custom_witness.15091a.2) [concrete = constants.%facet_value.445] // CHECK:STDOUT: %.loc63_29.1: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc63_29.1 [concrete = constants.%facet_value.445] // CHECK:STDOUT: %facet_value.loc63_29.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.a03, constants.%custom_witness.6e8a2e.1, constants.%custom_witness.15091a.1, constants.%custom_witness.78b, constants.%custom_witness.c55, constants.%custom_witness.746, constants.%custom_witness.6e8a2e.2, constants.%custom_witness.15091a.2) [concrete = constants.%facet_value.445] // CHECK:STDOUT: %.loc63_29.2: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc63_29.2 [concrete = constants.%facet_value.445] -// CHECK:STDOUT: %specific_fn.loc63_29.1: = specific_function %impl.elem2.loc63, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.445) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.749] +// CHECK:STDOUT: %specific_fn.loc63_29.1: = specific_function %impl.elem2.loc63, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.445) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.4ff] // CHECK:STDOUT: %bound_method.loc63_29.2: = bound_method %c.ref, %specific_fn.loc63_29.1 // CHECK:STDOUT: %var.loc63: ref %tuple.type.99f = var_storage invalid // CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.call.loc63: init %tuple.type.99f to %var.loc63 = call %bound_method.loc63_29.2(%c.ref) @@ -1859,13 +1859,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc63: // CHECK:STDOUT: %addr.loc63: %ptr.2f7 = addr_of %var.loc63 -// CHECK:STDOUT: %impl.elem3.loc63: %.c98 = impl_witness_access constants.%Iterate.impl_witness.534, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.dce] +// CHECK:STDOUT: %impl.elem3.loc63: %.7e8 = impl_witness_access constants.%Iterate.impl_witness.214, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.31e] // CHECK:STDOUT: %bound_method.loc63_29.3: = bound_method %c.ref, %impl.elem3.loc63 // CHECK:STDOUT: %facet_value.loc63_29.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.a03, constants.%custom_witness.6e8a2e.1, constants.%custom_witness.15091a.1, constants.%custom_witness.78b, constants.%custom_witness.c55, constants.%custom_witness.746, constants.%custom_witness.6e8a2e.2, constants.%custom_witness.15091a.2) [concrete = constants.%facet_value.445] // CHECK:STDOUT: %.loc63_29.3: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc63_29.3 [concrete = constants.%facet_value.445] // CHECK:STDOUT: %facet_value.loc63_29.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.a03, constants.%custom_witness.6e8a2e.1, constants.%custom_witness.15091a.1, constants.%custom_witness.78b, constants.%custom_witness.c55, constants.%custom_witness.746, constants.%custom_witness.6e8a2e.2, constants.%custom_witness.15091a.2) [concrete = constants.%facet_value.445] // CHECK:STDOUT: %.loc63_29.4: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc63_29.4 [concrete = constants.%facet_value.445] -// CHECK:STDOUT: %specific_fn.loc63_29.2: = specific_function %impl.elem3.loc63, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.445) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn.f0e] +// CHECK:STDOUT: %specific_fn.loc63_29.2: = specific_function %impl.elem3.loc63, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.445) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn.e3d] // CHECK:STDOUT: %bound_method.loc63_29.4: = bound_method %c.ref, %specific_fn.loc63_29.2 // CHECK:STDOUT: %.loc63_29.5: ref %Optional.f2f = temporary_storage // CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.call.loc63: init %Optional.f2f to %.loc63_29.5 = call %bound_method.loc63_29.4(%c.ref, %addr.loc63) @@ -1937,9 +1937,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %r.param_patt.loc40_69.2 => constants.%r.param_patt.a41 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.c11) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.82d) { // CHECK:STDOUT: %R.patt.loc40_17.2 => constants.%R.patt.35d -// CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.c11 +// CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.82d // CHECK:STDOUT: %R.as_type.loc40_76.1 => constants.%MutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e635 // CHECK:STDOUT: %r.patt.loc40_74.2 => constants.%r.patt.f69 @@ -1947,20 +1947,20 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc40 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.af4 -// CHECK:STDOUT: %Iterate.facet.loc44_29.5 => constants.%Iterate.facet.cc7 -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.7c9 -// CHECK:STDOUT: %.loc44_29.20 => constants.%.753 -// CHECK:STDOUT: %impl.elem2.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.435 -// CHECK:STDOUT: %specific_impl_fn.loc44_29.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.f09 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.ef2 +// CHECK:STDOUT: %Iterate.facet.loc44_29.5 => constants.%Iterate.facet.ac1 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.625 +// CHECK:STDOUT: %.loc44_29.20 => constants.%.44e +// CHECK:STDOUT: %impl.elem2.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.aa8 +// CHECK:STDOUT: %specific_impl_fn.loc44_29.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.6f4 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.305 // CHECK:STDOUT: %as_type => constants.%tuple.type.829 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.94f // CHECK:STDOUT: %ptr => constants.%ptr.d6b -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.464 -// CHECK:STDOUT: %.loc44_29.21 => constants.%.010 -// CHECK:STDOUT: %impl.elem3.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.Next.687 -// CHECK:STDOUT: %specific_impl_fn.loc44_29.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.5bb +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.810 +// CHECK:STDOUT: %.loc44_29.21 => constants.%.121 +// CHECK:STDOUT: %impl.elem3.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.Next.de6 +// CHECK:STDOUT: %specific_impl_fn.loc44_29.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.c86 // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c89 // CHECK:STDOUT: %.loc44_29.22 => constants.%.e8a // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.8 @@ -1968,9 +1968,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %specific_impl_fn.loc44_29.6 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.877) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.915) { // CHECK:STDOUT: %R.patt.loc40_17.2 => constants.%R.patt.35d -// CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.877 +// CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.915 // CHECK:STDOUT: %R.as_type.loc40_76.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0ba // CHECK:STDOUT: %r.patt.loc40_74.2 => constants.%r.patt.36a @@ -1978,20 +1978,20 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc40 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.534 -// CHECK:STDOUT: %Iterate.facet.loc44_29.5 => constants.%Iterate.facet.f61 -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.f50 -// CHECK:STDOUT: %.loc44_29.20 => constants.%.0be -// CHECK:STDOUT: %impl.elem2.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.d09 -// CHECK:STDOUT: %specific_impl_fn.loc44_29.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.749 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.214 +// CHECK:STDOUT: %Iterate.facet.loc44_29.5 => constants.%Iterate.facet.02a +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.3b7 +// CHECK:STDOUT: %.loc44_29.20 => constants.%.71c +// CHECK:STDOUT: %impl.elem2.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.865 +// CHECK:STDOUT: %specific_impl_fn.loc44_29.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn.4ff // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.e08 // CHECK:STDOUT: %as_type => constants.%tuple.type.99f // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.dea // CHECK:STDOUT: %ptr => constants.%ptr.2f7 -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.724 -// CHECK:STDOUT: %.loc44_29.21 => constants.%.c98 -// CHECK:STDOUT: %impl.elem3.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.Next.dce -// CHECK:STDOUT: %specific_impl_fn.loc44_29.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.f0e +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.c48 +// CHECK:STDOUT: %.loc44_29.21 => constants.%.7e8 +// CHECK:STDOUT: %impl.elem3.loc44_29.2 => constants.%R.as_type.as.Iterate.impl.Next.31e +// CHECK:STDOUT: %specific_impl_fn.loc44_29.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn.e3d // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.e30 // CHECK:STDOUT: %.loc44_29.22 => constants.%.987 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.9 @@ -2022,29 +2022,10 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.c3a: %T.as_type.as.OptionalStorage.impl.Some.type.973 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.f62: type = fn_type @T.as_type.as.OptionalStorage.impl.None, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.faf: %T.as_type.as.OptionalStorage.impl.None.type.f62 = struct_value () [symbolic] -// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %N.fe9: Core.IntLiteral = symbolic_binding N, 0 [symbolic] -// CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] -// CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc20_54.2 [concrete] -// CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.df9cc1.2: = custom_witness (%Destroy.Op.1a2547.2), @Destroy [concrete] -// CHECK:STDOUT: %Float.as.Copy.impl.Op.type.ff3: type = fn_type @Float.as.Copy.impl.Op, @Float.as.Copy.impl(%N.fe9) [symbolic] -// CHECK:STDOUT: %Float.as.Copy.impl.Op.d93: %Float.as.Copy.impl.Op.type.ff3 = struct_value () [symbolic] -// CHECK:STDOUT: %Copy.impl_witness.873: = impl_witness imports.%Copy.impl_witness_table.4e8, @Float.as.Copy.impl(%int_64) [concrete] -// CHECK:STDOUT: %facet_value.209: %facet_type = facet_value %f64.dc1, (%custom_witness.df9cc1.2, %Copy.impl_witness.873) [concrete] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.a32: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.209> [concrete] -// CHECK:STDOUT: %pattern_type.ff5: type = pattern_type %Iterate_where.type.a32 [concrete] -// CHECK:STDOUT: %R.patt.ae1: %pattern_type.ff5 = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R.c6e: %Iterate_where.type.a32 = symbolic_binding R, 0 [symbolic] -// CHECK:STDOUT: %R.as_type.087: type = facet_access_type %R.c6e [symbolic] -// CHECK:STDOUT: %pattern_type.3d7: type = pattern_type %R.as_type.087 [symbolic] -// CHECK:STDOUT: %r.param_patt.03a: %pattern_type.3d7 = value_param_pattern [symbolic] -// CHECK:STDOUT: %r.patt.b86: %pattern_type.3d7 = at_binding_pattern r, %r.param_patt.03a [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.aed: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.f6b: = lookup_impl_witness %.Self.aed, @CppRangeForIterate [symbolic_self] @@ -2065,10 +2046,29 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.lookup_impl_witness.ec3: = lookup_impl_witness %impl.elem0.af7, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.a7a: = lookup_impl_witness %impl.elem0.af7, @Copy [symbolic] // CHECK:STDOUT: %facet_value.194: %facet_type = facet_value %impl.elem0.af7, (%Destroy.lookup_impl_witness.ec3, %Copy.lookup_impl_witness.a7a) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.d8f: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c6d: %R.as_type.as.Iterate.impl.Next.type.d8f = struct_value () [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.127: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.627: %R.as_type.as.Iterate.impl.NewCursor.type.127 = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.c6a: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.49a: %R.as_type.as.Iterate.impl.Next.type.c6a = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.2e2: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.71b: %R.as_type.as.Iterate.impl.NewCursor.type.2e2 = struct_value () [symbolic] +// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] +// CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] +// CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc20_54.2 [concrete] +// CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.df9cc1.3: = custom_witness (%Destroy.Op.1a2547.3), @Destroy [concrete] +// CHECK:STDOUT: %Float.as.Copy.impl.Op.type.ff3: type = fn_type @Float.as.Copy.impl.Op, @Float.as.Copy.impl(%N.fe9) [symbolic] +// CHECK:STDOUT: %Float.as.Copy.impl.Op.d93: %Float.as.Copy.impl.Op.type.ff3 = struct_value () [symbolic] +// CHECK:STDOUT: %Copy.impl_witness.873: = impl_witness imports.%Copy.impl_witness_table.4e8, @Float.as.Copy.impl(%int_64) [concrete] +// CHECK:STDOUT: %facet_value.209: %facet_type = facet_value %f64.dc1, (%custom_witness.df9cc1.3, %Copy.impl_witness.873) [concrete] +// CHECK:STDOUT: %Iterate_where.type.a32: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.209> [concrete] +// CHECK:STDOUT: %pattern_type.ff5: type = pattern_type %Iterate_where.type.a32 [concrete] +// CHECK:STDOUT: %R.patt.ae1: %pattern_type.ff5 = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R.c6e: %Iterate_where.type.a32 = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %R.as_type.087: type = facet_access_type %R.c6e [symbolic] +// CHECK:STDOUT: %pattern_type.3d7: type = pattern_type %R.as_type.087 [symbolic] +// CHECK:STDOUT: %r.param_patt.03a: %pattern_type.3d7 = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.b86: %pattern_type.3d7 = at_binding_pattern r, %r.param_patt.03a [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.93c: = lookup_impl_witness %R.c6e, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.94d: %Iterate.type = facet_value %R.as_type.087, (%Iterate.lookup_impl_witness.93c) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.4c7: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.94d) [symbolic] @@ -2090,7 +2090,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Optional.HasValue.53b: %Optional.HasValue.type.c09 = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.4f6: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.c07) [concrete] // CHECK:STDOUT: %Optional.Get.5f1: %Optional.Get.type.4f6 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.339: %Destroy.type = facet_value %f64.dc1, (%custom_witness.df9cc1.2) [concrete] +// CHECK:STDOUT: %Destroy.facet.339: %Destroy.type = facet_value %f64.dc1, (%custom_witness.df9cc1.3) [concrete] // CHECK:STDOUT: %MaybeUnformed.b7e: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.339) [concrete] // CHECK:STDOUT: %.cc0: type = maybe_unformed_type %f64.dc1 [concrete] // CHECK:STDOUT: %struct_type.value.has_value.ad9: type = struct_type {.value: %MaybeUnformed.b7e, .has_value: bool} [concrete] @@ -2140,28 +2140,28 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Iterator.Op.type.ac7e09.4: type = fn_type @Iterator.Op.4 [concrete] // CHECK:STDOUT: %Iterator.Op.583fda.4: %Iterator.Op.type.ac7e09.4 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.393: = custom_witness (%Iterator.Op.583fda.4), @Inc [concrete] -// CHECK:STDOUT: %facet_value.c05: %CppRangeForIterate_where.type.1c721f.1 = facet_value %ConstRange, (%custom_witness.df9cc1.2, %Copy.impl_witness.873, %custom_witness.5d5, %custom_witness.213, %custom_witness.a31, %custom_witness.994, %custom_witness.821, %custom_witness.393) [concrete] +// CHECK:STDOUT: %facet_value.c05: %CppRangeForIterate_where.type.1c721f.1 = facet_value %ConstRange, (%custom_witness.df9cc1.3, %Copy.impl_witness.873, %custom_witness.5d5, %custom_witness.213, %custom_witness.a31, %custom_witness.994, %custom_witness.821, %custom_witness.393) [concrete] // CHECK:STDOUT: %tuple.type.005: type = tuple_type (%Iterator, %Iterator) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.10: type = fn_type @Destroy.Op.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.10: %Destroy.Op.type.1d8f74.10 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.10: = custom_witness (%Destroy.Op.1a2547.10), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.40b: %Destroy.type = facet_value %tuple.type.005, (%custom_witness.df9cc1.10) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.e5c: = impl_witness imports.%Iterate.impl_witness_table.ccd, @R.as_type.as.Iterate.impl(%facet_value.c05) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.979: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.c05) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.662: %R.as_type.as.Iterate.impl.NewCursor.type.979 = struct_value () [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.496: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.c05) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c12: %R.as_type.as.Iterate.impl.Next.type.496 = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.c32: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.e5c) [concrete] -// CHECK:STDOUT: %facet_value.d21: %Iterate_where.type.a32 = facet_value %ConstRange, (%Iterate.impl_witness.e5c) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.939: = impl_witness imports.%Iterate.impl_witness_table.cd6, @R.as_type.as.Iterate.impl(%facet_value.c05) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.bb4: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.c05) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.945: %R.as_type.as.Iterate.impl.NewCursor.type.bb4 = struct_value () [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.e75: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.c05) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.3b9: %R.as_type.as.Iterate.impl.Next.type.e75 = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.10d: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.939) [concrete] +// CHECK:STDOUT: %facet_value.098: %Iterate_where.type.a32 = facet_value %ConstRange, (%Iterate.impl_witness.939) [concrete] // CHECK:STDOUT: %r.param_patt.a73: %pattern_type.025 = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.0e2: %pattern_type.025 = at_binding_pattern r, %r.param_patt.a73 [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.ebd: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.c32) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.377: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.c32) [concrete] -// CHECK:STDOUT: %.243: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.ebd, %Iterate.facet.c32 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.662, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.c05) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.dbb: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.10d) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.e39: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.10d) [concrete] +// CHECK:STDOUT: %.639: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.dbb, %Iterate.facet.10d [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.945, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.c05) [concrete] // CHECK:STDOUT: %ptr.d1a: type = ptr_type %tuple.type.005 [concrete] -// CHECK:STDOUT: %.c31: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.377, %Iterate.facet.c32 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %R.as_type.as.Iterate.impl.Next.c12, @R.as_type.as.Iterate.impl.Next(%facet_value.c05) [concrete] +// CHECK:STDOUT: %.eba: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.e39, %Iterate.facet.10d [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %R.as_type.as.Iterate.impl.Next.3b9, @R.as_type.as.Iterate.impl.Next(%facet_value.c05) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.117: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.40b) [concrete] // CHECK:STDOUT: %.5a4: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.117, %Destroy.facet.40b [concrete] // CHECK:STDOUT: %complete_type.320: = complete_type_witness %tuple.type.005 [concrete] @@ -2177,13 +2177,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.e31: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.671) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.a54)] // CHECK:STDOUT: %Core.import_ref.cea = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.199 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.6d6, %Core.import_ref.6f3, %Core.import_ref.af2, %Core.import_ref.e31, %Core.import_ref.cea), @T.as_type.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %Core.import_ref.e69: @Float.as.Copy.impl.%Float.as.Copy.impl.Op.type (%Float.as.Copy.impl.Op.type.ff3) = import_ref Core//prelude/types/float, loc{{\d+_\d+}}, loaded [symbolic = @Float.as.Copy.impl.%Float.as.Copy.impl.Op (constants.%Float.as.Copy.impl.Op.d93)] -// CHECK:STDOUT: %Copy.impl_witness_table.4e8 = impl_witness_table (%Core.import_ref.e69), @Float.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] // CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] -// CHECK:STDOUT: %Core.import_ref.940: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.127) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.627)] -// CHECK:STDOUT: %Core.import_ref.fe7: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.d8f) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.c6d)] -// CHECK:STDOUT: %Iterate.impl_witness_table.ccd = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.940, %Core.import_ref.fe7), @R.as_type.as.Iterate.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.f6b: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.2e2) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.71b)] +// CHECK:STDOUT: %Core.import_ref.630: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.c6a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.49a)] +// CHECK:STDOUT: %Iterate.impl_witness_table.cd6 = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.f6b, %Core.import_ref.630), @R.as_type.as.Iterate.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.e69: @Float.as.Copy.impl.%Float.as.Copy.impl.Op.type (%Float.as.Copy.impl.Op.type.ff3) = import_ref Core//prelude/types/float, loc{{\d+_\d+}}, loaded [symbolic = @Float.as.Copy.impl.%Float.as.Copy.impl.Op (constants.%Float.as.Copy.impl.Op.d93)] +// CHECK:STDOUT: %Copy.impl_witness_table.4e8 = impl_witness_table (%Core.import_ref.e69), @Float.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.cb3: @Float.as.AddAssignWith.impl.%Float.as.AddAssignWith.impl.Op.type (%Float.as.AddAssignWith.impl.Op.type.fdd) = import_ref Core//prelude/types/float, loc{{\d+_\d+}}, loaded [symbolic = @Float.as.AddAssignWith.impl.%Float.as.AddAssignWith.impl.Op (constants.%Float.as.AddAssignWith.impl.Op.430)] // CHECK:STDOUT: %AddAssignWith.impl_witness_table = impl_witness_table (%Core.import_ref.cb3), @Float.as.AddAssignWith.impl [concrete] // CHECK:STDOUT: } @@ -2338,11 +2338,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c -// CHECK:STDOUT: %impl.elem2: %.243 = impl_witness_access constants.%Iterate.impl_witness.e5c, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.662] +// CHECK:STDOUT: %impl.elem2: %.639 = impl_witness_access constants.%Iterate.impl_witness.939, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.945] // CHECK:STDOUT: %bound_method.loc38_19.1: = bound_method %c.ref, %impl.elem2 -// CHECK:STDOUT: %facet_value.loc38_19.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.873, constants.%custom_witness.5d5, constants.%custom_witness.213, constants.%custom_witness.a31, constants.%custom_witness.994, constants.%custom_witness.821, constants.%custom_witness.393) [concrete = constants.%facet_value.c05] +// CHECK:STDOUT: %facet_value.loc38_19.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.873, constants.%custom_witness.5d5, constants.%custom_witness.213, constants.%custom_witness.a31, constants.%custom_witness.994, constants.%custom_witness.821, constants.%custom_witness.393) [concrete = constants.%facet_value.c05] // CHECK:STDOUT: %.loc38_19.1: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc38_19.1 [concrete = constants.%facet_value.c05] -// CHECK:STDOUT: %facet_value.loc38_19.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.873, constants.%custom_witness.5d5, constants.%custom_witness.213, constants.%custom_witness.a31, constants.%custom_witness.994, constants.%custom_witness.821, constants.%custom_witness.393) [concrete = constants.%facet_value.c05] +// CHECK:STDOUT: %facet_value.loc38_19.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.873, constants.%custom_witness.5d5, constants.%custom_witness.213, constants.%custom_witness.a31, constants.%custom_witness.994, constants.%custom_witness.821, constants.%custom_witness.393) [concrete = constants.%facet_value.c05] // CHECK:STDOUT: %.loc38_19.2: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc38_19.2 [concrete = constants.%facet_value.c05] // CHECK:STDOUT: %specific_fn.loc38_19.1: = specific_function %impl.elem2, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.c05) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn] // CHECK:STDOUT: %bound_method.loc38_19.2: = bound_method %c.ref, %specific_fn.loc38_19.1 @@ -2353,11 +2353,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr: %ptr.d1a = addr_of %var -// CHECK:STDOUT: %impl.elem3: %.c31 = impl_witness_access constants.%Iterate.impl_witness.e5c, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.c12] +// CHECK:STDOUT: %impl.elem3: %.eba = impl_witness_access constants.%Iterate.impl_witness.939, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.3b9] // CHECK:STDOUT: %bound_method.loc38_19.3: = bound_method %c.ref, %impl.elem3 -// CHECK:STDOUT: %facet_value.loc38_19.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.873, constants.%custom_witness.5d5, constants.%custom_witness.213, constants.%custom_witness.a31, constants.%custom_witness.994, constants.%custom_witness.821, constants.%custom_witness.393) [concrete = constants.%facet_value.c05] +// CHECK:STDOUT: %facet_value.loc38_19.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.873, constants.%custom_witness.5d5, constants.%custom_witness.213, constants.%custom_witness.a31, constants.%custom_witness.994, constants.%custom_witness.821, constants.%custom_witness.393) [concrete = constants.%facet_value.c05] // CHECK:STDOUT: %.loc38_19.3: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc38_19.3 [concrete = constants.%facet_value.c05] -// CHECK:STDOUT: %facet_value.loc38_19.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.873, constants.%custom_witness.5d5, constants.%custom_witness.213, constants.%custom_witness.a31, constants.%custom_witness.994, constants.%custom_witness.821, constants.%custom_witness.393) [concrete = constants.%facet_value.c05] +// CHECK:STDOUT: %facet_value.loc38_19.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.873, constants.%custom_witness.5d5, constants.%custom_witness.213, constants.%custom_witness.a31, constants.%custom_witness.994, constants.%custom_witness.821, constants.%custom_witness.393) [concrete = constants.%facet_value.c05] // CHECK:STDOUT: %.loc38_19.4: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc38_19.4 [concrete = constants.%facet_value.c05] // CHECK:STDOUT: %specific_fn.loc38_19.2: = specific_function %impl.elem3, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.c05) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn] // CHECK:STDOUT: %bound_method.loc38_19.4: = bound_method %c.ref, %specific_fn.loc38_19.2 @@ -2415,9 +2415,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %r.patt.loc20_60.2 => constants.%r.patt.b86 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.d21) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.098) { // CHECK:STDOUT: %R.patt.loc20_17.2 => constants.%R.patt.ae1 -// CHECK:STDOUT: %R.loc20_17.1 => constants.%facet_value.d21 +// CHECK:STDOUT: %R.loc20_17.1 => constants.%facet_value.098 // CHECK:STDOUT: %R.as_type.loc20_62.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.025 // CHECK:STDOUT: %r.param_patt.loc20_60.2 => constants.%r.param_patt.a73 @@ -2425,19 +2425,19 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc20 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.e5c -// CHECK:STDOUT: %Iterate.facet.loc24_19.5 => constants.%Iterate.facet.c32 -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.ebd -// CHECK:STDOUT: %.loc24_19.19 => constants.%.243 -// CHECK:STDOUT: %impl.elem2.loc24_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.662 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.939 +// CHECK:STDOUT: %Iterate.facet.loc24_19.5 => constants.%Iterate.facet.10d +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.dbb +// CHECK:STDOUT: %.loc24_19.19 => constants.%.639 +// CHECK:STDOUT: %impl.elem2.loc24_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.945 // CHECK:STDOUT: %specific_impl_fn.loc24_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.40b // CHECK:STDOUT: %as_type => constants.%tuple.type.005 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.320 // CHECK:STDOUT: %ptr => constants.%ptr.d1a -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.377 -// CHECK:STDOUT: %.loc24_19.20 => constants.%.c31 -// CHECK:STDOUT: %impl.elem3.loc24_19.2 => constants.%R.as_type.as.Iterate.impl.Next.c12 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.e39 +// CHECK:STDOUT: %.loc24_19.20 => constants.%.eba +// CHECK:STDOUT: %impl.elem3.loc24_19.2 => constants.%R.as_type.as.Iterate.impl.Next.3b9 // CHECK:STDOUT: %specific_impl_fn.loc24_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.117 // CHECK:STDOUT: %.loc24_19.21 => constants.%.5a4 @@ -2469,29 +2469,10 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.c3a: %T.as_type.as.OptionalStorage.impl.Some.type.973 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.f62: type = fn_type @T.as_type.as.OptionalStorage.impl.None, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.faf: %T.as_type.as.OptionalStorage.impl.None.type.f62 = struct_value () [symbolic] -// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %N.fe9: Core.IntLiteral = symbolic_binding N, 0 [symbolic] -// CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] -// CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc22_54.2 [concrete] -// CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.df9cc1.2: = custom_witness (%Destroy.Op.1a2547.2), @Destroy [concrete] -// CHECK:STDOUT: %Float.as.Copy.impl.Op.type.ff3: type = fn_type @Float.as.Copy.impl.Op, @Float.as.Copy.impl(%N.fe9) [symbolic] -// CHECK:STDOUT: %Float.as.Copy.impl.Op.d93: %Float.as.Copy.impl.Op.type.ff3 = struct_value () [symbolic] -// CHECK:STDOUT: %Copy.impl_witness.873: = impl_witness imports.%Copy.impl_witness_table.4e8, @Float.as.Copy.impl(%int_64) [concrete] -// CHECK:STDOUT: %facet_value.209: %facet_type = facet_value %f64.dc1, (%custom_witness.df9cc1.2, %Copy.impl_witness.873) [concrete] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.a32: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.209> [concrete] -// CHECK:STDOUT: %pattern_type.ff5: type = pattern_type %Iterate_where.type.a32 [concrete] -// CHECK:STDOUT: %R.patt.ae1: %pattern_type.ff5 = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R.c6e: %Iterate_where.type.a32 = symbolic_binding R, 0 [symbolic] -// CHECK:STDOUT: %R.as_type.087: type = facet_access_type %R.c6e [symbolic] -// CHECK:STDOUT: %pattern_type.3d7: type = pattern_type %R.as_type.087 [symbolic] -// CHECK:STDOUT: %r.param_patt.03a: %pattern_type.3d7 = value_param_pattern [symbolic] -// CHECK:STDOUT: %r.patt.b86: %pattern_type.3d7 = at_binding_pattern r, %r.param_patt.03a [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.aed: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.f6b: = lookup_impl_witness %.Self.aed, @CppRangeForIterate [symbolic_self] @@ -2512,10 +2493,29 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.lookup_impl_witness.ec3: = lookup_impl_witness %impl.elem0.af7, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.a7a: = lookup_impl_witness %impl.elem0.af7, @Copy [symbolic] // CHECK:STDOUT: %facet_value.194: %facet_type = facet_value %impl.elem0.af7, (%Destroy.lookup_impl_witness.ec3, %Copy.lookup_impl_witness.a7a) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.d8f: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c6d: %R.as_type.as.Iterate.impl.Next.type.d8f = struct_value () [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.127: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.627: %R.as_type.as.Iterate.impl.NewCursor.type.127 = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.c6a: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.49a: %R.as_type.as.Iterate.impl.Next.type.c6a = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.2e2: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.71b: %R.as_type.as.Iterate.impl.NewCursor.type.2e2 = struct_value () [symbolic] +// CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] +// CHECK:STDOUT: %f64.dc1: type = class_type @Float, @Float(%int_64) [concrete] +// CHECK:STDOUT: %pattern_type.fb7: type = pattern_type %f64.dc1 [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc22_54.2 [concrete] +// CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.df9cc1.3: = custom_witness (%Destroy.Op.1a2547.3), @Destroy [concrete] +// CHECK:STDOUT: %Float.as.Copy.impl.Op.type.ff3: type = fn_type @Float.as.Copy.impl.Op, @Float.as.Copy.impl(%N.fe9) [symbolic] +// CHECK:STDOUT: %Float.as.Copy.impl.Op.d93: %Float.as.Copy.impl.Op.type.ff3 = struct_value () [symbolic] +// CHECK:STDOUT: %Copy.impl_witness.873: = impl_witness imports.%Copy.impl_witness_table.4e8, @Float.as.Copy.impl(%int_64) [concrete] +// CHECK:STDOUT: %facet_value.209: %facet_type = facet_value %f64.dc1, (%custom_witness.df9cc1.3, %Copy.impl_witness.873) [concrete] +// CHECK:STDOUT: %Iterate_where.type.a32: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.209> [concrete] +// CHECK:STDOUT: %pattern_type.ff5: type = pattern_type %Iterate_where.type.a32 [concrete] +// CHECK:STDOUT: %R.patt.ae1: %pattern_type.ff5 = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R.c6e: %Iterate_where.type.a32 = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %R.as_type.087: type = facet_access_type %R.c6e [symbolic] +// CHECK:STDOUT: %pattern_type.3d7: type = pattern_type %R.as_type.087 [symbolic] +// CHECK:STDOUT: %r.param_patt.03a: %pattern_type.3d7 = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.b86: %pattern_type.3d7 = at_binding_pattern r, %r.param_patt.03a [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.93c: = lookup_impl_witness %R.c6e, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.94d: %Iterate.type = facet_value %R.as_type.087, (%Iterate.lookup_impl_witness.93c) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.4c7: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.94d) [symbolic] @@ -2537,7 +2537,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Optional.HasValue.53b: %Optional.HasValue.type.c09 = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.4f6: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.c07) [concrete] // CHECK:STDOUT: %Optional.Get.5f1: %Optional.Get.type.4f6 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.339: %Destroy.type = facet_value %f64.dc1, (%custom_witness.df9cc1.2) [concrete] +// CHECK:STDOUT: %Destroy.facet.339: %Destroy.type = facet_value %f64.dc1, (%custom_witness.df9cc1.3) [concrete] // CHECK:STDOUT: %MaybeUnformed.b7e: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.339) [concrete] // CHECK:STDOUT: %.cc0: type = maybe_unformed_type %f64.dc1 [concrete] // CHECK:STDOUT: %struct_type.value.has_value.ad9: type = struct_type {.value: %MaybeUnformed.b7e, .has_value: bool} [concrete] @@ -2587,28 +2587,28 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Iterator.Op.type.b9731e.4: type = fn_type @Iterator.Op.4 [concrete] // CHECK:STDOUT: %Iterator.Op.ac6aad.4: %Iterator.Op.type.b9731e.4 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.491: = custom_witness (%Iterator.Op.ac6aad.4), @Inc [concrete] -// CHECK:STDOUT: %facet_value.85f: %CppRangeForIterate_where.type.1c721f.1 = facet_value %MutableRange, (%custom_witness.df9cc1.2, %Copy.impl_witness.873, %custom_witness.902, %custom_witness.c08, %custom_witness.29f, %custom_witness.05b, %custom_witness.ed8, %custom_witness.491) [concrete] +// CHECK:STDOUT: %facet_value.85f: %CppRangeForIterate_where.type.1c721f.1 = facet_value %MutableRange, (%custom_witness.df9cc1.3, %Copy.impl_witness.873, %custom_witness.902, %custom_witness.c08, %custom_witness.29f, %custom_witness.05b, %custom_witness.ed8, %custom_witness.491) [concrete] // CHECK:STDOUT: %tuple.type.dd0: type = tuple_type (%Iterator, %Iterator) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.10: type = fn_type @Destroy.Op.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.10: %Destroy.Op.type.1d8f74.10 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.10: = custom_witness (%Destroy.Op.1a2547.10), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.e1e: %Destroy.type = facet_value %tuple.type.dd0, (%custom_witness.df9cc1.10) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.57f: = impl_witness imports.%Iterate.impl_witness_table.ccd, @R.as_type.as.Iterate.impl(%facet_value.85f) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.cac: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.85f) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.b0d: %R.as_type.as.Iterate.impl.NewCursor.type.cac = struct_value () [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.82c: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.85f) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c07: %R.as_type.as.Iterate.impl.Next.type.82c = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.d2f: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.57f) [concrete] -// CHECK:STDOUT: %facet_value.37c: %Iterate_where.type.a32 = facet_value %MutableRange, (%Iterate.impl_witness.57f) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.ce4: = impl_witness imports.%Iterate.impl_witness_table.cd6, @R.as_type.as.Iterate.impl(%facet_value.85f) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.5d3: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.85f) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.bc5: %R.as_type.as.Iterate.impl.NewCursor.type.5d3 = struct_value () [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.74e: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.85f) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.8ab: %R.as_type.as.Iterate.impl.Next.type.74e = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.2f3: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.ce4) [concrete] +// CHECK:STDOUT: %facet_value.a73: %Iterate_where.type.a32 = facet_value %MutableRange, (%Iterate.impl_witness.ce4) [concrete] // CHECK:STDOUT: %r.param_patt.aeb: %pattern_type.992 = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.fe7: %pattern_type.992 = at_binding_pattern r, %r.param_patt.aeb [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.1cb: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.d2f) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.ba9: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.d2f) [concrete] -// CHECK:STDOUT: %.dab: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.1cb, %Iterate.facet.d2f [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.b0d, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.85f) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.3d1: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.2f3) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.d94: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.2f3) [concrete] +// CHECK:STDOUT: %.9ef: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.3d1, %Iterate.facet.2f3 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.bc5, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.85f) [concrete] // CHECK:STDOUT: %ptr.a4f: type = ptr_type %tuple.type.dd0 [concrete] -// CHECK:STDOUT: %.7d2: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.ba9, %Iterate.facet.d2f [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %R.as_type.as.Iterate.impl.Next.c07, @R.as_type.as.Iterate.impl.Next(%facet_value.85f) [concrete] +// CHECK:STDOUT: %.ade: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.d94, %Iterate.facet.2f3 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %R.as_type.as.Iterate.impl.Next.8ab, @R.as_type.as.Iterate.impl.Next(%facet_value.85f) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.452: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.e1e) [concrete] // CHECK:STDOUT: %.899: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.452, %Destroy.facet.e1e [concrete] // CHECK:STDOUT: %complete_type.843: = complete_type_witness %tuple.type.dd0 [concrete] @@ -2624,13 +2624,13 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.e31: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.671) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.a54)] // CHECK:STDOUT: %Core.import_ref.cea = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.199 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.6d6, %Core.import_ref.6f3, %Core.import_ref.af2, %Core.import_ref.e31, %Core.import_ref.cea), @T.as_type.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %Core.import_ref.e69: @Float.as.Copy.impl.%Float.as.Copy.impl.Op.type (%Float.as.Copy.impl.Op.type.ff3) = import_ref Core//prelude/types/float, loc{{\d+_\d+}}, loaded [symbolic = @Float.as.Copy.impl.%Float.as.Copy.impl.Op (constants.%Float.as.Copy.impl.Op.d93)] -// CHECK:STDOUT: %Copy.impl_witness_table.4e8 = impl_witness_table (%Core.import_ref.e69), @Float.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] // CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] -// CHECK:STDOUT: %Core.import_ref.940: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.127) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.627)] -// CHECK:STDOUT: %Core.import_ref.fe7: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.d8f) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.c6d)] -// CHECK:STDOUT: %Iterate.impl_witness_table.ccd = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.940, %Core.import_ref.fe7), @R.as_type.as.Iterate.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.f6b: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.2e2) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.71b)] +// CHECK:STDOUT: %Core.import_ref.630: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.c6a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.49a)] +// CHECK:STDOUT: %Iterate.impl_witness_table.cd6 = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.f6b, %Core.import_ref.630), @R.as_type.as.Iterate.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.e69: @Float.as.Copy.impl.%Float.as.Copy.impl.Op.type (%Float.as.Copy.impl.Op.type.ff3) = import_ref Core//prelude/types/float, loc{{\d+_\d+}}, loaded [symbolic = @Float.as.Copy.impl.%Float.as.Copy.impl.Op (constants.%Float.as.Copy.impl.Op.d93)] +// CHECK:STDOUT: %Copy.impl_witness_table.4e8 = impl_witness_table (%Core.import_ref.e69), @Float.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.cb3: @Float.as.AddAssignWith.impl.%Float.as.AddAssignWith.impl.Op.type (%Float.as.AddAssignWith.impl.Op.type.fdd) = import_ref Core//prelude/types/float, loc{{\d+_\d+}}, loaded [symbolic = @Float.as.AddAssignWith.impl.%Float.as.AddAssignWith.impl.Op (constants.%Float.as.AddAssignWith.impl.Op.430)] // CHECK:STDOUT: %AddAssignWith.impl_witness_table = impl_witness_table (%Core.import_ref.cb3), @Float.as.AddAssignWith.impl [concrete] // CHECK:STDOUT: } @@ -2785,11 +2785,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %i.patt: %pattern_type.fb7 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %m.ref: ref %MutableRange = name_ref m, %m -// CHECK:STDOUT: %impl.elem2: %.dab = impl_witness_access constants.%Iterate.impl_witness.57f, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.b0d] +// CHECK:STDOUT: %impl.elem2: %.9ef = impl_witness_access constants.%Iterate.impl_witness.ce4, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.bc5] // CHECK:STDOUT: %bound_method.loc68_19.1: = bound_method %m.ref, %impl.elem2 -// CHECK:STDOUT: %facet_value.loc68_19.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.873, constants.%custom_witness.902, constants.%custom_witness.c08, constants.%custom_witness.29f, constants.%custom_witness.05b, constants.%custom_witness.ed8, constants.%custom_witness.491) [concrete = constants.%facet_value.85f] +// CHECK:STDOUT: %facet_value.loc68_19.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.873, constants.%custom_witness.902, constants.%custom_witness.c08, constants.%custom_witness.29f, constants.%custom_witness.05b, constants.%custom_witness.ed8, constants.%custom_witness.491) [concrete = constants.%facet_value.85f] // CHECK:STDOUT: %.loc68_19.1: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc68_19.1 [concrete = constants.%facet_value.85f] -// CHECK:STDOUT: %facet_value.loc68_19.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.873, constants.%custom_witness.902, constants.%custom_witness.c08, constants.%custom_witness.29f, constants.%custom_witness.05b, constants.%custom_witness.ed8, constants.%custom_witness.491) [concrete = constants.%facet_value.85f] +// CHECK:STDOUT: %facet_value.loc68_19.2: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.873, constants.%custom_witness.902, constants.%custom_witness.c08, constants.%custom_witness.29f, constants.%custom_witness.05b, constants.%custom_witness.ed8, constants.%custom_witness.491) [concrete = constants.%facet_value.85f] // CHECK:STDOUT: %.loc68_19.2: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc68_19.2 [concrete = constants.%facet_value.85f] // CHECK:STDOUT: %specific_fn.loc68_19.1: = specific_function %impl.elem2, @R.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.85f) [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn] // CHECK:STDOUT: %bound_method.loc68_19.2: = bound_method %m.ref, %specific_fn.loc68_19.1 @@ -2801,11 +2801,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr: %ptr.a4f = addr_of %var -// CHECK:STDOUT: %impl.elem3: %.7d2 = impl_witness_access constants.%Iterate.impl_witness.57f, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.c07] +// CHECK:STDOUT: %impl.elem3: %.ade = impl_witness_access constants.%Iterate.impl_witness.ce4, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.8ab] // CHECK:STDOUT: %bound_method.loc68_19.3: = bound_method %m.ref, %impl.elem3 -// CHECK:STDOUT: %facet_value.loc68_19.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.873, constants.%custom_witness.902, constants.%custom_witness.c08, constants.%custom_witness.29f, constants.%custom_witness.05b, constants.%custom_witness.ed8, constants.%custom_witness.491) [concrete = constants.%facet_value.85f] +// CHECK:STDOUT: %facet_value.loc68_19.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.873, constants.%custom_witness.902, constants.%custom_witness.c08, constants.%custom_witness.29f, constants.%custom_witness.05b, constants.%custom_witness.ed8, constants.%custom_witness.491) [concrete = constants.%facet_value.85f] // CHECK:STDOUT: %.loc68_19.3: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc68_19.3 [concrete = constants.%facet_value.85f] -// CHECK:STDOUT: %facet_value.loc68_19.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.2, constants.%Copy.impl_witness.873, constants.%custom_witness.902, constants.%custom_witness.c08, constants.%custom_witness.29f, constants.%custom_witness.05b, constants.%custom_witness.ed8, constants.%custom_witness.491) [concrete = constants.%facet_value.85f] +// CHECK:STDOUT: %facet_value.loc68_19.4: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableRange, (constants.%custom_witness.df9cc1.3, constants.%Copy.impl_witness.873, constants.%custom_witness.902, constants.%custom_witness.c08, constants.%custom_witness.29f, constants.%custom_witness.05b, constants.%custom_witness.ed8, constants.%custom_witness.491) [concrete = constants.%facet_value.85f] // CHECK:STDOUT: %.loc68_19.4: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableRange, %facet_value.loc68_19.4 [concrete = constants.%facet_value.85f] // CHECK:STDOUT: %specific_fn.loc68_19.2: = specific_function %impl.elem3, @R.as_type.as.Iterate.impl.Next(constants.%facet_value.85f) [concrete = constants.%R.as_type.as.Iterate.impl.Next.specific_fn] // CHECK:STDOUT: %bound_method.loc68_19.4: = bound_method %m.ref, %specific_fn.loc68_19.2 @@ -2864,9 +2864,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %r.patt.loc22_60.2 => constants.%r.patt.b86 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.37c) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.a73) { // CHECK:STDOUT: %R.patt.loc22_17.2 => constants.%R.patt.ae1 -// CHECK:STDOUT: %R.loc22_17.1 => constants.%facet_value.37c +// CHECK:STDOUT: %R.loc22_17.1 => constants.%facet_value.a73 // CHECK:STDOUT: %R.as_type.loc22_62.1 => constants.%MutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.992 // CHECK:STDOUT: %r.param_patt.loc22_60.2 => constants.%r.param_patt.aeb @@ -2874,19 +2874,19 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc22 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.57f -// CHECK:STDOUT: %Iterate.facet.loc26_19.5 => constants.%Iterate.facet.d2f -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.1cb -// CHECK:STDOUT: %.loc26_19.19 => constants.%.dab -// CHECK:STDOUT: %impl.elem2.loc26_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.b0d +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.ce4 +// CHECK:STDOUT: %Iterate.facet.loc26_19.5 => constants.%Iterate.facet.2f3 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.3d1 +// CHECK:STDOUT: %.loc26_19.19 => constants.%.9ef +// CHECK:STDOUT: %impl.elem2.loc26_19.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.bc5 // CHECK:STDOUT: %specific_impl_fn.loc26_19.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.e1e // CHECK:STDOUT: %as_type => constants.%tuple.type.dd0 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.843 // CHECK:STDOUT: %ptr => constants.%ptr.a4f -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.ba9 -// CHECK:STDOUT: %.loc26_19.20 => constants.%.7d2 -// CHECK:STDOUT: %impl.elem3.loc26_19.2 => constants.%R.as_type.as.Iterate.impl.Next.c07 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.d94 +// CHECK:STDOUT: %.loc26_19.20 => constants.%.ade +// CHECK:STDOUT: %impl.elem3.loc26_19.2 => constants.%R.as_type.as.Iterate.impl.Next.8ab // CHECK:STDOUT: %specific_impl_fn.loc26_19.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.452 // CHECK:STDOUT: %.loc26_19.21 => constants.%.899 @@ -2918,34 +2918,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.c3a: %T.as_type.as.OptionalStorage.impl.Some.type.973 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.f62: type = fn_type @T.as_type.as.OptionalStorage.impl.None, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.faf: %T.as_type.as.OptionalStorage.impl.None.type.f62 = struct_value () [symbolic] -// CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %pattern_type.e41: type = pattern_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.1: type = fn_type @ValueType.Op.1 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.1: %ValueType.Op.type.79266b.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.fef: = custom_witness (%ValueType.Op.4c94b9.1), @Destroy [concrete] -// CHECK:STDOUT: %const.773: type = const_type %ValueType [concrete] -// CHECK:STDOUT: %ptr.32e: type = ptr_type %const.773 [concrete] -// CHECK:STDOUT: %ptr.9d3: type = ptr_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.2: type = fn_type @ValueType.Op.2 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.2: %ValueType.Op.type.79266b.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] -// CHECK:STDOUT: %facet_value.ccb: %facet_type = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.f9d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ccb> [concrete] -// CHECK:STDOUT: %pattern_type.c7b: type = pattern_type %Iterate_where.type.f9d [concrete] -// CHECK:STDOUT: %R.patt.81e: %pattern_type.c7b = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R.db4: %Iterate_where.type.f9d = symbolic_binding R, 0 [symbolic] -// CHECK:STDOUT: %R.as_type.c37: type = facet_access_type %R.db4 [symbolic] -// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %R.as_type.c37 [symbolic] -// CHECK:STDOUT: %r.param_patt.90c: %pattern_type.17d = value_param_pattern [symbolic] -// CHECK:STDOUT: %r.patt.d6c: %pattern_type.17d = at_binding_pattern r, %r.param_patt.90c [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.aed: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.f6b: = lookup_impl_witness %.Self.aed, @CppRangeForIterate [symbolic_self] @@ -2966,10 +2941,35 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.lookup_impl_witness.ec3: = lookup_impl_witness %impl.elem0.af7, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.a7a: = lookup_impl_witness %impl.elem0.af7, @Copy [symbolic] // CHECK:STDOUT: %facet_value.194: %facet_type = facet_value %impl.elem0.af7, (%Destroy.lookup_impl_witness.ec3, %Copy.lookup_impl_witness.a7a) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.d8f: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c6d: %R.as_type.as.Iterate.impl.Next.type.d8f = struct_value () [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.127: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.627: %R.as_type.as.Iterate.impl.NewCursor.type.127 = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.c6a: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.49a: %R.as_type.as.Iterate.impl.Next.type.c6a = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.2e2: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.71b: %R.as_type.as.Iterate.impl.NewCursor.type.2e2 = struct_value () [symbolic] +// CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.e41: type = pattern_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] +// CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %ValueType.Op.type.79266b.1: type = fn_type @ValueType.Op.1 [concrete] +// CHECK:STDOUT: %ValueType.Op.4c94b9.1: %ValueType.Op.type.79266b.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.fef: = custom_witness (%ValueType.Op.4c94b9.1), @Destroy [concrete] +// CHECK:STDOUT: %const.773: type = const_type %ValueType [concrete] +// CHECK:STDOUT: %ptr.32e: type = ptr_type %const.773 [concrete] +// CHECK:STDOUT: %ptr.9d3: type = ptr_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.Op.type.79266b.2: type = fn_type @ValueType.Op.2 [concrete] +// CHECK:STDOUT: %ValueType.Op.4c94b9.2: %ValueType.Op.type.79266b.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] +// CHECK:STDOUT: %facet_value.ccb: %facet_type = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] +// CHECK:STDOUT: %Iterate_where.type.f9d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ccb> [concrete] +// CHECK:STDOUT: %pattern_type.c7b: type = pattern_type %Iterate_where.type.f9d [concrete] +// CHECK:STDOUT: %R.patt.81e: %pattern_type.c7b = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R.db4: %Iterate_where.type.f9d = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %R.as_type.c37: type = facet_access_type %R.db4 [symbolic] +// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %R.as_type.c37 [symbolic] +// CHECK:STDOUT: %r.param_patt.90c: %pattern_type.17d = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.d6c: %pattern_type.17d = at_binding_pattern r, %r.param_patt.90c [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.173: = lookup_impl_witness %R.db4, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.b38: %Iterate.type = facet_value %R.as_type.c37, (%Iterate.lookup_impl_witness.173) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.5cd: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.b38) [symbolic] @@ -3044,22 +3044,22 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.Op.1a2547.8: %Destroy.Op.type.1d8f74.8 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.8: = custom_witness (%Destroy.Op.1a2547.8), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.777: %Destroy.type = facet_value %tuple.type.df8, (%custom_witness.df9cc1.8) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.887: = impl_witness imports.%Iterate.impl_witness_table.ccd, @R.as_type.as.Iterate.impl(%facet_value.b1e) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.9c3: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.b1e) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.4e7: %R.as_type.as.Iterate.impl.NewCursor.type.9c3 = struct_value () [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.795: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.b1e) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.4d5: %R.as_type.as.Iterate.impl.Next.type.795 = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.9a5: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.887) [concrete] -// CHECK:STDOUT: %facet_value.a17: %Iterate_where.type.f9d = facet_value %ConstRange, (%Iterate.impl_witness.887) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.1a3: = impl_witness imports.%Iterate.impl_witness_table.cd6, @R.as_type.as.Iterate.impl(%facet_value.b1e) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.7d5: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.b1e) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.35d: %R.as_type.as.Iterate.impl.NewCursor.type.7d5 = struct_value () [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.971: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.b1e) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.8fc: %R.as_type.as.Iterate.impl.Next.type.971 = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.55f: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.1a3) [concrete] +// CHECK:STDOUT: %facet_value.19f: %Iterate_where.type.f9d = facet_value %ConstRange, (%Iterate.impl_witness.1a3) [concrete] // CHECK:STDOUT: %r.param_patt.a73: %pattern_type.025 = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.0e2: %pattern_type.025 = at_binding_pattern r, %r.param_patt.a73 [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.8d8: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.9a5) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.069: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.9a5) [concrete] -// CHECK:STDOUT: %.2d3f: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.8d8, %Iterate.facet.9a5 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.4e7, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.b1e) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.eb0: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.55f) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.326: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.55f) [concrete] +// CHECK:STDOUT: %.239: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.eb0, %Iterate.facet.55f [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.35d, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.b1e) [concrete] // CHECK:STDOUT: %ptr.fc0: type = ptr_type %tuple.type.df8 [concrete] -// CHECK:STDOUT: %.e3b: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.069, %Iterate.facet.9a5 [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %R.as_type.as.Iterate.impl.Next.4d5, @R.as_type.as.Iterate.impl.Next(%facet_value.b1e) [concrete] +// CHECK:STDOUT: %.eb6: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.326, %Iterate.facet.55f [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %R.as_type.as.Iterate.impl.Next.8fc, @R.as_type.as.Iterate.impl.Next(%facet_value.b1e) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.589: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.777) [concrete] // CHECK:STDOUT: %.4e1: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.589, %Destroy.facet.777 [concrete] // CHECK:STDOUT: %complete_type.e35: = complete_type_witness %tuple.type.df8 [concrete] @@ -3079,6 +3079,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.e31: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.671) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.a54)] // CHECK:STDOUT: %Core.import_ref.cea = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.199 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.6d6, %Core.import_ref.6f3, %Core.import_ref.af2, %Core.import_ref.e31, %Core.import_ref.cea), @T.as_type.as.OptionalStorage.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] +// CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] +// CHECK:STDOUT: %Core.import_ref.f6b: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.2e2) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.71b)] +// CHECK:STDOUT: %Core.import_ref.630: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.c6a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.49a)] +// CHECK:STDOUT: %Iterate.impl_witness_table.cd6 = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.f6b, %Core.import_ref.630), @R.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %N: = namespace [concrete] { // CHECK:STDOUT: .ValueType = %ValueType.decl // CHECK:STDOUT: .ConstRange = %ConstRange.decl @@ -3090,11 +3095,6 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] -// CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] -// CHECK:STDOUT: %Core.import_ref.940: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.127) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.627)] -// CHECK:STDOUT: %Core.import_ref.fe7: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.d8f) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.c6d)] -// CHECK:STDOUT: %Iterate.impl_witness_table.ccd = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.940, %Core.import_ref.fe7), @R.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.decl: %operator_PlusEqual__carbon_thunk.type = fn_decl @operator_PlusEqual__carbon_thunk [concrete = constants.%operator_PlusEqual__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { @@ -3262,7 +3262,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c -// CHECK:STDOUT: %impl.elem2: %.2d3f = impl_witness_access constants.%Iterate.impl_witness.887, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.4e7] +// CHECK:STDOUT: %impl.elem2: %.239 = impl_witness_access constants.%Iterate.impl_witness.1a3, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.35d] // CHECK:STDOUT: %bound_method.loc45_31.1: = bound_method %c.ref, %impl.elem2 // CHECK:STDOUT: %facet_value.loc45_31.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.c2f, constants.%custom_witness.21358e.1, constants.%custom_witness.a3150e.1, constants.%custom_witness.1d3, constants.%custom_witness.aa4, constants.%custom_witness.393, constants.%custom_witness.21358e.2, constants.%custom_witness.a3150e.2) [concrete = constants.%facet_value.b1e] // CHECK:STDOUT: %.loc45_31.1: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc45_31.1 [concrete = constants.%facet_value.b1e] @@ -3277,7 +3277,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr.loc45: %ptr.fc0 = addr_of %var -// CHECK:STDOUT: %impl.elem3: %.e3b = impl_witness_access constants.%Iterate.impl_witness.887, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.4d5] +// CHECK:STDOUT: %impl.elem3: %.eb6 = impl_witness_access constants.%Iterate.impl_witness.1a3, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.8fc] // CHECK:STDOUT: %bound_method.loc45_31.3: = bound_method %c.ref, %impl.elem3 // CHECK:STDOUT: %facet_value.loc45_31.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%ConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.c2f, constants.%custom_witness.21358e.1, constants.%custom_witness.a3150e.1, constants.%custom_witness.1d3, constants.%custom_witness.aa4, constants.%custom_witness.393, constants.%custom_witness.21358e.2, constants.%custom_witness.a3150e.2) [concrete = constants.%facet_value.b1e] // CHECK:STDOUT: %.loc45_31.3: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%ConstRange, %facet_value.loc45_31.3 [concrete = constants.%facet_value.b1e] @@ -3348,9 +3348,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %r.patt.loc27_72.2 => constants.%r.patt.d6c // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.a17) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.19f) { // CHECK:STDOUT: %R.patt.loc27_17.2 => constants.%R.patt.81e -// CHECK:STDOUT: %R.loc27_17.1 => constants.%facet_value.a17 +// CHECK:STDOUT: %R.loc27_17.1 => constants.%facet_value.19f // CHECK:STDOUT: %R.as_type.loc27_74.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.025 // CHECK:STDOUT: %r.param_patt.loc27_72.2 => constants.%r.param_patt.a73 @@ -3358,19 +3358,19 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc27 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.887 -// CHECK:STDOUT: %Iterate.facet.loc31_31.5 => constants.%Iterate.facet.9a5 -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.8d8 -// CHECK:STDOUT: %.loc31_31.20 => constants.%.2d3f -// CHECK:STDOUT: %impl.elem2.loc31_31.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.4e7 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.1a3 +// CHECK:STDOUT: %Iterate.facet.loc31_31.5 => constants.%Iterate.facet.55f +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.eb0 +// CHECK:STDOUT: %.loc31_31.20 => constants.%.239 +// CHECK:STDOUT: %impl.elem2.loc31_31.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.35d // CHECK:STDOUT: %specific_impl_fn.loc31_31.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.777 // CHECK:STDOUT: %as_type => constants.%tuple.type.df8 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.e35 // CHECK:STDOUT: %ptr => constants.%ptr.fc0 -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.069 -// CHECK:STDOUT: %.loc31_31.21 => constants.%.e3b -// CHECK:STDOUT: %impl.elem3.loc31_31.2 => constants.%R.as_type.as.Iterate.impl.Next.4d5 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.326 +// CHECK:STDOUT: %.loc31_31.21 => constants.%.eb6 +// CHECK:STDOUT: %impl.elem3.loc31_31.2 => constants.%R.as_type.as.Iterate.impl.Next.8fc // CHECK:STDOUT: %specific_impl_fn.loc31_31.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.589 // CHECK:STDOUT: %.loc31_31.22 => constants.%.4e1 @@ -3398,6 +3398,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.a54: %T.as_type.as.OptionalStorage.impl.Get.type.671 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d76: type = fn_type @T.as_type.as.OptionalStorage.impl.Has, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.aa4: %T.as_type.as.OptionalStorage.impl.Has.type.d76 = struct_value () [symbolic] +// CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] +// CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] +// CHECK:STDOUT: %impl.elem0.294: %facet_type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] // CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] // CHECK:STDOUT: %pattern_type.e41: type = pattern_type %ValueType [concrete] // CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] @@ -3412,9 +3415,6 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %ValueType.Op.4c94b9.2: %ValueType.Op.type.79266b.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] // CHECK:STDOUT: %facet_value.ccb: %facet_type = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] -// CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] -// CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] -// CHECK:STDOUT: %impl.elem0.294: %facet_type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] // CHECK:STDOUT: %Iterate_where.type.f9d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ccb> [concrete] // CHECK:STDOUT: %pattern_type.c7b: type = pattern_type %Iterate_where.type.f9d [concrete] // CHECK:STDOUT: %R.patt.81e: %pattern_type.c7b = symbolic_binding_pattern R, 0 [symbolic] @@ -3714,34 +3714,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.c3a: %T.as_type.as.OptionalStorage.impl.Some.type.973 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.f62: type = fn_type @T.as_type.as.OptionalStorage.impl.None, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.faf: %T.as_type.as.OptionalStorage.impl.None.type.f62 = struct_value () [symbolic] -// CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %pattern_type.e41: type = pattern_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.1: type = fn_type @ValueType.Op.1 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.1: %ValueType.Op.type.79266b.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.fef: = custom_witness (%ValueType.Op.4c94b9.1), @Destroy [concrete] -// CHECK:STDOUT: %const.773: type = const_type %ValueType [concrete] -// CHECK:STDOUT: %ptr.32e: type = ptr_type %const.773 [concrete] -// CHECK:STDOUT: %ptr.9d3: type = ptr_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.2: type = fn_type @ValueType.Op.2 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.2: %ValueType.Op.type.79266b.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] -// CHECK:STDOUT: %facet_value.ccb: %facet_type = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.f9d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ccb> [concrete] -// CHECK:STDOUT: %pattern_type.c7b: type = pattern_type %Iterate_where.type.f9d [concrete] -// CHECK:STDOUT: %R.patt.81e: %pattern_type.c7b = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R.db4: %Iterate_where.type.f9d = symbolic_binding R, 0 [symbolic] -// CHECK:STDOUT: %R.as_type.c37: type = facet_access_type %R.db4 [symbolic] -// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %R.as_type.c37 [symbolic] -// CHECK:STDOUT: %r.param_patt.90c: %pattern_type.17d = value_param_pattern [symbolic] -// CHECK:STDOUT: %r.patt.d6c: %pattern_type.17d = at_binding_pattern r, %r.param_patt.90c [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] // CHECK:STDOUT: %CppRangeForIterate.type: type = facet_type <@CppRangeForIterate> [concrete] // CHECK:STDOUT: %.Self.aed: %CppRangeForIterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.f6b: = lookup_impl_witness %.Self.aed, @CppRangeForIterate [symbolic_self] @@ -3762,10 +3737,35 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.lookup_impl_witness.ec3: = lookup_impl_witness %impl.elem0.af7, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.a7a: = lookup_impl_witness %impl.elem0.af7, @Copy [symbolic] // CHECK:STDOUT: %facet_value.194: %facet_type = facet_value %impl.elem0.af7, (%Destroy.lookup_impl_witness.ec3, %Copy.lookup_impl_witness.a7a) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.d8f: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.c6d: %R.as_type.as.Iterate.impl.Next.type.d8f = struct_value () [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.127: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.627: %R.as_type.as.Iterate.impl.NewCursor.type.127 = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.c6a: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.49a: %R.as_type.as.Iterate.impl.Next.type.c6a = struct_value () [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.2e2: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%R.39b) [symbolic] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.71b: %R.as_type.as.Iterate.impl.NewCursor.type.2e2 = struct_value () [symbolic] +// CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] +// CHECK:STDOUT: %pattern_type.e41: type = pattern_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] +// CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %ValueType.Op.type.79266b.1: type = fn_type @ValueType.Op.1 [concrete] +// CHECK:STDOUT: %ValueType.Op.4c94b9.1: %ValueType.Op.type.79266b.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.fef: = custom_witness (%ValueType.Op.4c94b9.1), @Destroy [concrete] +// CHECK:STDOUT: %const.773: type = const_type %ValueType [concrete] +// CHECK:STDOUT: %ptr.32e: type = ptr_type %const.773 [concrete] +// CHECK:STDOUT: %ptr.9d3: type = ptr_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.Op.type.79266b.2: type = fn_type @ValueType.Op.2 [concrete] +// CHECK:STDOUT: %ValueType.Op.4c94b9.2: %ValueType.Op.type.79266b.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] +// CHECK:STDOUT: %facet_value.ccb: %facet_type = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] +// CHECK:STDOUT: %Iterate_where.type.f9d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ccb> [concrete] +// CHECK:STDOUT: %pattern_type.c7b: type = pattern_type %Iterate_where.type.f9d [concrete] +// CHECK:STDOUT: %R.patt.81e: %pattern_type.c7b = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R.db4: %Iterate_where.type.f9d = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %R.as_type.c37: type = facet_access_type %R.db4 [symbolic] +// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %R.as_type.c37 [symbolic] +// CHECK:STDOUT: %r.param_patt.90c: %pattern_type.17d = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.d6c: %pattern_type.17d = at_binding_pattern r, %r.param_patt.90c [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.173: = lookup_impl_witness %R.db4, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.b38: %Iterate.type = facet_value %R.as_type.c37, (%Iterate.lookup_impl_witness.173) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.5cd: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.b38) [symbolic] @@ -3833,22 +3833,22 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.Op.1a2547.8: %Destroy.Op.type.1d8f74.8 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.8: = custom_witness (%Destroy.Op.1a2547.8), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.7aa: %Destroy.type = facet_value %tuple.type.56e, (%custom_witness.df9cc1.8) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.b32: = impl_witness imports.%Iterate.impl_witness_table.ccd, @R.as_type.as.Iterate.impl(%facet_value.88d) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.b61: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.88d) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.b31: %R.as_type.as.Iterate.impl.NewCursor.type.b61 = struct_value () [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.1dc: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.88d) [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.b70: %R.as_type.as.Iterate.impl.Next.type.1dc = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.2df: %Iterate.type = facet_value %MutableAndConstRange, (%Iterate.impl_witness.b32) [concrete] -// CHECK:STDOUT: %facet_value.139: %Iterate_where.type.f9d = facet_value %MutableAndConstRange, (%Iterate.impl_witness.b32) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.d03: = impl_witness imports.%Iterate.impl_witness_table.cd6, @R.as_type.as.Iterate.impl(%facet_value.88d) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.type.1da: type = fn_type @R.as_type.as.Iterate.impl.NewCursor, @R.as_type.as.Iterate.impl(%facet_value.88d) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.9f9: %R.as_type.as.Iterate.impl.NewCursor.type.1da = struct_value () [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.type.476: type = fn_type @R.as_type.as.Iterate.impl.Next, @R.as_type.as.Iterate.impl(%facet_value.88d) [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.622: %R.as_type.as.Iterate.impl.Next.type.476 = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.8e6: %Iterate.type = facet_value %MutableAndConstRange, (%Iterate.impl_witness.d03) [concrete] +// CHECK:STDOUT: %facet_value.fb9: %Iterate_where.type.f9d = facet_value %MutableAndConstRange, (%Iterate.impl_witness.d03) [concrete] // CHECK:STDOUT: %r.param_patt.8bb: %pattern_type.394 = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.ac4: %pattern_type.394 = at_binding_pattern r, %r.param_patt.8bb [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.7c9: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.2df) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.248: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.2df) [concrete] -// CHECK:STDOUT: %.59c: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.7c9, %Iterate.facet.2df [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.b31, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.88d) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.726: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.8e6) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.604: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.8e6) [concrete] +// CHECK:STDOUT: %.c8e: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.726, %Iterate.facet.8e6 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %R.as_type.as.Iterate.impl.NewCursor.9f9, @R.as_type.as.Iterate.impl.NewCursor(%facet_value.88d) [concrete] // CHECK:STDOUT: %ptr.484: type = ptr_type %tuple.type.56e [concrete] -// CHECK:STDOUT: %.641: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.248, %Iterate.facet.2df [concrete] -// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %R.as_type.as.Iterate.impl.Next.b70, @R.as_type.as.Iterate.impl.Next(%facet_value.88d) [concrete] +// CHECK:STDOUT: %.06b: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.604, %Iterate.facet.8e6 [concrete] +// CHECK:STDOUT: %R.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %R.as_type.as.Iterate.impl.Next.622, @R.as_type.as.Iterate.impl.Next(%facet_value.88d) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.b7b: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.7aa) [concrete] // CHECK:STDOUT: %.1ad: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.b7b, %Destroy.facet.7aa [concrete] // CHECK:STDOUT: %complete_type.1b5: = complete_type_witness %tuple.type.56e [concrete] @@ -3868,6 +3868,11 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.e31: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.671) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.a54)] // CHECK:STDOUT: %Core.import_ref.cea = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.199 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.6d6, %Core.import_ref.6f3, %Core.import_ref.af2, %Core.import_ref.e31, %Core.import_ref.cea), @T.as_type.as.OptionalStorage.impl [concrete] +// CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] +// CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] +// CHECK:STDOUT: %Core.import_ref.f6b: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.2e2) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.71b)] +// CHECK:STDOUT: %Core.import_ref.630: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.c6a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.49a)] +// CHECK:STDOUT: %Iterate.impl_witness_table.cd6 = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.f6b, %Core.import_ref.630), @R.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %N: = namespace [concrete] { // CHECK:STDOUT: .ValueType = %ValueType.decl // CHECK:STDOUT: .MutableAndConstRange = %MutableAndConstRange.decl @@ -3879,11 +3884,6 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import_ref.301: %facet_type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.194)] -// CHECK:STDOUT: %Core.import_ref.89f: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.593)] -// CHECK:STDOUT: %Core.import_ref.940: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor.type (%R.as_type.as.Iterate.impl.NewCursor.type.127) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.NewCursor (constants.%R.as_type.as.Iterate.impl.NewCursor.627)] -// CHECK:STDOUT: %Core.import_ref.fe7: @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next.type (%R.as_type.as.Iterate.impl.Next.type.d8f) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @R.as_type.as.Iterate.impl.%R.as_type.as.Iterate.impl.Next (constants.%R.as_type.as.Iterate.impl.Next.c6d)] -// CHECK:STDOUT: %Iterate.impl_witness_table.ccd = impl_witness_table (%Core.import_ref.301, %Core.import_ref.89f, %Core.import_ref.940, %Core.import_ref.fe7), @R.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.decl: %operator_PlusEqual__carbon_thunk.type = fn_decl @operator_PlusEqual__carbon_thunk [concrete = constants.%operator_PlusEqual__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { @@ -4051,7 +4051,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %mc.ref: ref %MutableAndConstRange = name_ref mc, %mc -// CHECK:STDOUT: %impl.elem2: %.59c = impl_witness_access constants.%Iterate.impl_witness.b32, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.b31] +// CHECK:STDOUT: %impl.elem2: %.c8e = impl_witness_access constants.%Iterate.impl_witness.d03, element2 [concrete = constants.%R.as_type.as.Iterate.impl.NewCursor.9f9] // CHECK:STDOUT: %bound_method.loc80_32.1: = bound_method %mc.ref, %impl.elem2 // CHECK:STDOUT: %facet_value.loc80_32.1: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.a40, constants.%custom_witness.04a, constants.%custom_witness.cfc, constants.%custom_witness.dd5, constants.%custom_witness.c66, constants.%custom_witness.01a) [concrete = constants.%facet_value.88d] // CHECK:STDOUT: %.loc80_32.1: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_32.1 [concrete = constants.%facet_value.88d] @@ -4067,7 +4067,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %addr.loc80: %ptr.484 = addr_of %var -// CHECK:STDOUT: %impl.elem3: %.641 = impl_witness_access constants.%Iterate.impl_witness.b32, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.b70] +// CHECK:STDOUT: %impl.elem3: %.06b = impl_witness_access constants.%Iterate.impl_witness.d03, element3 [concrete = constants.%R.as_type.as.Iterate.impl.Next.622] // CHECK:STDOUT: %bound_method.loc80_32.3: = bound_method %mc.ref, %impl.elem3 // CHECK:STDOUT: %facet_value.loc80_32.3: %CppRangeForIterate_where.type.1c721f.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.a40, constants.%custom_witness.04a, constants.%custom_witness.cfc, constants.%custom_witness.dd5, constants.%custom_witness.c66, constants.%custom_witness.01a) [concrete = constants.%facet_value.88d] // CHECK:STDOUT: %.loc80_32.3: %CppRangeForIterate_where.type.1c721f.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_32.3 [concrete = constants.%facet_value.88d] @@ -4139,9 +4139,9 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %r.patt.loc34_72.2 => constants.%r.patt.d6c // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.139) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.fb9) { // CHECK:STDOUT: %R.patt.loc34_17.2 => constants.%R.patt.81e -// CHECK:STDOUT: %R.loc34_17.1 => constants.%facet_value.139 +// CHECK:STDOUT: %R.loc34_17.1 => constants.%facet_value.fb9 // CHECK:STDOUT: %R.as_type.loc34_74.1 => constants.%MutableAndConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.394 // CHECK:STDOUT: %r.param_patt.loc34_72.2 => constants.%r.param_patt.8bb @@ -4149,19 +4149,19 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc34 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.b32 -// CHECK:STDOUT: %Iterate.facet.loc38_31.5 => constants.%Iterate.facet.2df -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.7c9 -// CHECK:STDOUT: %.loc38_31.20 => constants.%.59c -// CHECK:STDOUT: %impl.elem2.loc38_31.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.b31 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.d03 +// CHECK:STDOUT: %Iterate.facet.loc38_31.5 => constants.%Iterate.facet.8e6 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.726 +// CHECK:STDOUT: %.loc38_31.20 => constants.%.c8e +// CHECK:STDOUT: %impl.elem2.loc38_31.2 => constants.%R.as_type.as.Iterate.impl.NewCursor.9f9 // CHECK:STDOUT: %specific_impl_fn.loc38_31.4 => constants.%R.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.7aa // CHECK:STDOUT: %as_type => constants.%tuple.type.56e // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.1b5 // CHECK:STDOUT: %ptr => constants.%ptr.484 -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.248 -// CHECK:STDOUT: %.loc38_31.21 => constants.%.641 -// CHECK:STDOUT: %impl.elem3.loc38_31.2 => constants.%R.as_type.as.Iterate.impl.Next.b70 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.604 +// CHECK:STDOUT: %.loc38_31.21 => constants.%.06b +// CHECK:STDOUT: %impl.elem3.loc38_31.2 => constants.%R.as_type.as.Iterate.impl.Next.622 // CHECK:STDOUT: %specific_impl_fn.loc38_31.5 => constants.%R.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b7b // CHECK:STDOUT: %.loc38_31.22 => constants.%.1ad diff --git a/toolchain/lower/testdata/for/bindings.carbon b/toolchain/lower/testdata/for/bindings.carbon index d5041a54f762..79a66f253dd4 100644 --- a/toolchain/lower/testdata/for/bindings.carbon +++ b/toolchain/lower/testdata/for/bindings.carbon @@ -37,6 +37,8 @@ fn For() { // CHECK:STDOUT: // CHECK:STDOUT: @EmptyRange.val.loc27_3 = internal constant {} zeroinitializer // CHECK:STDOUT: +// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: // CHECK:STDOUT: declare void @_CF.Main(i32, ptr) // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind @@ -91,8 +93,6 @@ fn For() { // CHECK:STDOUT: ret void, !dbg !26 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) -// CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_COp.5172fb5622df6926:core.Destroy.Core"(ptr %self) #0 !dbg !27 { // CHECK:STDOUT: entry: diff --git a/toolchain/lower/testdata/for/break_continue.carbon b/toolchain/lower/testdata/for/break_continue.carbon index fdd486b828af..a99d1011d8ca 100644 --- a/toolchain/lower/testdata/for/break_continue.carbon +++ b/toolchain/lower/testdata/for/break_continue.carbon @@ -81,7 +81,7 @@ fn For() { // CHECK:STDOUT: // CHECK:STDOUT: declare void @_CRange.Core(ptr sret({ i32, i32 }), i32) // CHECK:STDOUT: -// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: declare void @"_COp.5168ce3c64c7e43f:core.Destroy.Core"(ptr) // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %self) #0 !dbg !18 { @@ -178,6 +178,8 @@ fn For() { // CHECK:STDOUT: ret i32 %1, !dbg !93 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: // CHECK:STDOUT: declare void @_CInclusiveRange.Core(ptr sret({ i32, i32 }), i32, i32) // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind diff --git a/toolchain/lower/testdata/for/for.carbon b/toolchain/lower/testdata/for/for.carbon index 35f7af59e2d5..98de4f352774 100644 --- a/toolchain/lower/testdata/for/for.carbon +++ b/toolchain/lower/testdata/for/for.carbon @@ -69,7 +69,7 @@ fn For() { // CHECK:STDOUT: // CHECK:STDOUT: declare void @_CRange.Core(ptr sret({ i32, i32 }), i32) // CHECK:STDOUT: -// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: declare void @"_COp.5168ce3c64c7e43f:core.Destroy.Core"(ptr) // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define weak_odr void @"_COp.5e27612b9dd31a14:core.Destroy.Core"(ptr %self) #0 !dbg !14 { @@ -166,6 +166,8 @@ fn For() { // CHECK:STDOUT: ret i32 %1, !dbg !89 // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: declare void @"_COp.1155b488c23b5086:core.Destroy.Core"(ptr) +// CHECK:STDOUT: // CHECK:STDOUT: declare void @_CInclusiveRange.Core(ptr sret({ i32, i32 }), i32, i32) // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind