// Part of the Carbon Language project, under the Apache License v2.0 with LLVM // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon // // EXTRA-ARGS: --clang-arg=-std=c++20 // // AUTOUPDATE // TIP: To test this file alone, run: // TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/interop/cpp/range_for.carbon // TIP: To dump output, run: // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/interop/cpp/range_for.carbon // --- methods_return_same_type.carbon library "[[@TEST_NAME]]"; import Cpp inline '''c++ class MutableRange { struct Iterator { auto operator*() const -> int&; auto operator++() -> Iterator&; friend auto operator==(Iterator, Iterator) -> bool; friend auto operator!=(Iterator, Iterator) -> bool; }; public: auto begin() -> Iterator; auto end() -> Iterator; }; class ConstRange { struct Iterator { auto operator*() const -> const int&; auto operator++() -> Iterator&; friend auto operator==(Iterator, Iterator) -> bool; friend auto operator!=(Iterator, Iterator) -> bool; }; public: auto begin() const -> Iterator; auto end() const -> Iterator; }; '''; fn TestIterate[R: Core.Iterate where .ElementType = i32](r: R) { var sum: i32 = 0; //@dump-sem-ir-begin for (i: i32 in r) { sum += i; } //@dump-sem-ir-end } fn TestIterateDriver(var m: Cpp.MutableRange, c: Cpp.ConstRange) { TestIterate(m); TestIterate(c); } fn TestRangeFor(var m: Cpp.MutableRange, c: Cpp.ConstRange) { var sum: i32 = 0; //@dump-sem-ir-begin for (i: i32 in m) { sum += i; } //@dump-sem-ir-end //@dump-sem-ir-begin for (i: i32 in c) { sum += i; } //@dump-sem-ir-end } // --- methods_return_different_types.carbon library "[[@TEST_NAME]]"; import Cpp inline '''c++ struct DiffValueType { auto operator+=(const DiffValueType&) -> DiffValueType&; }; class DiffMutableRange { struct Iterator { auto operator*() const -> DiffValueType&; auto operator++() -> Iterator&; }; struct Sentinel { friend auto operator==(Iterator, Sentinel) -> bool; friend auto operator!=(Iterator, Sentinel) -> bool; }; public: auto begin() -> Iterator; auto end() -> Sentinel; }; class DiffConstRange { struct Iterator { auto operator*() const -> DiffValueType; auto operator++() -> Iterator&; }; struct Sentinel { friend auto operator==(Iterator, Sentinel) -> bool; friend auto operator!=(Iterator, Sentinel) -> bool; }; public: auto begin() const -> Iterator; auto end() -> Sentinel; }; '''; fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffValueType](var r: R) { var sum: Cpp.DiffValueType = Cpp.DiffValueType.DiffValueType(); //@dump-sem-ir-begin for (i: Cpp.DiffValueType in r) { sum += i; } //@dump-sem-ir-end } fn TestIterateDriver(var m: Cpp.DiffMutableRange, c: Cpp.DiffConstRange) { TestIterate(m); TestIterate(c); } fn TestRangeFor(var m: Cpp.DiffMutableRange, c: Cpp.DiffConstRange) { var sum: Cpp.DiffValueType = Cpp.DiffValueType.DiffValueType(); //@dump-sem-ir-begin for (i: Cpp.DiffValueType in m) { sum += i; } for (i: Cpp.DiffValueType in c) { sum += i; } //@dump-sem-ir-end } // --- method_overloads.carbon library "[[@TEST_NAME]]"; import Cpp inline '''c++ struct OverloadValueType {}; class Range { template struct Iterator { auto operator*() const -> T&; auto operator++() -> Iterator&; friend auto operator==(Iterator, Iterator) -> bool; friend auto operator!=(Iterator, Iterator) -> bool; }; public: auto begin() const -> Iterator; auto end() const -> Iterator; auto begin() -> Iterator; auto end() -> Iterator; }; '''; fn TestIterate[R: Core.Iterate where .ElementType = Cpp.OverloadValueType](var r: R) { //@dump-sem-ir-begin for (_: Cpp.OverloadValueType in r) {} //@dump-sem-ir-end } fn TestIterateDriver(r: Cpp.Range) { TestIterate(r); } fn TestRangeFor(var r: Cpp.Range) { //@dump-sem-ir-begin for (_: Cpp.OverloadValueType in r) {} //@dump-sem-ir-end } // --- adl_return_same_types.carbon library "[[@TEST_NAME]]"; import Cpp inline '''c++ namespace N { class ConstRange { struct Iterator { auto operator*() const -> const double&; auto operator++() -> Iterator&; friend auto operator==(Iterator, Iterator) -> bool; friend auto operator!=(Iterator, Iterator) -> bool; }; public: friend auto begin(const ConstRange&) -> Iterator; friend auto end(const ConstRange&) -> Iterator; }; } // namespace N '''; fn TestIterate[R: Core.Iterate where .ElementType = f64](r: R) { var sum: f64 = 0.0; //@dump-sem-ir-begin for (i: f64 in r) { sum += i; } //@dump-sem-ir-end } fn TestIterateDriver(c: Cpp.N.ConstRange) { TestIterate(c); } fn TestRangeFor(c: Cpp.N.ConstRange) { var sum: f64 = 0; //@dump-sem-ir-begin for (i: f64 in c) { sum += i; } //@dump-sem-ir-end } // --- fail_todo_adl_returns_same_types_mutable.carbon // TODO: merge with adl_returns_same_types.carbon when passing. library "[[@TEST_NAME]]"; import Cpp inline '''c++ namespace N { class MutableRange { struct Iterator { auto operator*() const -> double&; auto operator++() -> Iterator&; friend auto operator==(Iterator, Iterator) -> bool; friend auto operator!=(Iterator, Iterator) -> bool; }; public: // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE+3]]:15: error: value expression passed to reference parameter [ValueForRefParam] // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE+2]]:34: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:41:3-29: note: while building thunk to match the signature of this function [ThunkSignature] friend auto begin(MutableRange&) -> Iterator; friend auto end(MutableRange&) -> Iterator; }; } // namespace N '''; // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE+7]]:1-64: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-7]]:15: error: value expression passed to reference parameter [ValueForRefParam] // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE-8]]:32: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:42:3-27: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fail_todo_adl_returns_same_types_mutable.carbon:[[@LINE+2]]:1-64: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = f64](r: R) { var sum: f64 = 0.0; //@dump-sem-ir-begin for (i: f64 in r) { sum += i; } //@dump-sem-ir-end } fn TestIterateDriver(var m: Cpp.N.MutableRange) { TestIterate(m); } fn TestRangeFor(var m: Cpp.N.MutableRange) { var sum: f64 = 0; //@dump-sem-ir-begin for (i: f64 in m) { sum += i; } //@dump-sem-ir-end } // --- adl_returns_different_types.carbon library "[[@TEST_NAME]]"; import Cpp inline '''c++ namespace DiffADL { struct ValueType { auto operator+=(const ValueType& other) -> ValueType&; }; class ConstRange { struct Iterator { auto operator*() const -> ValueType; auto operator++() -> Iterator&; }; struct Sentinel { friend auto operator==(Iterator, Sentinel) -> bool; friend auto operator!=(Iterator, Sentinel) -> bool; }; public: friend auto begin(const ConstRange&) -> Iterator; friend auto end(const ConstRange&) -> Sentinel; }; } // namespace DiffADL '''; fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffADL.ValueType](r: R) { var sum: Cpp.DiffADL.ValueType = Cpp.DiffADL.ValueType.ValueType(); //@dump-sem-ir-begin for (i: Cpp.DiffADL.ValueType in r) { sum += i; } //@dump-sem-ir-end } fn TestIterateDriver(c: Cpp.DiffADL.ConstRange) { TestIterate(c); } fn TestRangeFor(c: Cpp.DiffADL.ConstRange) { var sum: Cpp.DiffADL.ValueType = Cpp.DiffADL.ValueType.ValueType(); //@dump-sem-ir-begin for (i: Cpp.DiffADL.ValueType in c) { sum += i; } //@dump-sem-ir-end } // --- fail_todo_adl_returns_different_types_mutable.carbon library "[[@TEST_NAME]]"; import Cpp inline '''c++ namespace DiffMutableADL { struct ValueType { auto operator+=(const ValueType& other) -> ValueType&; }; class MutableRange { struct Iterator { auto operator*() const -> ValueType&; auto operator++() -> Iterator&; }; struct Sentinel { friend auto operator==(Sentinel, Iterator) -> bool; friend auto operator!=(Sentinel, Iterator) -> bool; }; public: // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+3]]:15: error: value expression passed to reference parameter [ValueForRefParam] // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+2]]:34: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:41:3-29: note: while building thunk to match the signature of this function [ThunkSignature] friend auto begin(MutableRange&) -> Iterator; friend auto end(MutableRange&) -> Sentinel; }; } '''; // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+7]]:1-89: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-7]]:15: error: value expression passed to reference parameter [ValueForRefParam] // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-8]]:32: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:42:3-27: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+2]]:1-89: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffMutableADL.ValueType](r: R) { var sum: Cpp.DiffMutableADL.ValueType = Cpp.DiffMutableADL.ValueType.ValueType(); //@dump-sem-ir-begin for (i: Cpp.DiffMutableADL.ValueType in r) { sum += i; } //@dump-sem-ir-end } fn TestIterateDriver(var m: Cpp.DiffMutableADL.MutableRange) { // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+6]]:3-16: error: semantics TODO: `Rewriting operator== using operator== is not supported` [SemanticsTodo] // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-12]]:1-89: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+3]]:3-16: error: cannot convert type `Cpp.DiffMutableADL.MutableRange` into type implementing `Core.Iterate where .(Core.Iterate.ElementType) = Cpp.DiffMutableADL.ValueType as Core.Destroy & Core.Copy` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-15]]:1-89: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: TestIterate(m); } fn TestRangeFor(var m: Cpp.DiffMutableADL.MutableRange) { var sum: Cpp.DiffMutableADL.ValueType = Cpp.DiffMutableADL.ValueType.ValueType(); //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+2]]:7-44: error: cannot access member of interface `Core.Iterate` in type `Cpp.DiffMutableADL.MutableRange` that does not implement that interface [MissingImplInMemberAccess] // CHECK:STDERR: for (i: Cpp.DiffMutableADL.ValueType in m) { sum += i; } //@dump-sem-ir-end } // --- fail_todo_adl_overloads.carbon import Cpp inline '''c++ namespace OverloadADL { struct ValueType { auto operator+=(const ValueType&) -> ValueType&; }; class MutableAndConstRange { struct Iterator { auto operator*() const -> ValueType&; auto operator++() -> Iterator&; friend auto operator==(Iterator, Iterator) -> bool; friend auto operator!=(Iterator, Iterator) -> bool; }; struct ConstIterator { auto operator*() const -> ValueType&; auto operator++() -> Iterator&; friend auto operator==(ConstIterator, ConstIterator) -> bool; friend auto operator!=(ConstIterator, ConstIterator) -> bool; }; public: // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+3]]:17: error: value expression passed to reference parameter [ValueForRefParam] // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+2]]:44: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:41:3-29: note: while building thunk to match the signature of this function [ThunkSignature] friend auto begin(MutableAndConstRange&) -> Iterator; friend auto end(MutableAndConstRange&) -> Iterator; friend auto begin(const MutableAndConstRange&) -> ConstIterator; friend auto end(const MutableAndConstRange&) -> ConstIterator; }; } '''; // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+7]]:1-86: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-10]]:17: error: value expression passed to reference parameter [ValueForRefParam] // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-11]]:42: note: initializing function parameter [InCallToFunctionParam] // CHECK:STDERR: {{.*}}/prelude/iterate.carbon:42:3-27: note: while building thunk to match the signature of this function [ThunkSignature] // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+2]]:1-86: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.OverloadADL.ValueType](r: R) { var sum: Cpp.OverloadADL.ValueType = Cpp.OverloadADL.ValueType.ValueType(); //@dump-sem-ir-begin for (i: Cpp.OverloadADL.ValueType in r) { sum += i; } //@dump-sem-ir-end } fn TestIterateDriver(var mc: Cpp.OverloadADL.MutableAndConstRange) { TestIterate(mc); } fn TestRangeFor(var mc: Cpp.OverloadADL.MutableAndConstRange) { var sum: Cpp.OverloadADL.ValueType = Cpp.OverloadADL.ValueType.ValueType(); //@dump-sem-ir-begin for (i: Cpp.OverloadADL.ValueType in mc) { sum += i; } //@dump-sem-ir-end } // --- fail_never_valid.carbon library "[[@TEST_NAME]]"; import Cpp inline '''c++ class NoBeginEnd {}; struct NoBeginMethod { auto end() -> int; }; struct NoEndMethod { auto begin() -> int; }; struct NoBeginADL { friend auto end(NoBeginADL) -> int; }; struct NoEndADL { friend auto begin(NoEndADL) -> int; }; struct BeginMethodEndADL { auto begin() -> int; friend auto end(BeginMethodEndADL) -> int; }; struct BeginADLEndMethod { friend auto begin(BeginADLEndMethod) -> int; auto end() -> int; }; struct BeginFieldEndMethod { int begin; auto end() -> int; }; struct BeginMethodEndField { auto begin() -> int; int end; }; struct BeginMethodDeleted { auto begin() = delete; auto end() -> int; }; struct EndMethodDeleted { auto begin() -> int; auto end() = delete; }; struct BeginFunctionDeleted { friend auto begin(const BeginFunctionDeleted&) = delete; friend auto end(const BeginFunctionDeleted&) -> int; }; struct EndFunctionDeleted { friend auto begin(const EndFunctionDeleted&) -> int; friend auto end(const EndFunctionDeleted&) = delete; }; '''; fn Test[R: Core.Iterate](unused r: R) {} fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, var no_begin_method: Cpp.NoBeginMethod, var no_end_method: Cpp.NoEndMethod, var no_begin_adl: Cpp.NoBeginADL, var no_end_adl: Cpp.NoEndADL, var begin_method_end_adl: Cpp.BeginMethodEndADL, var begin_adl_end_method: Cpp.BeginADLEndMethod, var begin_field_end_method: Cpp.BeginFieldEndMethod, var begin_method_end_field: Cpp.BeginMethodEndField, var begin_method_deleted: Cpp.BeginMethodDeleted, var end_method_deleted: Cpp.EndMethodDeleted, var begin_function_deleted: Cpp.BeginFunctionDeleted, var end_function_deleted: Cpp.EndFunctionDeleted) { // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-20: error: cannot convert type `Cpp.NoBeginEnd` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-17]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(no_begin_end); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-23: error: cannot convert type `Cpp.NoBeginMethod` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-22]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(no_begin_method); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-21: error: cannot convert type `Cpp.NoEndMethod` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-27]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(no_end_method); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-20: error: cannot convert type `Cpp.NoBeginADL` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-32]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(no_begin_adl); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-18: error: cannot convert type `Cpp.NoEndADL` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-37]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(no_end_adl); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-28: error: cannot convert type `Cpp.BeginMethodEndADL` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-42]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(begin_method_end_adl); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-28: error: cannot convert type `Cpp.BeginADLEndMethod` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-47]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(begin_adl_end_method); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-30: error: cannot convert type `Cpp.BeginFieldEndMethod` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-52]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(begin_field_end_method); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-30: error: cannot convert type `Cpp.BeginMethodEndField` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-57]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(begin_method_end_field); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+7]]:28: error: attempt to use a deleted function [CppInteropParseError] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-82]]:8: note: 'begin' has been explicitly marked deleted here [CppInteropParseNote] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-63]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-28: error: cannot convert type `Cpp.BeginMethodDeleted` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-66]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(begin_method_deleted); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+7]]:26: error: attempt to use a deleted function [CppInteropParseError] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-85]]:8: note: 'end' has been explicitly marked deleted here [CppInteropParseNote] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-72]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-26: error: cannot convert type `Cpp.EndMethodDeleted` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-75]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(end_method_deleted); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+7]]:30: error: call to deleted function 'begin' [CppInteropParseError] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-90]]:15: note: candidate function has been explicitly deleted [CppInteropParseNote] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-81]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-30: error: cannot convert type `Cpp.BeginFunctionDeleted` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-84]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(begin_function_deleted); // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+7]]:28: error: call to deleted function 'end' [CppInteropParseError] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-93]]:15: note: candidate function has been explicitly deleted [CppInteropParseNote] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-90]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: // CHECK:STDERR: fail_never_valid.carbon:[[@LINE+3]]:3-28: error: cannot convert type `Cpp.EndFunctionDeleted` into type implementing `Core.Iterate` [ConversionFailureTypeToFacet] // CHECK:STDERR: fail_never_valid.carbon:[[@LINE-93]]:1-39: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: Test(end_function_deleted); } // CHECK:STDOUT: --- methods_return_same_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: type: type = facet_type [concrete] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %facet_type.f48: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Get.type.786: type = fn_type @Optional.Get, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Get.2d0: %Optional.Get.type.786 = struct_value () [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.3ea: type = fn_type @Optional.HasValue, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.HasValue.f2f: %Optional.HasValue.type.3ea = struct_value () [symbolic] // CHECK:STDOUT: %T.283: %facet_type.f48 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.28a: = lookup_impl_witness %T.283, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.16e: %Destroy.type = facet_value %T.as_type.74b, (%Destroy.lookup_impl_witness.28a) [symbolic] // CHECK:STDOUT: %MaybeUnformed.91c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.16e) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.ade: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%T.283) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b49: type = unbound_element_type %DefaultOptionalStorage.ade, bool [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.229: type = unbound_element_type %DefaultOptionalStorage.ade, %MaybeUnformed.91c [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.type.2f2: type = fn_type @T.as_type.as.OptionalStorage.impl.Get, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.884: %T.as_type.as.OptionalStorage.impl.Get.type.2f2 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d28: 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.f29: %T.as_type.as.OptionalStorage.impl.Has.type.d28 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.type.760: type = fn_type @T.as_type.as.OptionalStorage.impl.Some, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.268: %T.as_type.as.OptionalStorage.impl.Some.type.760 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.925: 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.f42: %T.as_type.as.OptionalStorage.impl.None.type.925 = struct_value () [symbolic] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %N.fe9: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %Int.d4bbe0.1: type = class_type @Int, @Int(%N.fe9) [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.d94: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1: type = fn_type @Destroy.WithSelf.SelfDestruct.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.1: %Destroy.WithSelf.SelfDestruct.type.fbceb5.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1: type = fn_type @Destroy.WithSelf.SubobjectDestroy.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.1 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.1: type = fn_type @Destroy.WithSelf.Op.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.1: %Destroy.WithSelf.Op.type.ef016f.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.1: = custom_witness (%Destroy.WithSelf.Op.403171.1, %Destroy.WithSelf.SubobjectDestroy.d01daf.1, %Destroy.WithSelf.SelfDestruct.db3fdb.1), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.ed0: %Destroy.type = facet_value %i32, (%custom_witness.f8f19d.1) [concrete] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Int.d4bbe0.2: type = class_type @Int, @Int(%To) [symbolic] // CHECK:STDOUT: %ImplicitAs.type.6b0: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %CppRange.type: type = facet_type <@CppRange> [concrete] // CHECK:STDOUT: %.Self.e0b: %CppRange.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.50b: = lookup_impl_witness %.Self.e0b, @CppRangeForIterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.32d: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.50b, element0 [symbolic_self] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.851: = lookup_impl_witness %impl.elem0.32d, @CppUnsafeDeref [symbolic_self] // CHECK:STDOUT: %impl.elem0.10d: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.851, element0 [symbolic_self] // CHECK:STDOUT: %CppRange_where.type.d682d6.1: type = facet_type <@CppRange where %impl.elem0.10d impls @Copy> [concrete] // CHECK:STDOUT: %T.f45530.2: %CppRange_where.type.d682d6.1 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.d4a: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.5a8: %T.as_type.as.Iterate.impl.Next.type.d4a = struct_value () [symbolic] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.b581a8.2: = lookup_impl_witness %T.f45530.2, @CppRangeForIterate [symbolic] // CHECK:STDOUT: %impl.elem0.5f971c.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element0 [symbolic] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.87e543.2: = lookup_impl_witness %impl.elem0.5f971c.2, @CppUnsafeDeref [symbolic] // CHECK:STDOUT: %impl.elem0.493765.2: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.87e543.2, element0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.8fb: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.8a1: %T.as_type.as.Iterate.impl.NewCursor.type.8fb = struct_value () [symbolic] // CHECK:STDOUT: %impl.elem1.c2dc15.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element1 [symbolic] // CHECK:STDOUT: %tuple.type.1ba: type = tuple_type (%impl.elem0.5f971c.2, %impl.elem1.c2dc15.2) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.812: = lookup_impl_witness %tuple.type.1ba, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.9cd: %Destroy.type = facet_value %tuple.type.1ba, (%Destroy.lookup_impl_witness.812) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.a1d: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.3c1: %Int.as.Copy.impl.Op.type.a1d = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.8af: = impl_witness imports.%Copy.impl_witness_table.f44, @Int.as.Copy.impl(%int_32) [concrete] // CHECK:STDOUT: %facet_value.343: %facet_type.f48 = facet_value %i32, (%custom_witness.f8f19d.1, %Copy.impl_witness.8af) [concrete] // 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.8d9: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.343> [concrete] // CHECK:STDOUT: %pattern_type.d44: type = pattern_type %Iterate_where.type.8d9 [concrete] // CHECK:STDOUT: %R.patt: %pattern_type.d44 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R: %Iterate_where.type.8d9 = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] // CHECK:STDOUT: %pattern_type.3b2: type = pattern_type %R.as_type [symbolic] // CHECK:STDOUT: %r.param_patt.a49: %pattern_type.3b2 = value_param_pattern [symbolic] // CHECK:STDOUT: %r.patt.dd9: %pattern_type.3b2 = wrapper_binding_pattern r, %r.param_patt.a49 [symbolic] // CHECK:STDOUT: %facet_type.08a: type = facet_type <@IntFitsIn, @IntFitsIn(%Int.d4bbe0.2) & @AnyInt> [symbolic] // CHECK:STDOUT: %From.170: %facet_type.08a = symbolic_binding From, 1 [symbolic] // CHECK:STDOUT: %From.as_type.as.ImplicitAs.impl.Convert.type.386: type = fn_type @From.as_type.as.ImplicitAs.impl.Convert, @From.as_type.as.ImplicitAs.impl(%To, %From.170) [symbolic] // CHECK:STDOUT: %From.as_type.as.ImplicitAs.impl.Convert.85a: %From.as_type.as.ImplicitAs.impl.Convert.type.386 = struct_value () [symbolic] // CHECK:STDOUT: %i.patt: %pattern_type.d94 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.550: = lookup_impl_witness %R, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.e23: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.550) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.85c: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.e23) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.b01: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.e23) [symbolic] // CHECK:STDOUT: %.85a: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.85c, %Iterate.facet.e23 [symbolic] // CHECK:STDOUT: %impl.elem2.dbc: %.85a = impl_witness_access %Iterate.lookup_impl_witness.550, element2 [symbolic] // CHECK:STDOUT: %impl.elem1.e3b: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.550, element1 [symbolic] // CHECK:STDOUT: %as_type.147: type = facet_access_type %impl.elem1.e3b [symbolic] // CHECK:STDOUT: %specific_impl_fn.d7d2: = specific_impl_function %impl.elem2.dbc, @Iterate.WithSelf.NewCursor(%Iterate.facet.e23) [symbolic] // CHECK:STDOUT: %.9f8: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.b01, %Iterate.facet.e23 [symbolic] // CHECK:STDOUT: %impl.elem3.84f: %.9f8 = impl_witness_access %Iterate.lookup_impl_witness.550, element3 [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.091: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.343) [concrete] // CHECK:STDOUT: %OptionalStorage.impl_witness.bab: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.343) [concrete] // CHECK:STDOUT: %OptionalStorage.facet.1f7: %OptionalStorage.type = facet_value %i32, (%OptionalStorage.impl_witness.bab) [concrete] // CHECK:STDOUT: %Optional.aff: type = class_type @Optional, @Optional(%OptionalStorage.facet.1f7) [concrete] // CHECK:STDOUT: %pattern_type.de2: type = pattern_type %Optional.aff [concrete] // CHECK:STDOUT: %specific_impl_fn.d92: = specific_impl_function %impl.elem3.84f, @Iterate.WithSelf.Next(%Iterate.facet.e23) [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.182: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.1f7) [concrete] // CHECK:STDOUT: %Optional.HasValue.e75: %Optional.HasValue.type.182 = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.788: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.1f7) [concrete] // CHECK:STDOUT: %Optional.Get.186: %Optional.Get.type.788 = struct_value () [concrete] // CHECK:STDOUT: %MaybeUnformed.993: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.ed0) [concrete] // CHECK:STDOUT: %.b31: type = maybe_unformed_type %i32 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.32e: type = unbound_element_type %DefaultOptionalStorage.091, %MaybeUnformed.993 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.335: type = unbound_element_type %DefaultOptionalStorage.091, bool [concrete] // CHECK:STDOUT: %struct_type.value.has_value.2e0: type = struct_type {.value: %MaybeUnformed.993, .has_value: bool} [concrete] // CHECK:STDOUT: %Optional.HasValue.specific_fn.8c2: = specific_function %Optional.HasValue.e75, @Optional.HasValue(%OptionalStorage.facet.1f7) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn.8fe: = specific_function %Optional.Get.186, @Optional.Get(%OptionalStorage.facet.1f7) [concrete] // CHECK:STDOUT: %AddAssignWith.type.1ad: type = facet_type <@AddAssignWith, @AddAssignWith(%i32)> [concrete] // CHECK:STDOUT: %ImplicitAs.type.81c7d0.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Int.d4bbe0.1)> [symbolic] // CHECK:STDOUT: %U.f16: %ImplicitAs.type.81c7d0.2 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.type.93140c.1: type = fn_type @Int.as.AddAssignWith.impl.Op.1, @Int.as.AddAssignWith.impl(%N.fe9, %U.f16) [symbolic] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.75e08e.1: %Int.as.AddAssignWith.impl.Op.type.93140c.1 = struct_value () [symbolic] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.type.93140c.2: type = fn_type @Int.as.AddAssignWith.impl.Op.2, @Int.as.AddAssignWith.impl(%N.fe9, %U.f16) [symbolic] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.75e08e.2: %Int.as.AddAssignWith.impl.Op.type.93140c.2 = struct_value () [symbolic] // CHECK:STDOUT: %facet_type.0f0: type = facet_type <@IntFitsIn, @IntFitsIn(%i32) & @AnyInt> [concrete] // CHECK:STDOUT: %custom_witness.633: = custom_witness (), @IntFitsIn, @IntFitsIn(%i32) [concrete] // CHECK:STDOUT: %Int.as.AnyInt.impl.AsInt.type.0ee: type = fn_type @Int.as.AnyInt.impl.AsInt, @Int.as.AnyInt.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %Int.as.AnyInt.impl.AsInt.497: %Int.as.AnyInt.impl.AsInt.type.0ee = struct_value () [symbolic] // CHECK:STDOUT: %AnyInt.impl_witness.83b: = impl_witness imports.%AnyInt.impl_witness_table, @Int.as.AnyInt.impl(%int_32) [concrete] // CHECK:STDOUT: %facet_value.709: %facet_type.0f0 = facet_value %i32, (%custom_witness.633, %AnyInt.impl_witness.83b) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness.943: = impl_witness imports.%ImplicitAs.impl_witness_table.8f1, @From.as_type.as.ImplicitAs.impl(%int_32, %facet_value.709) [concrete] // CHECK:STDOUT: %ImplicitAs.facet.c18: %ImplicitAs.type.6b0 = facet_value %i32, (%ImplicitAs.impl_witness.943) [concrete] // CHECK:STDOUT: %AddAssignWith.impl_witness.95a: = impl_witness imports.%AddAssignWith.impl_witness_table, @Int.as.AddAssignWith.impl(%int_32, %ImplicitAs.facet.c18) [concrete] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.type.47f4e6.1: type = fn_type @Int.as.AddAssignWith.impl.Op.2, @Int.as.AddAssignWith.impl(%int_32, %ImplicitAs.facet.c18) [concrete] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.bff4f9.1: %Int.as.AddAssignWith.impl.Op.type.47f4e6.1 = struct_value () [concrete] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.type.47f4e6.2: type = fn_type @Int.as.AddAssignWith.impl.Op.1, @Int.as.AddAssignWith.impl(%int_32, %ImplicitAs.facet.c18) [concrete] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.bff4f9.2: %Int.as.AddAssignWith.impl.Op.type.47f4e6.2 = struct_value () [concrete] // CHECK:STDOUT: %AddAssignWith.facet.d53: %AddAssignWith.type.1ad = facet_value %i32, (%AddAssignWith.impl_witness.95a) [concrete] // CHECK:STDOUT: %AddAssignWith.WithSelf.Op.type.313: type = fn_type @AddAssignWith.WithSelf.Op, @AddAssignWith.WithSelf(%i32, %AddAssignWith.facet.d53) [concrete] // CHECK:STDOUT: %.316: type = fn_type_with_self_type %AddAssignWith.WithSelf.Op.type.313, %AddAssignWith.facet.d53 [concrete] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.specific_fn.ec28e6.1: = specific_function %Int.as.AddAssignWith.impl.Op.bff4f9.2, @Int.as.AddAssignWith.impl.Op.1(%int_32, %ImplicitAs.facet.c18) [concrete] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.specific_fn.ec28e6.2: = specific_function %Int.as.AddAssignWith.impl.Op.bff4f9.1, @Int.as.AddAssignWith.impl.Op.2(%int_32, %ImplicitAs.facet.c18) [concrete] // CHECK:STDOUT: %pattern_type.16e: type = pattern_type %.b31 [concrete] // CHECK:STDOUT: %self.param_patt.214: %pattern_type.16e = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.a42: %pattern_type.16e = wrapper_binding_pattern self, %self.param_patt.214 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc34_19.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc34_19.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.59f: type = pattern_type %MaybeUnformed.993 [concrete] // CHECK:STDOUT: %self.param_patt.f37: %pattern_type.59f = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.c6e: %pattern_type.59f = wrapper_binding_pattern self, %self.param_patt.f37 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc34_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc34_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.3: type = fn_type @Destroy.WithSelf.SelfDestruct.loc34_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.3: %Destroy.WithSelf.SelfDestruct.type.fbceb5.3 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.40d: %pattern_type.831 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.560: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt.40d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc34_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.4: type = fn_type @Destroy.WithSelf.Op.loc34_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.4: %Destroy.WithSelf.Op.type.ef016f.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4: type = fn_type @Destroy.WithSelf.SelfDestruct.loc34_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.4: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.0fa: type = pattern_type %struct_type.value.has_value.2e0 [concrete] // CHECK:STDOUT: %self.param_patt.4dc: %pattern_type.0fa = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.0fc: %pattern_type.0fa = wrapper_binding_pattern self, %self.param_patt.4dc [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc34_19.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.5: type = fn_type @Destroy.WithSelf.Op.loc34_19.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.5: %Destroy.WithSelf.Op.type.ef016f.5 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.289: type = pattern_type %DefaultOptionalStorage.091 [concrete] // CHECK:STDOUT: %self.param_patt.ac0: %pattern_type.289 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.17f: %pattern_type.289 = wrapper_binding_pattern self, %self.param_patt.ac0 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc34_19.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc34_19.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.602: %pattern_type.de2 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.398: %pattern_type.de2 = wrapper_binding_pattern self, %self.param_patt.602 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc34_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc34_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.7: type = fn_type @Destroy.WithSelf.SelfDestruct.loc34_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.7: %Destroy.WithSelf.SelfDestruct.type.fbceb5.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.0f4: = lookup_impl_witness %impl.elem1.e3b, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.656: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1.e3b) [symbolic] // CHECK:STDOUT: %.9eb: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.656, %impl.elem1.e3b [symbolic] // CHECK:STDOUT: %impl.elem2.fb6: %.9eb = impl_witness_access %Destroy.lookup_impl_witness.0f4, element2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.63d: = specific_impl_function %impl.elem2.fb6, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1.e3b) [symbolic] // CHECK:STDOUT: %MutableRange: type = class_type @MutableRange [concrete] // CHECK:STDOUT: %pattern_type.e63: type = pattern_type %MutableRange [concrete] // CHECK:STDOUT: %ConstRange: type = class_type @ConstRange [concrete] // CHECK:STDOUT: %pattern_type.0ba: type = pattern_type %ConstRange [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Iterator.3ee: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %MutableRange.Begin.type: type = fn_type @MutableRange.Begin [concrete] // CHECK:STDOUT: %MutableRange.Begin: %MutableRange.Begin.type = struct_value () [concrete] // CHECK:STDOUT: %MutableRange.End.type: type = fn_type @MutableRange.End [concrete] // CHECK:STDOUT: %MutableRange.End: %MutableRange.End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.ed3: = custom_witness (%Iterator.3ee, %Iterator.3ee, %MutableRange.Begin, %MutableRange.End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.8: type = fn_type @Destroy.WithSelf.Op.loc41 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.8: %Destroy.WithSelf.Op.type.ef016f.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8: type = fn_type @Destroy.WithSelf.SelfDestruct.loc41 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.8: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type.9ec: type = fn_type @Iterator.SubobjectDestroy.1 [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.e52: %Iterator.SubobjectDestroy.type.9ec = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.8e1: = custom_witness (%Destroy.WithSelf.Op.403171.8, %Iterator.SubobjectDestroy.e52, %Destroy.WithSelf.SelfDestruct.db3fdb.8), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.0aed5d.1: type = fn_type @Iterator.Op.1 [concrete] // CHECK:STDOUT: %Iterator.Op.a2a866.1: %Iterator.Op.type.0aed5d.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.43f: = custom_witness (%i32, %Iterator.Op.a2a866.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.0aed5d.2: type = fn_type @Iterator.Op.2 [concrete] // CHECK:STDOUT: %Iterator.Op.a2a866.2: %Iterator.Op.type.0aed5d.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.444: = custom_witness (%Iterator.Op.a2a866.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type.ca8475.1: type = fn_type @Equal.1 [concrete] // CHECK:STDOUT: %Equal.285b15.1: %Equal.type.ca8475.1 = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type.53d9ee.1: type = fn_type @NotEqual.1 [concrete] // CHECK:STDOUT: %NotEqual.119263.1: %NotEqual.type.53d9ee.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.c91: = custom_witness (%Equal.285b15.1, %NotEqual.119263.1), @EqWith, @EqWith(%Iterator.3ee) [concrete] // CHECK:STDOUT: %facet_value.383: %CppRange_where.type.d682d6.1 = facet_value %MutableRange, (%custom_witness.ed3, %custom_witness.8e1, %custom_witness.43f, %custom_witness.444, %custom_witness.c91, %custom_witness.f8f19d.1, %Copy.impl_witness.8af, %custom_witness.8e1) [concrete] // CHECK:STDOUT: %tuple.type.508: type = tuple_type (%Iterator.3ee, %Iterator.3ee) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8: type = fn_type @Destroy.WithSelf.SubobjectDestroy.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.8: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.9: type = fn_type @Destroy.WithSelf.Op.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.9: %Destroy.WithSelf.Op.type.ef016f.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9: type = fn_type @Destroy.WithSelf.SelfDestruct.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.9: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.8: = custom_witness (%Destroy.WithSelf.Op.403171.9, %Destroy.WithSelf.SubobjectDestroy.d01daf.8, %Destroy.WithSelf.SelfDestruct.db3fdb.9), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.0fe: %Destroy.type = facet_value %tuple.type.508, (%custom_witness.f8f19d.8) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.a35: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.383) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.290: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.383) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.f70: %T.as_type.as.Iterate.impl.NewCursor.type.290 = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.79e: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.383) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.573: %T.as_type.as.Iterate.impl.Next.type.79e = struct_value () [concrete] // CHECK:STDOUT: %facet_value.b06: %Iterate_where.type.8d9 = facet_value %MutableRange, (%Iterate.impl_witness.a35) [concrete] // CHECK:STDOUT: %r.param_patt.c79: %pattern_type.e63 = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.94f: %pattern_type.e63 = wrapper_binding_pattern r, %r.param_patt.c79 [concrete] // CHECK:STDOUT: %Iterator.260: type = class_type @Iterator.2 [concrete] // CHECK:STDOUT: %ConstRange.Begin.type: type = fn_type @ConstRange.Begin [concrete] // CHECK:STDOUT: %ConstRange.Begin: %ConstRange.Begin.type = struct_value () [concrete] // CHECK:STDOUT: %ConstRange.End.type: type = fn_type @ConstRange.End [concrete] // CHECK:STDOUT: %ConstRange.End: %ConstRange.End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.23e: = custom_witness (%Iterator.260, %Iterator.260, %ConstRange.Begin, %ConstRange.End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.10: type = fn_type @Destroy.WithSelf.Op.loc42 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.10: %Destroy.WithSelf.Op.type.ef016f.10 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10: type = fn_type @Destroy.WithSelf.SelfDestruct.loc42 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.10: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type.128: type = fn_type @Iterator.SubobjectDestroy.2 [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.37b: %Iterator.SubobjectDestroy.type.128 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.0f3: = custom_witness (%Destroy.WithSelf.Op.403171.10, %Iterator.SubobjectDestroy.37b, %Destroy.WithSelf.SelfDestruct.db3fdb.10), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.0f34b8.1: type = fn_type @Iterator.Op.3 [concrete] // CHECK:STDOUT: %Iterator.Op.1c3e4a.1: %Iterator.Op.type.0f34b8.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f5c: = custom_witness (%i32, %Iterator.Op.1c3e4a.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.0f34b8.2: type = fn_type @Iterator.Op.4 [concrete] // CHECK:STDOUT: %Iterator.Op.1c3e4a.2: %Iterator.Op.type.0f34b8.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.746: = custom_witness (%Iterator.Op.1c3e4a.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type.ca8475.2: type = fn_type @Equal.2 [concrete] // CHECK:STDOUT: %Equal.285b15.2: %Equal.type.ca8475.2 = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type.53d9ee.2: type = fn_type @NotEqual.2 [concrete] // CHECK:STDOUT: %NotEqual.119263.2: %NotEqual.type.53d9ee.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.86f: = custom_witness (%Equal.285b15.2, %NotEqual.119263.2), @EqWith, @EqWith(%Iterator.260) [concrete] // CHECK:STDOUT: %facet_value.15e: %CppRange_where.type.d682d6.1 = facet_value %ConstRange, (%custom_witness.23e, %custom_witness.0f3, %custom_witness.f5c, %custom_witness.746, %custom_witness.86f, %custom_witness.f8f19d.1, %Copy.impl_witness.8af, %custom_witness.0f3) [concrete] // CHECK:STDOUT: %tuple.type.69f: type = tuple_type (%Iterator.260, %Iterator.260) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.9: type = fn_type @Destroy.WithSelf.SubobjectDestroy.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.9: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.11: type = fn_type @Destroy.WithSelf.Op.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.11: %Destroy.WithSelf.Op.type.ef016f.11 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.11: type = fn_type @Destroy.WithSelf.SelfDestruct.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.11: %Destroy.WithSelf.SelfDestruct.type.fbceb5.11 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.9: = custom_witness (%Destroy.WithSelf.Op.403171.11, %Destroy.WithSelf.SubobjectDestroy.d01daf.9, %Destroy.WithSelf.SelfDestruct.db3fdb.11), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.c6d: %Destroy.type = facet_value %tuple.type.69f, (%custom_witness.f8f19d.9) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.39d: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.15e) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.5c1: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.15e) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.356: %T.as_type.as.Iterate.impl.NewCursor.type.5c1 = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.f76: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.15e) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.259: %T.as_type.as.Iterate.impl.Next.type.f76 = struct_value () [concrete] // CHECK:STDOUT: %facet_value.3df: %Iterate_where.type.8d9 = facet_value %ConstRange, (%Iterate.impl_witness.39d) [concrete] // CHECK:STDOUT: %r.param_patt.83e: %pattern_type.0ba = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.c21: %pattern_type.0ba = wrapper_binding_pattern r, %r.param_patt.83e [concrete] // CHECK:STDOUT: %Iterate.facet.2b0: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.a35) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.ca0: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.2b0) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.8bc: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.2b0) [concrete] // CHECK:STDOUT: %.d4c: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.ca0, %Iterate.facet.2b0 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn.c26: = specific_function %T.as_type.as.Iterate.impl.NewCursor.f70, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.383) [concrete] // CHECK:STDOUT: %.9fe: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.8bc, %Iterate.facet.2b0 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn.7ef: = specific_function %T.as_type.as.Iterate.impl.Next.573, @T.as_type.as.Iterate.impl.Next(%facet_value.383) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.d1f: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.0fe) [concrete] // CHECK:STDOUT: %.0dc: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.d1f, %Destroy.facet.0fe [concrete] // CHECK:STDOUT: %Iterate.facet.1c8: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.39d) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.97c: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.1c8) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.1c9: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.1c8) [concrete] // CHECK:STDOUT: %.582: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.97c, %Iterate.facet.1c8 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn.49d: = specific_function %T.as_type.as.Iterate.impl.NewCursor.356, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.15e) [concrete] // CHECK:STDOUT: %.d56: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.1c9, %Iterate.facet.1c8 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn.2c1: = specific_function %T.as_type.as.Iterate.impl.Next.259, @T.as_type.as.Iterate.impl.Next(%facet_value.15e) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.b84: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.c6d) [concrete] // CHECK:STDOUT: %.40c: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.b84, %Destroy.facet.c6d [concrete] // CHECK:STDOUT: %complete_type.c28: = complete_type_witness %tuple.type.508 [concrete] // CHECK:STDOUT: %complete_type.8d5: = complete_type_witness %tuple.type.69f [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core.import_ref.c82: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.3ea) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.f2f)] // CHECK:STDOUT: %Core.import_ref.29e: @Optional.%Optional.Get.type (%Optional.Get.type.786) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Get (constants.%Optional.Get.2d0)] // CHECK:STDOUT: %Core.import_ref.2e7: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.ade)] // CHECK:STDOUT: %Core.import_ref.ef4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.925) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f42)] // CHECK:STDOUT: %Core.import_ref.a20: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.760) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.268)] // CHECK:STDOUT: %Core.import_ref.af7: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.d28) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.f29)] // CHECK:STDOUT: %Core.import_ref.dd4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.2f2) = 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.884)] // CHECK:STDOUT: %Core.import_ref.554 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.2e7, %Core.import_ref.ef4, %Core.import_ref.a20, %Core.import_ref.af7, %Core.import_ref.dd4, %Core.import_ref.554), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.373: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.498] // CHECK:STDOUT: %Core.import_ref.e86: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.390] // CHECK:STDOUT: %Core.import_ref.eef: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.f93)] // CHECK:STDOUT: %Core.import_ref.fcc: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.9cd)] // CHECK:STDOUT: %Core.import_ref.946: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.8fb) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.8a1)] // CHECK:STDOUT: %Core.import_ref.cfb: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.d4a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.5a8)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.946, %Core.import_ref.cfb), @T.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %Core.import_ref.72f: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.a1d) = 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.3c1)] // CHECK:STDOUT: %Copy.impl_witness_table.f44 = impl_witness_table (%Core.import_ref.72f), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.39b: @From.as_type.as.ImplicitAs.impl.%From.as_type.as.ImplicitAs.impl.Convert.type (%From.as_type.as.ImplicitAs.impl.Convert.type.386) = 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.85a)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.8f1 = impl_witness_table (%Core.import_ref.39b), @From.as_type.as.ImplicitAs.impl [concrete] // CHECK:STDOUT: %Core.import_ref.b25: @Int.as.AddAssignWith.impl.%Int.as.AddAssignWith.impl.Op.type.2 (%Int.as.AddAssignWith.impl.Op.type.93140c.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.75e08e.1)] // CHECK:STDOUT: %AddAssignWith.impl_witness_table = impl_witness_table (%Core.import_ref.b25), @Int.as.AddAssignWith.impl [concrete] // CHECK:STDOUT: %Core.Op.da0: @Int.as.AddAssignWith.impl.%Int.as.AddAssignWith.impl.Op.type.1 (%Int.as.AddAssignWith.impl.Op.type.93140c.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.75e08e.2)] // CHECK:STDOUT: %Core.import_ref.47b: Core.IntLiteral = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.AnyInt.impl.%N (constants.%N.fe9)] // CHECK:STDOUT: %Core.import_ref.323: @Int.as.AnyInt.impl.%Int.as.AnyInt.impl.AsInt.type (%Int.as.AnyInt.impl.AsInt.type.0ee) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.AnyInt.impl.%Int.as.AnyInt.impl.AsInt (constants.%Int.as.AnyInt.impl.AsInt.497)] // CHECK:STDOUT: %AnyInt.impl_witness_table = impl_witness_table (%Core.import_ref.47b, %Core.import_ref.323), @Int.as.AnyInt.impl [concrete] // CHECK:STDOUT: %Core.import_ref.b0d0 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.390: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = field_decl has_value, element1, %Core.import_ref.b0d0 in [concrete] {} // CHECK:STDOUT: %Core.import_ref.ab7 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.498: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = field_decl value, element0, %Core.import_ref.ab7 in [concrete] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc34_19.1 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.2] { // CHECK:STDOUT: %self.param_patt: %pattern_type.16e = ref_param_pattern [concrete = constants.%self.param_patt.214] // CHECK:STDOUT: %self.patt: %pattern_type.16e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.a42] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.b31 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.b31 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.1: %Destroy.WithSelf.Op.type.ef016f.2 = fn_decl @Destroy.WithSelf.Op.loc34_19.1 [concrete = constants.%Destroy.WithSelf.Op.403171.2] { // CHECK:STDOUT: %self.param_patt: %pattern_type.16e = ref_param_pattern [concrete = constants.%self.param_patt.214] // CHECK:STDOUT: %self.patt: %pattern_type.16e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.a42] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.b31 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.b31 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc34_19.2 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.59f = ref_param_pattern [concrete = constants.%self.param_patt.f37] // CHECK:STDOUT: %self.patt: %pattern_type.59f = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.c6e] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.993 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.993 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.2: %Destroy.WithSelf.Op.type.ef016f.3 = fn_decl @Destroy.WithSelf.Op.loc34_19.2 [concrete = constants.%Destroy.WithSelf.Op.403171.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.59f = ref_param_pattern [concrete = constants.%self.param_patt.f37] // CHECK:STDOUT: %self.patt: %pattern_type.59f = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.c6e] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.993 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.993 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc34_19.3 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.3: %Destroy.WithSelf.Op.type.ef016f.4 = fn_decl @Destroy.WithSelf.Op.loc34_19.3 [concrete = constants.%Destroy.WithSelf.Op.403171.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc34_19.4 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.0fa = ref_param_pattern [concrete = constants.%self.param_patt.4dc] // CHECK:STDOUT: %self.patt: %pattern_type.0fa = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.0fc] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.2e0 = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.2e0 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.4: %Destroy.WithSelf.Op.type.ef016f.5 = fn_decl @Destroy.WithSelf.Op.loc34_19.4 [concrete = constants.%Destroy.WithSelf.Op.403171.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.0fa = ref_param_pattern [concrete = constants.%self.param_patt.4dc] // CHECK:STDOUT: %self.patt: %pattern_type.0fa = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.0fc] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.2e0 = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.2e0 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc34_19.5 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.289 = ref_param_pattern [concrete = constants.%self.param_patt.ac0] // CHECK:STDOUT: %self.patt: %pattern_type.289 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.17f] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.091 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.091 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.5: %Destroy.WithSelf.Op.type.ef016f.6 = fn_decl @Destroy.WithSelf.Op.loc34_19.5 [concrete = constants.%Destroy.WithSelf.Op.403171.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.289 = ref_param_pattern [concrete = constants.%self.param_patt.ac0] // CHECK:STDOUT: %self.patt: %pattern_type.289 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.17f] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.091 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.091 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc34_19.6 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.de2 = ref_param_pattern [concrete = constants.%self.param_patt.602] // CHECK:STDOUT: %self.patt: %pattern_type.de2 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.398] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.aff = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.aff = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.6: %Destroy.WithSelf.Op.type.ef016f.7 = fn_decl @Destroy.WithSelf.Op.loc34_19.6 [concrete = constants.%Destroy.WithSelf.Op.403171.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.de2 = ref_param_pattern [concrete = constants.%self.param_patt.602] // CHECK:STDOUT: %self.patt: %pattern_type.de2 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.398] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.aff = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.aff = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestIterate(%R.loc30_17.2: %Iterate_where.type.8d9) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc30_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.550)] // CHECK:STDOUT: %Iterate.facet.loc34_19.5: %Iterate.type = facet_value %R.as_type.loc30_61.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc34_19.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.85c)] // CHECK:STDOUT: %.loc34_19.19: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc34_19.5 [symbolic = %.loc34_19.19 (constants.%.85a)] // CHECK:STDOUT: %impl.elem2.loc34_19.3: @TestIterate.%.loc34_19.19 (%.85a) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc34_19.3 (constants.%impl.elem2.dbc)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.4: = specific_impl_function %impl.elem2.loc34_19.3, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc34_19.5) [symbolic = %specific_impl_fn.loc34_19.4 (constants.%specific_impl_fn.d7d2)] // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc34_19.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.b01)] // CHECK:STDOUT: %.loc34_19.20: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc34_19.5 [symbolic = %.loc34_19.20 (constants.%.9f8)] // CHECK:STDOUT: %impl.elem3.loc34_19.2: @TestIterate.%.loc34_19.20 (%.9f8) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc34_19.2 (constants.%impl.elem3.84f)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.5: = specific_impl_function %impl.elem3.loc34_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc34_19.5) [symbolic = %specific_impl_fn.loc34_19.5 (constants.%specific_impl_fn.d92)] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.SelfDestruct.type (constants.%Destroy.WithSelf.SelfDestruct.type.656)] // CHECK:STDOUT: %.loc34_19.21: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type, %impl.elem1 [symbolic = %.loc34_19.21 (constants.%.9eb)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.0f4)] // CHECK:STDOUT: %impl.elem2.loc34_19.4: @TestIterate.%.loc34_19.21 (%.9eb) = impl_witness_access %Destroy.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc34_19.4 (constants.%impl.elem2.fb6)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.6: = specific_impl_function %impl.elem2.loc34_19.4, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1) [symbolic = %specific_impl_fn.loc34_19.6 (constants.%specific_impl_fn.63d)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc30_61.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.d94 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc30_61.1 (%R.as_type) = name_ref r, %r // CHECK:STDOUT: %impl.elem2.loc34_19.1: @TestIterate.%.loc34_19.19 (%.85a) = impl_witness_access constants.%Iterate.lookup_impl_witness.550, element2 [symbolic = %impl.elem2.loc34_19.3 (constants.%impl.elem2.dbc)] // CHECK:STDOUT: %bound_method.loc34_19.1: = bound_method %r.ref, %impl.elem2.loc34_19.1 // CHECK:STDOUT: %Iterate.facet.loc34_19.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.550) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %.loc34_19.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc34_19.1 [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %Iterate.facet.loc34_19.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.550) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %.loc34_19.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc34_19.2 [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.1: = specific_impl_function %impl.elem2.loc34_19.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.e23) [symbolic = %specific_impl_fn.loc34_19.4 (constants.%specific_impl_fn.d7d2)] // CHECK:STDOUT: %bound_method.loc34_19.2: = bound_method %r.ref, %specific_impl_fn.loc34_19.1 // CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.147) = var_storage invalid // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.147) to %var = call %bound_method.loc34_19.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3.loc34_19.1: @TestIterate.%.loc34_19.20 (%.9f8) = impl_witness_access constants.%Iterate.lookup_impl_witness.550, element3 [symbolic = %impl.elem3.loc34_19.2 (constants.%impl.elem3.84f)] // CHECK:STDOUT: %bound_method.loc34_19.3: = bound_method %r.ref, %impl.elem3.loc34_19.1 // CHECK:STDOUT: %Iterate.facet.loc34_19.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.550) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %.loc34_19.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc34_19.3 [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %Iterate.facet.loc34_19.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.550) [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %.loc34_19.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc34_19.4 [symbolic = %Iterate.facet.loc34_19.5 (constants.%Iterate.facet.e23)] // CHECK:STDOUT: %.loc34_19.5: %Destroy.type = converted constants.%as_type.147, constants.%impl.elem1.e3b [symbolic = %impl.elem1 (constants.%impl.elem1.e3b)] // CHECK:STDOUT: %.loc34_19.6: %Destroy.type = converted constants.%as_type.147, constants.%impl.elem1.e3b [symbolic = %impl.elem1 (constants.%impl.elem1.e3b)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.2: = specific_impl_function %impl.elem3.loc34_19.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.e23) [symbolic = %specific_impl_fn.loc34_19.5 (constants.%specific_impl_fn.d92)] // CHECK:STDOUT: %bound_method.loc34_19.4: = bound_method %r.ref, %specific_impl_fn.loc34_19.2 // CHECK:STDOUT: %.loc34_19.7: ref %Optional.aff = temporary_storage // CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.aff to %.loc34_19.7 = call %bound_method.loc34_19.4(%r.ref, %var) // CHECK:STDOUT: %.loc34_19.8: ref %Optional.aff = temporary %.loc34_19.7, %Iterate.WithSelf.Next.call // CHECK:STDOUT: %.loc34_19.9: %Optional.HasValue.type.182 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.HasValue.e75] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.182 = name_ref HasValue, %.loc34_19.9 [concrete = constants.%Optional.HasValue.e75] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc34_19.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.HasValue.specific_fn.8c2] // CHECK:STDOUT: %bound_method.loc34_19.5: = bound_method %.loc34_19.8, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc34_19.10: %Optional.aff = acquire_value %.loc34_19.8 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc34_19.5(%.loc34_19.10) // CHECK:STDOUT: %.loc34_19.11: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc34_19.12: bool = converted %Optional.HasValue.call, %.loc34_19.11 // CHECK:STDOUT: if %.loc34_19.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc34_19.13: %Optional.Get.type.788 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.Get.186] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.788 = name_ref Get, %.loc34_19.13 [concrete = constants.%Optional.Get.186] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc34_19.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.Get.specific_fn.8fe] // CHECK:STDOUT: %bound_method.loc34_19.6: = bound_method %.loc34_19.8, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc34_19.14: %Optional.aff = acquire_value %.loc34_19.8 // CHECK:STDOUT: %Optional.Get.call: init %i32 = call %bound_method.loc34_19.6(%.loc34_19.14) // CHECK:STDOUT: %.loc34_19.15: %i32 = value_of_initializer %Optional.Get.call // CHECK:STDOUT: %.loc34_19.16: %i32 = converted %Optional.Get.call, %.loc34_19.15 // CHECK:STDOUT: %i32.loc34: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i: %i32 = wrapper_binding i, %.loc34_19.16 // CHECK:STDOUT: %sum.ref: ref %i32 = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %i32 = name_ref i, %i // CHECK:STDOUT: %impl.elem0.loc35: %.316 = impl_witness_access constants.%AddAssignWith.impl_witness.95a, element0 [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.2] // CHECK:STDOUT: %bound_method.loc35_9.1: = bound_method %sum.ref, %impl.elem0.loc35 // CHECK:STDOUT: %specific_fn.loc35: = specific_function %impl.elem0.loc35, @Int.as.AddAssignWith.impl.Op.1(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.specific_fn.ec28e6.1] // CHECK:STDOUT: %bound_method.loc35_9.2: = bound_method %sum.ref, %specific_fn.loc35 // CHECK:STDOUT: %.loc35: %Int.as.AddAssignWith.impl.Op.type.47f4e6.1 = specific_constant imports.%Core.Op.da0, @Int.as.AddAssignWith.impl(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.1] // CHECK:STDOUT: %Op.ref: %Int.as.AddAssignWith.impl.Op.type.47f4e6.1 = name_ref Op, %.loc35 [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.1] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.bound: = bound_method %sum.ref, %Op.ref // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Op.ref, @Int.as.AddAssignWith.impl.Op.2(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.specific_fn.ec28e6.2] // CHECK:STDOUT: %bound_method.loc35_9.3: = bound_method %sum.ref, %Int.as.AddAssignWith.impl.Op.specific_fn // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.call: init %empty_tuple.type = call %bound_method.loc35_9.3(%sum.ref, %i.ref) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc34_19.1: = bound_method %.loc34_19.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.7 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc34_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc34_19.1(%.loc34_19.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc34_19.2: = bound_method %.loc34_19.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.7 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc34_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc34_19.2(%.loc34_19.8) // CHECK:STDOUT: %impl.elem2.loc34_19.2: @TestIterate.%.loc34_19.21 (%.9eb) = impl_witness_access constants.%Destroy.lookup_impl_witness.0f4, element2 [symbolic = %impl.elem2.loc34_19.4 (constants.%impl.elem2.fb6)] // CHECK:STDOUT: %bound_method.loc34_19.7: = bound_method %var, %impl.elem2.loc34_19.2 // CHECK:STDOUT: %.loc34_19.17: %Destroy.type = converted constants.%as_type.147, constants.%impl.elem1.e3b [symbolic = %impl.elem1 (constants.%impl.elem1.e3b)] // CHECK:STDOUT: %.loc34_19.18: %Destroy.type = converted constants.%as_type.147, constants.%impl.elem1.e3b [symbolic = %impl.elem1 (constants.%impl.elem1.e3b)] // CHECK:STDOUT: %specific_impl_fn.loc34_19.3: = specific_impl_function %impl.elem2.loc34_19.2, @Destroy.WithSelf.SelfDestruct.1(constants.%impl.elem1.e3b) [symbolic = %specific_impl_fn.loc34_19.6 (constants.%specific_impl_fn.63d)] // CHECK:STDOUT: %bound_method.loc34_19.8: = bound_method %var, %specific_impl_fn.loc34_19.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc34_19.3: init %empty_tuple.type = call %bound_method.loc34_19.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc34_19.1(%self.param: ref %.b31) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc34_19.1(%self.param: ref %.b31) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc34_19.1(%self.param: ref %.b31) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.1(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.1(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc34_19.2(%self.param: ref %MaybeUnformed.993) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc34_19.2(%self.param: ref %MaybeUnformed.993) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc34_19.2(%self.param: ref %MaybeUnformed.993) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.2(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.2(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc34_19.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc34_19.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc34_19.3(%self.param: ref bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.3(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.3(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc34_19.4(%self.param: ref %struct_type.value.has_value.2e0) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc34_19.1: ref bool = struct_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc34_19.1: = bound_method %.loc34_19.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc34_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc34_19.1(%.loc34_19.1) // CHECK:STDOUT: %.loc34_19.2: ref %MaybeUnformed.993 = struct_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc34_19.2: = bound_method %.loc34_19.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc34_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc34_19.2(%.loc34_19.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc34_19.4(%self.param: ref %struct_type.value.has_value.2e0) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc34_19.4(%self.param: ref %struct_type.value.has_value.2e0) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.4(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.4(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc34_19.5(%self.param: ref %DefaultOptionalStorage.091) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %has_value.ref: %DefaultOptionalStorage.elem.335 = name_ref has_value, imports.%Core.import_ref.e86 [concrete = imports.%field_decl.390] // CHECK:STDOUT: %.loc34_19.1: ref bool = class_element_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc34_19.1: = bound_method %.loc34_19.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc34_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc34_19.1(%.loc34_19.1) // CHECK:STDOUT: %value.ref: %DefaultOptionalStorage.elem.32e = name_ref value, imports.%Core.import_ref.373 [concrete = imports.%field_decl.498] // CHECK:STDOUT: %.loc34_19.2: ref %MaybeUnformed.993 = class_element_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc34_19.2: = bound_method %.loc34_19.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc34_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc34_19.2(%.loc34_19.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc34_19.5(%self.param: ref %DefaultOptionalStorage.091) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc34_19.5(%self.param: ref %DefaultOptionalStorage.091) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.5(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.5(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc34_19.6(%self.param: ref %Optional.aff) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc34_19.6(%self.param: ref %Optional.aff) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc34_19.6(%self.param: ref %Optional.aff) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.6(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.6(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @TestRangeFor(%m.param: ref %MutableRange, %c.param: %ConstRange) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt.loc49: %pattern_type.d94 = 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: %.d4c = impl_witness_access constants.%Iterate.impl_witness.a35, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.f70] // CHECK:STDOUT: %bound_method.loc49_19.1: = bound_method %m.ref, %impl.elem2.loc49 // CHECK:STDOUT: %facet_value.loc49_19.1: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.ed3, constants.%custom_witness.8e1, constants.%custom_witness.43f, constants.%custom_witness.444, constants.%custom_witness.c91, constants.%custom_witness.f8f19d.1, constants.%Copy.impl_witness.8af, constants.%custom_witness.8e1) [concrete = constants.%facet_value.383] // CHECK:STDOUT: %.loc49_19.1: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc49_19.1 [concrete = constants.%facet_value.383] // CHECK:STDOUT: %facet_value.loc49_19.2: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.ed3, constants.%custom_witness.8e1, constants.%custom_witness.43f, constants.%custom_witness.444, constants.%custom_witness.c91, constants.%custom_witness.f8f19d.1, constants.%Copy.impl_witness.8af, constants.%custom_witness.8e1) [concrete = constants.%facet_value.383] // CHECK:STDOUT: %.loc49_19.2: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc49_19.2 [concrete = constants.%facet_value.383] // CHECK:STDOUT: %specific_fn.loc49_19.1: = specific_function %impl.elem2.loc49, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.383) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.c26] // 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 // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call.loc49: init %tuple.type.508 to %var.loc49 = call %bound_method.loc49_19.2(%.loc49_18.1) // CHECK:STDOUT: assign %var.loc49, %T.as_type.as.Iterate.impl.NewCursor.call.loc49 // CHECK:STDOUT: br !for.next.loc49 // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc49: // CHECK:STDOUT: %impl.elem3.loc49: %.9fe = impl_witness_access constants.%Iterate.impl_witness.a35, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.573] // CHECK:STDOUT: %bound_method.loc49_19.3: = bound_method %m.ref, %impl.elem3.loc49 // CHECK:STDOUT: %facet_value.loc49_19.3: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.ed3, constants.%custom_witness.8e1, constants.%custom_witness.43f, constants.%custom_witness.444, constants.%custom_witness.c91, constants.%custom_witness.f8f19d.1, constants.%Copy.impl_witness.8af, constants.%custom_witness.8e1) [concrete = constants.%facet_value.383] // CHECK:STDOUT: %.loc49_19.3: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc49_19.3 [concrete = constants.%facet_value.383] // CHECK:STDOUT: %facet_value.loc49_19.4: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.ed3, constants.%custom_witness.8e1, constants.%custom_witness.43f, constants.%custom_witness.444, constants.%custom_witness.c91, constants.%custom_witness.f8f19d.1, constants.%Copy.impl_witness.8af, constants.%custom_witness.8e1) [concrete = constants.%facet_value.383] // CHECK:STDOUT: %.loc49_19.4: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc49_19.4 [concrete = constants.%facet_value.383] // CHECK:STDOUT: %specific_fn.loc49_19.2: = specific_function %impl.elem3.loc49, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.383) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn.7ef] // CHECK:STDOUT: %bound_method.loc49_19.4: = bound_method %m.ref, %specific_fn.loc49_19.2 // CHECK:STDOUT: %.loc49_19.5: ref %Optional.aff = temporary_storage // CHECK:STDOUT: %.loc49_18.2: %MutableRange = acquire_value %m.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call.loc49: init %Optional.aff to %.loc49_19.5 = call %bound_method.loc49_19.4(%.loc49_18.2, %var.loc49) // CHECK:STDOUT: %.loc49_19.6: ref %Optional.aff = temporary %.loc49_19.5, %T.as_type.as.Iterate.impl.Next.call.loc49 // CHECK:STDOUT: %.loc49_19.7: %Optional.HasValue.type.182 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.HasValue.e75] // CHECK:STDOUT: %HasValue.ref.loc49: %Optional.HasValue.type.182 = name_ref HasValue, %.loc49_19.7 [concrete = constants.%Optional.HasValue.e75] // CHECK:STDOUT: %Optional.HasValue.bound.loc49: = bound_method %.loc49_19.6, %HasValue.ref.loc49 // CHECK:STDOUT: %Optional.HasValue.specific_fn.loc49: = specific_function %HasValue.ref.loc49, @Optional.HasValue(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.HasValue.specific_fn.8c2] // CHECK:STDOUT: %bound_method.loc49_19.5: = bound_method %.loc49_19.6, %Optional.HasValue.specific_fn.loc49 // CHECK:STDOUT: %.loc49_19.8: %Optional.aff = acquire_value %.loc49_19.6 // CHECK:STDOUT: %Optional.HasValue.call.loc49: init bool = call %bound_method.loc49_19.5(%.loc49_19.8) // CHECK:STDOUT: %.loc49_19.9: bool = value_of_initializer %Optional.HasValue.call.loc49 // CHECK:STDOUT: %.loc49_19.10: bool = converted %Optional.HasValue.call.loc49, %.loc49_19.9 // CHECK:STDOUT: if %.loc49_19.10 br !for.body.loc49 else br !for.done.loc49 // CHECK:STDOUT: // CHECK:STDOUT: !for.body.loc49: // CHECK:STDOUT: %.loc49_19.11: %Optional.Get.type.788 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.Get.186] // CHECK:STDOUT: %Get.ref.loc49: %Optional.Get.type.788 = name_ref Get, %.loc49_19.11 [concrete = constants.%Optional.Get.186] // CHECK:STDOUT: %Optional.Get.bound.loc49: = bound_method %.loc49_19.6, %Get.ref.loc49 // CHECK:STDOUT: %Optional.Get.specific_fn.loc49: = specific_function %Get.ref.loc49, @Optional.Get(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.Get.specific_fn.8fe] // CHECK:STDOUT: %bound_method.loc49_19.6: = bound_method %.loc49_19.6, %Optional.Get.specific_fn.loc49 // CHECK:STDOUT: %.loc49_19.12: %Optional.aff = acquire_value %.loc49_19.6 // CHECK:STDOUT: %Optional.Get.call.loc49: init %i32 = call %bound_method.loc49_19.6(%.loc49_19.12) // CHECK:STDOUT: %.loc49_19.13: %i32 = value_of_initializer %Optional.Get.call.loc49 // CHECK:STDOUT: %.loc49_19.14: %i32 = converted %Optional.Get.call.loc49, %.loc49_19.13 // CHECK:STDOUT: %i32.loc49: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i.loc49: %i32 = wrapper_binding i, %.loc49_19.14 // CHECK:STDOUT: %sum.ref.loc50: ref %i32 = name_ref sum, %sum // CHECK:STDOUT: %i.ref.loc50: %i32 = name_ref i, %i.loc49 // CHECK:STDOUT: %impl.elem0.loc50: %.316 = impl_witness_access constants.%AddAssignWith.impl_witness.95a, element0 [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.2] // CHECK:STDOUT: %bound_method.loc50_9.1: = bound_method %sum.ref.loc50, %impl.elem0.loc50 // CHECK:STDOUT: %specific_fn.loc50: = specific_function %impl.elem0.loc50, @Int.as.AddAssignWith.impl.Op.1(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.specific_fn.ec28e6.1] // CHECK:STDOUT: %bound_method.loc50_9.2: = bound_method %sum.ref.loc50, %specific_fn.loc50 // CHECK:STDOUT: %.loc50: %Int.as.AddAssignWith.impl.Op.type.47f4e6.1 = specific_constant imports.%Core.Op.da0, @Int.as.AddAssignWith.impl(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.1] // CHECK:STDOUT: %Op.ref.loc50: %Int.as.AddAssignWith.impl.Op.type.47f4e6.1 = name_ref Op, %.loc50 [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.1] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.bound.loc50: = bound_method %sum.ref.loc50, %Op.ref.loc50 // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.specific_fn.loc50: = specific_function %Op.ref.loc50, @Int.as.AddAssignWith.impl.Op.2(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.specific_fn.ec28e6.2] // CHECK:STDOUT: %bound_method.loc50_9.3: = bound_method %sum.ref.loc50, %Int.as.AddAssignWith.impl.Op.specific_fn.loc50 // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.call.loc50: init %empty_tuple.type = call %bound_method.loc50_9.3(%sum.ref.loc50, %i.ref.loc50) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc49_19.1: = bound_method %.loc49_19.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.7 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc49_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc49_19.1(%.loc49_19.6) // CHECK:STDOUT: br !for.next.loc49 // CHECK:STDOUT: // CHECK:STDOUT: !for.done.loc49: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc49_19.2: = bound_method %.loc49_19.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.7 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc49_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc49_19.2(%.loc49_19.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc49_19.3: = bound_method %var.loc49, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.9 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc49_19.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc49_19.3(%var.loc49) // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt.loc55: %pattern_type.d94 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c // CHECK:STDOUT: %impl.elem2.loc55: %.582 = impl_witness_access constants.%Iterate.impl_witness.39d, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.356] // CHECK:STDOUT: %bound_method.loc55_19.1: = bound_method %c.ref, %impl.elem2.loc55 // CHECK:STDOUT: %facet_value.loc55_19.1: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.23e, constants.%custom_witness.0f3, constants.%custom_witness.f5c, constants.%custom_witness.746, constants.%custom_witness.86f, constants.%custom_witness.f8f19d.1, constants.%Copy.impl_witness.8af, constants.%custom_witness.0f3) [concrete = constants.%facet_value.15e] // CHECK:STDOUT: %.loc55_19.1: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc55_19.1 [concrete = constants.%facet_value.15e] // CHECK:STDOUT: %facet_value.loc55_19.2: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.23e, constants.%custom_witness.0f3, constants.%custom_witness.f5c, constants.%custom_witness.746, constants.%custom_witness.86f, constants.%custom_witness.f8f19d.1, constants.%Copy.impl_witness.8af, constants.%custom_witness.0f3) [concrete = constants.%facet_value.15e] // CHECK:STDOUT: %.loc55_19.2: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc55_19.2 [concrete = constants.%facet_value.15e] // CHECK:STDOUT: %specific_fn.loc55_19.1: = specific_function %impl.elem2.loc55, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.15e) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.49d] // 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: %T.as_type.as.Iterate.impl.NewCursor.call.loc55: init %tuple.type.69f to %var.loc55 = call %bound_method.loc55_19.2(%c.ref) // CHECK:STDOUT: assign %var.loc55, %T.as_type.as.Iterate.impl.NewCursor.call.loc55 // CHECK:STDOUT: br !for.next.loc55 // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc55: // CHECK:STDOUT: %impl.elem3.loc55: %.d56 = impl_witness_access constants.%Iterate.impl_witness.39d, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.259] // CHECK:STDOUT: %bound_method.loc55_19.3: = bound_method %c.ref, %impl.elem3.loc55 // CHECK:STDOUT: %facet_value.loc55_19.3: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.23e, constants.%custom_witness.0f3, constants.%custom_witness.f5c, constants.%custom_witness.746, constants.%custom_witness.86f, constants.%custom_witness.f8f19d.1, constants.%Copy.impl_witness.8af, constants.%custom_witness.0f3) [concrete = constants.%facet_value.15e] // CHECK:STDOUT: %.loc55_19.3: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc55_19.3 [concrete = constants.%facet_value.15e] // CHECK:STDOUT: %facet_value.loc55_19.4: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.23e, constants.%custom_witness.0f3, constants.%custom_witness.f5c, constants.%custom_witness.746, constants.%custom_witness.86f, constants.%custom_witness.f8f19d.1, constants.%Copy.impl_witness.8af, constants.%custom_witness.0f3) [concrete = constants.%facet_value.15e] // CHECK:STDOUT: %.loc55_19.4: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc55_19.4 [concrete = constants.%facet_value.15e] // CHECK:STDOUT: %specific_fn.loc55_19.2: = specific_function %impl.elem3.loc55, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.15e) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn.2c1] // CHECK:STDOUT: %bound_method.loc55_19.4: = bound_method %c.ref, %specific_fn.loc55_19.2 // CHECK:STDOUT: %.loc55_19.5: ref %Optional.aff = temporary_storage // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call.loc55: init %Optional.aff to %.loc55_19.5 = call %bound_method.loc55_19.4(%c.ref, %var.loc55) // CHECK:STDOUT: %.loc55_19.6: ref %Optional.aff = temporary %.loc55_19.5, %T.as_type.as.Iterate.impl.Next.call.loc55 // CHECK:STDOUT: %.loc55_19.7: %Optional.HasValue.type.182 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.HasValue.e75] // CHECK:STDOUT: %HasValue.ref.loc55: %Optional.HasValue.type.182 = name_ref HasValue, %.loc55_19.7 [concrete = constants.%Optional.HasValue.e75] // CHECK:STDOUT: %Optional.HasValue.bound.loc55: = bound_method %.loc55_19.6, %HasValue.ref.loc55 // CHECK:STDOUT: %Optional.HasValue.specific_fn.loc55: = specific_function %HasValue.ref.loc55, @Optional.HasValue(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.HasValue.specific_fn.8c2] // CHECK:STDOUT: %bound_method.loc55_19.5: = bound_method %.loc55_19.6, %Optional.HasValue.specific_fn.loc55 // CHECK:STDOUT: %.loc55_19.8: %Optional.aff = acquire_value %.loc55_19.6 // CHECK:STDOUT: %Optional.HasValue.call.loc55: init bool = call %bound_method.loc55_19.5(%.loc55_19.8) // CHECK:STDOUT: %.loc55_19.9: bool = value_of_initializer %Optional.HasValue.call.loc55 // CHECK:STDOUT: %.loc55_19.10: bool = converted %Optional.HasValue.call.loc55, %.loc55_19.9 // CHECK:STDOUT: if %.loc55_19.10 br !for.body.loc55 else br !for.done.loc55 // CHECK:STDOUT: // CHECK:STDOUT: !for.body.loc55: // CHECK:STDOUT: %.loc55_19.11: %Optional.Get.type.788 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.Get.186] // CHECK:STDOUT: %Get.ref.loc55: %Optional.Get.type.788 = name_ref Get, %.loc55_19.11 [concrete = constants.%Optional.Get.186] // CHECK:STDOUT: %Optional.Get.bound.loc55: = bound_method %.loc55_19.6, %Get.ref.loc55 // CHECK:STDOUT: %Optional.Get.specific_fn.loc55: = specific_function %Get.ref.loc55, @Optional.Get(constants.%OptionalStorage.facet.1f7) [concrete = constants.%Optional.Get.specific_fn.8fe] // CHECK:STDOUT: %bound_method.loc55_19.6: = bound_method %.loc55_19.6, %Optional.Get.specific_fn.loc55 // CHECK:STDOUT: %.loc55_19.12: %Optional.aff = acquire_value %.loc55_19.6 // CHECK:STDOUT: %Optional.Get.call.loc55: init %i32 = call %bound_method.loc55_19.6(%.loc55_19.12) // CHECK:STDOUT: %.loc55_19.13: %i32 = value_of_initializer %Optional.Get.call.loc55 // CHECK:STDOUT: %.loc55_19.14: %i32 = converted %Optional.Get.call.loc55, %.loc55_19.13 // CHECK:STDOUT: %i32.loc55: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %i.loc55: %i32 = wrapper_binding i, %.loc55_19.14 // CHECK:STDOUT: %sum.ref.loc56: ref %i32 = name_ref sum, %sum // CHECK:STDOUT: %i.ref.loc56: %i32 = name_ref i, %i.loc55 // CHECK:STDOUT: %impl.elem0.loc56: %.316 = impl_witness_access constants.%AddAssignWith.impl_witness.95a, element0 [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.2] // CHECK:STDOUT: %bound_method.loc56_9.1: = bound_method %sum.ref.loc56, %impl.elem0.loc56 // CHECK:STDOUT: %specific_fn.loc56: = specific_function %impl.elem0.loc56, @Int.as.AddAssignWith.impl.Op.1(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.specific_fn.ec28e6.1] // CHECK:STDOUT: %bound_method.loc56_9.2: = bound_method %sum.ref.loc56, %specific_fn.loc56 // CHECK:STDOUT: %.loc56: %Int.as.AddAssignWith.impl.Op.type.47f4e6.1 = specific_constant imports.%Core.Op.da0, @Int.as.AddAssignWith.impl(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.1] // CHECK:STDOUT: %Op.ref.loc56: %Int.as.AddAssignWith.impl.Op.type.47f4e6.1 = name_ref Op, %.loc56 [concrete = constants.%Int.as.AddAssignWith.impl.Op.bff4f9.1] // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.bound.loc56: = bound_method %sum.ref.loc56, %Op.ref.loc56 // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.specific_fn.loc56: = specific_function %Op.ref.loc56, @Int.as.AddAssignWith.impl.Op.2(constants.%int_32, constants.%ImplicitAs.facet.c18) [concrete = constants.%Int.as.AddAssignWith.impl.Op.specific_fn.ec28e6.2] // CHECK:STDOUT: %bound_method.loc56_9.3: = bound_method %sum.ref.loc56, %Int.as.AddAssignWith.impl.Op.specific_fn.loc56 // CHECK:STDOUT: %Int.as.AddAssignWith.impl.Op.call.loc56: init %empty_tuple.type = call %bound_method.loc56_9.3(%sum.ref.loc56, %i.ref.loc56) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc55_19.1: = bound_method %.loc55_19.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.7 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc55_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc55_19.1(%.loc55_19.6) // CHECK:STDOUT: br !for.next.loc55 // CHECK:STDOUT: // CHECK:STDOUT: !for.done.loc55: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc55_19.2: = bound_method %.loc55_19.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.7 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc55_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc55_19.2(%.loc55_19.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc55_19.3: = bound_method %var.loc55, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc55_19.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc55_19.3(%var.loc55) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc30_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc30_17.1 => constants.%R // CHECK:STDOUT: %R.as_type.loc30_61.1 => constants.%R.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.3b2 // CHECK:STDOUT: %r.param_patt.loc30_59.2 => constants.%r.param_patt.a49 // CHECK:STDOUT: %r.patt.loc30_59.2 => constants.%r.patt.dd9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.b06) { // CHECK:STDOUT: %R.patt.loc30_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc30_17.1 => constants.%facet_value.b06 // CHECK:STDOUT: %R.as_type.loc30_61.1 => constants.%MutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.e63 // CHECK:STDOUT: %r.param_patt.loc30_59.2 => constants.%r.param_patt.c79 // CHECK:STDOUT: %r.patt.loc30_59.2 => constants.%r.patt.94f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.a35 // CHECK:STDOUT: %Iterate.facet.loc34_19.5 => constants.%Iterate.facet.2b0 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.ca0 // CHECK:STDOUT: %.loc34_19.19 => constants.%.d4c // CHECK:STDOUT: %impl.elem2.loc34_19.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.f70 // CHECK:STDOUT: %specific_impl_fn.loc34_19.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.c26 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.0fe // CHECK:STDOUT: %as_type => constants.%tuple.type.508 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.c28 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.8bc // CHECK:STDOUT: %.loc34_19.20 => constants.%.9fe // CHECK:STDOUT: %impl.elem3.loc34_19.2 => constants.%T.as_type.as.Iterate.impl.Next.573 // CHECK:STDOUT: %specific_impl_fn.loc34_19.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn.7ef // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.d1f // CHECK:STDOUT: %.loc34_19.21 => constants.%.0dc // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.8 // CHECK:STDOUT: %impl.elem2.loc34_19.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.9 // CHECK:STDOUT: %specific_impl_fn.loc34_19.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.3df) { // CHECK:STDOUT: %R.patt.loc30_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc30_17.1 => constants.%facet_value.3df // CHECK:STDOUT: %R.as_type.loc30_61.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0ba // CHECK:STDOUT: %r.param_patt.loc30_59.2 => constants.%r.param_patt.83e // CHECK:STDOUT: %r.patt.loc30_59.2 => constants.%r.patt.c21 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc30 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.39d // CHECK:STDOUT: %Iterate.facet.loc34_19.5 => constants.%Iterate.facet.1c8 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.97c // CHECK:STDOUT: %.loc34_19.19 => constants.%.582 // CHECK:STDOUT: %impl.elem2.loc34_19.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.356 // CHECK:STDOUT: %specific_impl_fn.loc34_19.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.49d // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.c6d // CHECK:STDOUT: %as_type => constants.%tuple.type.69f // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.8d5 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.1c9 // CHECK:STDOUT: %.loc34_19.20 => constants.%.d56 // CHECK:STDOUT: %impl.elem3.loc34_19.2 => constants.%T.as_type.as.Iterate.impl.Next.259 // CHECK:STDOUT: %specific_impl_fn.loc34_19.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn.2c1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.b84 // CHECK:STDOUT: %.loc34_19.21 => constants.%.40c // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.9 // CHECK:STDOUT: %impl.elem2.loc34_19.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: %specific_impl_fn.loc34_19.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- methods_return_different_types.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: type: type = facet_type [concrete] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %facet_type.f48: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Get.type.786: type = fn_type @Optional.Get, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Get.2d0: %Optional.Get.type.786 = struct_value () [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.3ea: type = fn_type @Optional.HasValue, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.HasValue.f2f: %Optional.HasValue.type.3ea = struct_value () [symbolic] // CHECK:STDOUT: %T.283: %facet_type.f48 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.28a: = lookup_impl_witness %T.283, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.16e: %Destroy.type = facet_value %T.as_type.74b, (%Destroy.lookup_impl_witness.28a) [symbolic] // CHECK:STDOUT: %MaybeUnformed.91c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.16e) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.ade: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%T.283) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b49: type = unbound_element_type %DefaultOptionalStorage.ade, bool [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.229: type = unbound_element_type %DefaultOptionalStorage.ade, %MaybeUnformed.91c [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.type.2f2: type = fn_type @T.as_type.as.OptionalStorage.impl.Get, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.884: %T.as_type.as.OptionalStorage.impl.Get.type.2f2 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d28: 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.f29: %T.as_type.as.OptionalStorage.impl.Has.type.d28 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.type.760: type = fn_type @T.as_type.as.OptionalStorage.impl.Some, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.268: %T.as_type.as.OptionalStorage.impl.Some.type.760 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.925: 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.f42: %T.as_type.as.OptionalStorage.impl.None.type.925 = struct_value () [symbolic] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRange.type: type = facet_type <@CppRange> [concrete] // CHECK:STDOUT: %.Self.e0b: %CppRange.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.50b: = lookup_impl_witness %.Self.e0b, @CppRangeForIterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.32d: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.50b, element0 [symbolic_self] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.851: = lookup_impl_witness %impl.elem0.32d, @CppUnsafeDeref [symbolic_self] // CHECK:STDOUT: %impl.elem0.10d: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.851, element0 [symbolic_self] // CHECK:STDOUT: %CppRange_where.type.d682d6.1: type = facet_type <@CppRange where %impl.elem0.10d impls @Copy> [concrete] // CHECK:STDOUT: %T.f45530.2: %CppRange_where.type.d682d6.1 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.d4a: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.5a8: %T.as_type.as.Iterate.impl.Next.type.d4a = struct_value () [symbolic] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.b581a8.2: = lookup_impl_witness %T.f45530.2, @CppRangeForIterate [symbolic] // CHECK:STDOUT: %impl.elem0.5f971c.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element0 [symbolic] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.87e543.2: = lookup_impl_witness %impl.elem0.5f971c.2, @CppUnsafeDeref [symbolic] // CHECK:STDOUT: %impl.elem0.493765.2: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.87e543.2, element0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.8fb: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.8a1: %T.as_type.as.Iterate.impl.NewCursor.type.8fb = struct_value () [symbolic] // CHECK:STDOUT: %impl.elem1.c2dc15.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element1 [symbolic] // CHECK:STDOUT: %tuple.type.1ba: type = tuple_type (%impl.elem0.5f971c.2, %impl.elem1.c2dc15.2) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.812: = lookup_impl_witness %tuple.type.1ba, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.9cd: %Destroy.type = facet_value %tuple.type.1ba, (%Destroy.lookup_impl_witness.812) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [symbolic] // CHECK:STDOUT: %DiffValueType: type = class_type @DiffValueType [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.149: type = pattern_type %DiffValueType [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc40_56 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc40_56 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %DiffValueType.SubobjectDestroy.type: type = fn_type @DiffValueType.SubobjectDestroy [concrete] // CHECK:STDOUT: %DiffValueType.SubobjectDestroy: %DiffValueType.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.1bfa2a.1: = custom_witness (%Destroy.WithSelf.Op.403171.2, %DiffValueType.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.2), @Destroy [concrete] // CHECK:STDOUT: %const.879: type = const_type %DiffValueType [concrete] // CHECK:STDOUT: %ptr.816: type = ptr_type %const.879 [concrete] // CHECK:STDOUT: %ptr.cd0: type = ptr_type %DiffValueType [concrete] // CHECK:STDOUT: %DiffValueType.Op.type: type = fn_type @DiffValueType.Op [concrete] // CHECK:STDOUT: %DiffValueType.Op: %DiffValueType.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%DiffValueType.Op), @Copy [concrete] // CHECK:STDOUT: %facet_value.cca: %facet_type.f48 = facet_value %DiffValueType, (%custom_witness.1bfa2a.1, %custom_witness.d0da43.1) [concrete] // 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.b96: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.cca> [concrete] // CHECK:STDOUT: %pattern_type.975: type = pattern_type %Iterate_where.type.b96 [concrete] // CHECK:STDOUT: %R.patt: %pattern_type.975 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R: %Iterate_where.type.b96 = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] // CHECK:STDOUT: %pattern_type.dc2: type = pattern_type %R.as_type [symbolic] // CHECK:STDOUT: %r.patt.917: %pattern_type.dc2 = ref_binding_pattern r [symbolic] // CHECK:STDOUT: %r.param_patt.9a1: %pattern_type.dc2 = var_param_pattern %r.patt.917 [symbolic] // CHECK:STDOUT: %i.patt: %pattern_type.149 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.d00: = lookup_impl_witness %R, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.f03: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.d00) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.b5e: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.f03) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.931: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.f03) [symbolic] // CHECK:STDOUT: %.c17: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.b5e, %Iterate.facet.f03 [symbolic] // CHECK:STDOUT: %impl.elem2.3ea: %.c17 = impl_witness_access %Iterate.lookup_impl_witness.d00, element2 [symbolic] // CHECK:STDOUT: %impl.elem1.fbc: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.d00, element1 [symbolic] // CHECK:STDOUT: %as_type.389: type = facet_access_type %impl.elem1.fbc [symbolic] // CHECK:STDOUT: %specific_impl_fn.b2c: = specific_impl_function %impl.elem2.3ea, @Iterate.WithSelf.NewCursor(%Iterate.facet.f03) [symbolic] // CHECK:STDOUT: %.c9b: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.931, %Iterate.facet.f03 [symbolic] // CHECK:STDOUT: %impl.elem3.0ff: %.c9b = impl_witness_access %Iterate.lookup_impl_witness.d00, element3 [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.0d9: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.cca) [concrete] // CHECK:STDOUT: %OptionalStorage.impl_witness.9ee: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.cca) [concrete] // CHECK:STDOUT: %OptionalStorage.facet.9e6: %OptionalStorage.type = facet_value %DiffValueType, (%OptionalStorage.impl_witness.9ee) [concrete] // CHECK:STDOUT: %Optional.c3f: type = class_type @Optional, @Optional(%OptionalStorage.facet.9e6) [concrete] // CHECK:STDOUT: %pattern_type.25e: type = pattern_type %Optional.c3f [concrete] // CHECK:STDOUT: %specific_impl_fn.20b: = specific_impl_function %impl.elem3.0ff, @Iterate.WithSelf.Next(%Iterate.facet.f03) [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.f06: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.9e6) [concrete] // CHECK:STDOUT: %Optional.HasValue.660: %Optional.HasValue.type.f06 = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.acd: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.9e6) [concrete] // CHECK:STDOUT: %Optional.Get.a06: %Optional.Get.type.acd = struct_value () [concrete] // CHECK:STDOUT: %Destroy.facet.be4: %Destroy.type = facet_value %DiffValueType, (%custom_witness.1bfa2a.1) [concrete] // CHECK:STDOUT: %MaybeUnformed.a77: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.be4) [concrete] // CHECK:STDOUT: %.a18: type = maybe_unformed_type %DiffValueType [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.45d: type = unbound_element_type %DefaultOptionalStorage.0d9, %MaybeUnformed.a77 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.793: type = unbound_element_type %DefaultOptionalStorage.0d9, bool [concrete] // CHECK:STDOUT: %struct_type.value.has_value.41d: type = struct_type {.value: %MaybeUnformed.a77, .has_value: bool} [concrete] // CHECK:STDOUT: %Optional.HasValue.specific_fn.68a: = specific_function %Optional.HasValue.660, @Optional.HasValue(%OptionalStorage.facet.9e6) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn.2e2: = specific_function %Optional.Get.a06, @Optional.Get(%OptionalStorage.facet.9e6) [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.type: type = fn_type @operator_PlusEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk: %operator_PlusEqual__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.98c: type = pattern_type %.a18 [concrete] // CHECK:STDOUT: %self.param_patt.47c: %pattern_type.98c = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.90b: %pattern_type.98c = wrapper_binding_pattern self, %self.param_patt.47c [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc44_33.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc44_33.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.a71: type = pattern_type %MaybeUnformed.a77 [concrete] // CHECK:STDOUT: %self.param_patt.4d3: %pattern_type.a71 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.295: %pattern_type.a71 = wrapper_binding_pattern self, %self.param_patt.4d3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc44_33.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.4: type = fn_type @Destroy.WithSelf.Op.loc44_33.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.4: %Destroy.WithSelf.Op.type.ef016f.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4: type = fn_type @Destroy.WithSelf.SelfDestruct.loc44_33.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.4: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.40d: %pattern_type.831 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.560: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt.40d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc44_33.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.5: type = fn_type @Destroy.WithSelf.Op.loc44_33.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.5: %Destroy.WithSelf.Op.type.ef016f.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5: type = fn_type @Destroy.WithSelf.SelfDestruct.loc44_33.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.5: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.b94: type = pattern_type %struct_type.value.has_value.41d [concrete] // CHECK:STDOUT: %self.param_patt.717: %pattern_type.b94 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.2d5: %pattern_type.b94 = wrapper_binding_pattern self, %self.param_patt.717 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc44_33.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc44_33.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.555: type = pattern_type %DefaultOptionalStorage.0d9 [concrete] // CHECK:STDOUT: %self.param_patt.0b7: %pattern_type.555 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.c81: %pattern_type.555 = wrapper_binding_pattern self, %self.param_patt.0b7 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc44_33.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc44_33.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.a66: %pattern_type.25e = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.b7b: %pattern_type.25e = wrapper_binding_pattern self, %self.param_patt.a66 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc44_33.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.8: type = fn_type @Destroy.WithSelf.Op.loc44_33.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.8: %Destroy.WithSelf.Op.type.ef016f.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8: type = fn_type @Destroy.WithSelf.SelfDestruct.loc44_33.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.8: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.662: = lookup_impl_witness %impl.elem1.fbc, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.e70: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1.fbc) [symbolic] // CHECK:STDOUT: %.99c: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.e70, %impl.elem1.fbc [symbolic] // CHECK:STDOUT: %impl.elem2.ff7: %.99c = impl_witness_access %Destroy.lookup_impl_witness.662, element2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.ffc: = specific_impl_function %impl.elem2.ff7, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1.fbc) [symbolic] // CHECK:STDOUT: %DiffMutableRange: type = class_type @DiffMutableRange [concrete] // CHECK:STDOUT: %pattern_type.611: type = pattern_type %DiffMutableRange [concrete] // CHECK:STDOUT: %DiffConstRange: type = class_type @DiffConstRange [concrete] // CHECK:STDOUT: %pattern_type.7dd: type = pattern_type %DiffConstRange [concrete] // CHECK:STDOUT: %Iterator.f25: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %Sentinel.b4c: type = class_type @Sentinel.1 [concrete] // CHECK:STDOUT: %DiffMutableRange.Begin.type: type = fn_type @DiffMutableRange.Begin [concrete] // CHECK:STDOUT: %DiffMutableRange.Begin: %DiffMutableRange.Begin.type = struct_value () [concrete] // CHECK:STDOUT: %DiffMutableRange.End.type: type = fn_type @DiffMutableRange.End [concrete] // CHECK:STDOUT: %DiffMutableRange.End: %DiffMutableRange.End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.aa8: = custom_witness (%Iterator.f25, %Sentinel.b4c, %DiffMutableRange.Begin, %DiffMutableRange.End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.9: type = fn_type @Destroy.WithSelf.Op.loc51_16.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.9: %Destroy.WithSelf.Op.type.ef016f.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9: type = fn_type @Destroy.WithSelf.SelfDestruct.loc51_16.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.9: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type.45a: type = fn_type @Iterator.SubobjectDestroy.1 [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.d6a: %Iterator.SubobjectDestroy.type.45a = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.db9baa.1: = custom_witness (%Destroy.WithSelf.Op.403171.9, %Iterator.SubobjectDestroy.d6a, %Destroy.WithSelf.SelfDestruct.db3fdb.9), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.41bbea.1: type = fn_type @Iterator.Op.1 [concrete] // CHECK:STDOUT: %Iterator.Op.1caa36.1: %Iterator.Op.type.41bbea.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.392: = custom_witness (%DiffValueType, %Iterator.Op.1caa36.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.41bbea.2: type = fn_type @Iterator.Op.2 [concrete] // CHECK:STDOUT: %Iterator.Op.1caa36.2: %Iterator.Op.type.41bbea.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.1c9: = custom_witness (%Iterator.Op.1caa36.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type.ca8475.1: type = fn_type @Equal.1 [concrete] // CHECK:STDOUT: %Equal.285b15.1: %Equal.type.ca8475.1 = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type.53d9ee.1: type = fn_type @NotEqual.1 [concrete] // CHECK:STDOUT: %NotEqual.119263.1: %NotEqual.type.53d9ee.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.b32: = custom_witness (%Equal.285b15.1, %NotEqual.119263.1), @EqWith, @EqWith(%Sentinel.b4c) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.10: type = fn_type @Destroy.WithSelf.Op.loc51_16.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.10: %Destroy.WithSelf.Op.type.ef016f.10 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10: type = fn_type @Destroy.WithSelf.SelfDestruct.loc51_16.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.10: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10 = struct_value () [concrete] // CHECK:STDOUT: %Sentinel.SubobjectDestroy.type.45a: type = fn_type @Sentinel.SubobjectDestroy.1 [concrete] // CHECK:STDOUT: %Sentinel.SubobjectDestroy.d6a: %Sentinel.SubobjectDestroy.type.45a = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.db9baa.2: = custom_witness (%Destroy.WithSelf.Op.403171.10, %Sentinel.SubobjectDestroy.d6a, %Destroy.WithSelf.SelfDestruct.db3fdb.10), @Destroy [concrete] // CHECK:STDOUT: %facet_value.4bb: %CppRange_where.type.d682d6.1 = facet_value %DiffMutableRange, (%custom_witness.aa8, %custom_witness.db9baa.1, %custom_witness.392, %custom_witness.1c9, %custom_witness.b32, %custom_witness.1bfa2a.1, %custom_witness.d0da43.1, %custom_witness.db9baa.2) [concrete] // CHECK:STDOUT: %tuple.type.b18: type = tuple_type (%Iterator.f25, %Sentinel.b4c) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8: type = fn_type @Destroy.WithSelf.SubobjectDestroy.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.8: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.11: type = fn_type @Destroy.WithSelf.Op.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.11: %Destroy.WithSelf.Op.type.ef016f.11 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.11: type = fn_type @Destroy.WithSelf.SelfDestruct.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.11: %Destroy.WithSelf.SelfDestruct.type.fbceb5.11 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.8: = custom_witness (%Destroy.WithSelf.Op.403171.11, %Destroy.WithSelf.SubobjectDestroy.d01daf.8, %Destroy.WithSelf.SelfDestruct.db3fdb.11), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.645: %Destroy.type = facet_value %tuple.type.b18, (%custom_witness.f8f19d.8) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.606: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.4bb) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.899: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.4bb) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.a7b: %T.as_type.as.Iterate.impl.NewCursor.type.899 = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.355: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.4bb) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.8ce: %T.as_type.as.Iterate.impl.Next.type.355 = struct_value () [concrete] // CHECK:STDOUT: %facet_value.2c1: %Iterate_where.type.b96 = facet_value %DiffMutableRange, (%Iterate.impl_witness.606) [concrete] // CHECK:STDOUT: %r.patt.5fe: %pattern_type.611 = ref_binding_pattern r [concrete] // CHECK:STDOUT: %r.param_patt.a4b: %pattern_type.611 = var_param_pattern %r.patt.5fe [concrete] // CHECK:STDOUT: %Iterator.a59: type = class_type @Iterator.2 [concrete] // CHECK:STDOUT: %Sentinel.b33: type = class_type @Sentinel.2 [concrete] // CHECK:STDOUT: %DiffConstRange.Begin.type: type = fn_type @DiffConstRange.Begin [concrete] // CHECK:STDOUT: %DiffConstRange.Begin: %DiffConstRange.Begin.type = struct_value () [concrete] // CHECK:STDOUT: %DiffConstRange.End.type: type = fn_type @DiffConstRange.End [concrete] // CHECK:STDOUT: %DiffConstRange.End: %DiffConstRange.End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.7b4: = custom_witness (%Iterator.a59, %Sentinel.b33, %DiffConstRange.Begin, %DiffConstRange.End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.13: type = fn_type @Destroy.WithSelf.Op.loc52_16.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.13: %Destroy.WithSelf.Op.type.ef016f.13 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.13: type = fn_type @Destroy.WithSelf.SelfDestruct.loc52_16.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.13: %Destroy.WithSelf.SelfDestruct.type.fbceb5.13 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type.e2b: type = fn_type @Iterator.SubobjectDestroy.2 [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.21a: %Iterator.SubobjectDestroy.type.e2b = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.48b6e9.1: = custom_witness (%Destroy.WithSelf.Op.403171.13, %Iterator.SubobjectDestroy.21a, %Destroy.WithSelf.SelfDestruct.db3fdb.13), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.b7ae80.1: type = fn_type @Iterator.Op.3 [concrete] // CHECK:STDOUT: %Iterator.Op.690fee.1: %Iterator.Op.type.b7ae80.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.0c0: = custom_witness (%DiffValueType, %Iterator.Op.690fee.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.b7ae80.2: type = fn_type @Iterator.Op.4 [concrete] // CHECK:STDOUT: %Iterator.Op.690fee.2: %Iterator.Op.type.b7ae80.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.ffb: = custom_witness (%Iterator.Op.690fee.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type.ca8475.2: type = fn_type @Equal.2 [concrete] // CHECK:STDOUT: %Equal.285b15.2: %Equal.type.ca8475.2 = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type.53d9ee.2: type = fn_type @NotEqual.2 [concrete] // CHECK:STDOUT: %NotEqual.119263.2: %NotEqual.type.53d9ee.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.fc2: = custom_witness (%Equal.285b15.2, %NotEqual.119263.2), @EqWith, @EqWith(%Sentinel.b33) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.14: type = fn_type @Destroy.WithSelf.Op.loc52_16.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.14: %Destroy.WithSelf.Op.type.ef016f.14 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.14: type = fn_type @Destroy.WithSelf.SelfDestruct.loc52_16.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.14: %Destroy.WithSelf.SelfDestruct.type.fbceb5.14 = struct_value () [concrete] // CHECK:STDOUT: %Sentinel.SubobjectDestroy.type.e2b: type = fn_type @Sentinel.SubobjectDestroy.2 [concrete] // CHECK:STDOUT: %Sentinel.SubobjectDestroy.21a: %Sentinel.SubobjectDestroy.type.e2b = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.48b6e9.2: = custom_witness (%Destroy.WithSelf.Op.403171.14, %Sentinel.SubobjectDestroy.21a, %Destroy.WithSelf.SelfDestruct.db3fdb.14), @Destroy [concrete] // CHECK:STDOUT: %facet_value.683: %CppRange_where.type.d682d6.1 = facet_value %DiffConstRange, (%custom_witness.7b4, %custom_witness.48b6e9.1, %custom_witness.0c0, %custom_witness.ffb, %custom_witness.fc2, %custom_witness.1bfa2a.1, %custom_witness.d0da43.1, %custom_witness.48b6e9.2) [concrete] // CHECK:STDOUT: %tuple.type.df5: type = tuple_type (%Iterator.a59, %Sentinel.b33) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.9: type = fn_type @Destroy.WithSelf.SubobjectDestroy.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.9: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.15: type = fn_type @Destroy.WithSelf.Op.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.15: %Destroy.WithSelf.Op.type.ef016f.15 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.15: type = fn_type @Destroy.WithSelf.SelfDestruct.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.15: %Destroy.WithSelf.SelfDestruct.type.fbceb5.15 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.9: = custom_witness (%Destroy.WithSelf.Op.403171.15, %Destroy.WithSelf.SubobjectDestroy.d01daf.9, %Destroy.WithSelf.SelfDestruct.db3fdb.15), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.206: %Destroy.type = facet_value %tuple.type.df5, (%custom_witness.f8f19d.9) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.9b4: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.683) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.4f6: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.683) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.3cd: %T.as_type.as.Iterate.impl.NewCursor.type.4f6 = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.885: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.683) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.d18: %T.as_type.as.Iterate.impl.Next.type.885 = struct_value () [concrete] // CHECK:STDOUT: %facet_value.1fc: %Iterate_where.type.b96 = facet_value %DiffConstRange, (%Iterate.impl_witness.9b4) [concrete] // CHECK:STDOUT: %r.patt.9c0: %pattern_type.7dd = ref_binding_pattern r [concrete] // CHECK:STDOUT: %r.param_patt.992: %pattern_type.7dd = var_param_pattern %r.patt.9c0 [concrete] // CHECK:STDOUT: %Iterate.facet.758: %Iterate.type = facet_value %DiffMutableRange, (%Iterate.impl_witness.606) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.49d: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.758) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.1f8: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.758) [concrete] // CHECK:STDOUT: %.c05: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.49d, %Iterate.facet.758 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn.1d2: = specific_function %T.as_type.as.Iterate.impl.NewCursor.a7b, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.4bb) [concrete] // CHECK:STDOUT: %.22d: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.1f8, %Iterate.facet.758 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn.288: = specific_function %T.as_type.as.Iterate.impl.Next.8ce, @T.as_type.as.Iterate.impl.Next(%facet_value.4bb) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.baf: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.645) [concrete] // CHECK:STDOUT: %.085: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.baf, %Destroy.facet.645 [concrete] // CHECK:STDOUT: %Iterate.facet.930: %Iterate.type = facet_value %DiffConstRange, (%Iterate.impl_witness.9b4) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.4f6: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.930) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.95d: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.930) [concrete] // CHECK:STDOUT: %.b0d: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.4f6, %Iterate.facet.930 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn.104: = specific_function %T.as_type.as.Iterate.impl.NewCursor.3cd, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.683) [concrete] // CHECK:STDOUT: %.d85: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.95d, %Iterate.facet.930 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn.8ee: = specific_function %T.as_type.as.Iterate.impl.Next.d18, @T.as_type.as.Iterate.impl.Next(%facet_value.683) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.ee6: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.206) [concrete] // CHECK:STDOUT: %.c1e: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.ee6, %Destroy.facet.206 [concrete] // CHECK:STDOUT: %complete_type.bfe: = complete_type_witness %tuple.type.b18 [concrete] // CHECK:STDOUT: %complete_type.ad6: = complete_type_witness %tuple.type.df5 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .DiffValueType = %DiffValueType.decl // CHECK:STDOUT: .DiffMutableRange = %DiffMutableRange.decl // CHECK:STDOUT: .DiffConstRange = %DiffConstRange.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.c82: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.3ea) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.f2f)] // CHECK:STDOUT: %Core.import_ref.29e: @Optional.%Optional.Get.type (%Optional.Get.type.786) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Get (constants.%Optional.Get.2d0)] // CHECK:STDOUT: %Core.import_ref.2e7: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.ade)] // CHECK:STDOUT: %Core.import_ref.ef4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.925) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f42)] // CHECK:STDOUT: %Core.import_ref.a20: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.760) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.268)] // CHECK:STDOUT: %Core.import_ref.af7: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.d28) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.f29)] // CHECK:STDOUT: %Core.import_ref.dd4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.2f2) = 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.884)] // CHECK:STDOUT: %Core.import_ref.554 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.2e7, %Core.import_ref.ef4, %Core.import_ref.a20, %Core.import_ref.af7, %Core.import_ref.dd4, %Core.import_ref.554), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.373: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.498] // CHECK:STDOUT: %Core.import_ref.e86: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.390] // CHECK:STDOUT: %Core.import_ref.eef: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.f93)] // CHECK:STDOUT: %Core.import_ref.fcc: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.9cd)] // CHECK:STDOUT: %Core.import_ref.946: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.8fb) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.8a1)] // CHECK:STDOUT: %Core.import_ref.cfb: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.d4a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.5a8)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.946, %Core.import_ref.cfb), @T.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %DiffValueType.decl: type = class_decl @DiffValueType [concrete = constants.%DiffValueType] {} {} // 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: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.b0d0 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.390: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = field_decl has_value, element1, %Core.import_ref.b0d0 in [concrete] {} // CHECK:STDOUT: %Core.import_ref.ab7 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.498: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = field_decl value, element0, %Core.import_ref.ab7 in [concrete] {} // CHECK:STDOUT: %DiffMutableRange.decl: type = class_decl @DiffMutableRange [concrete = constants.%DiffMutableRange] {} {} // CHECK:STDOUT: %DiffConstRange.decl: type = class_decl @DiffConstRange [concrete = constants.%DiffConstRange] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc44_33.1 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.2] { // CHECK:STDOUT: %self.param_patt: %pattern_type.98c = ref_param_pattern [concrete = constants.%self.param_patt.47c] // CHECK:STDOUT: %self.patt: %pattern_type.98c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.90b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.a18 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.a18 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.2: %Destroy.WithSelf.Op.type.ef016f.3 = fn_decl @Destroy.WithSelf.Op.loc44_33.1 [concrete = constants.%Destroy.WithSelf.Op.403171.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.98c = ref_param_pattern [concrete = constants.%self.param_patt.47c] // CHECK:STDOUT: %self.patt: %pattern_type.98c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.90b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.a18 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.a18 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc44_33.2 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.a71 = ref_param_pattern [concrete = constants.%self.param_patt.4d3] // CHECK:STDOUT: %self.patt: %pattern_type.a71 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.295] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.a77 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.a77 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.3: %Destroy.WithSelf.Op.type.ef016f.4 = fn_decl @Destroy.WithSelf.Op.loc44_33.2 [concrete = constants.%Destroy.WithSelf.Op.403171.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.a71 = ref_param_pattern [concrete = constants.%self.param_patt.4d3] // CHECK:STDOUT: %self.patt: %pattern_type.a71 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.295] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.a77 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.a77 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc44_33.3 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.4: %Destroy.WithSelf.Op.type.ef016f.5 = fn_decl @Destroy.WithSelf.Op.loc44_33.3 [concrete = constants.%Destroy.WithSelf.Op.403171.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc44_33.4 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.b94 = ref_param_pattern [concrete = constants.%self.param_patt.717] // CHECK:STDOUT: %self.patt: %pattern_type.b94 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.2d5] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.41d = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.41d = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.5: %Destroy.WithSelf.Op.type.ef016f.6 = fn_decl @Destroy.WithSelf.Op.loc44_33.4 [concrete = constants.%Destroy.WithSelf.Op.403171.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.b94 = ref_param_pattern [concrete = constants.%self.param_patt.717] // CHECK:STDOUT: %self.patt: %pattern_type.b94 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.2d5] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.41d = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.41d = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc44_33.5 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.555 = ref_param_pattern [concrete = constants.%self.param_patt.0b7] // CHECK:STDOUT: %self.patt: %pattern_type.555 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.c81] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.0d9 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.0d9 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.6: %Destroy.WithSelf.Op.type.ef016f.7 = fn_decl @Destroy.WithSelf.Op.loc44_33.5 [concrete = constants.%Destroy.WithSelf.Op.403171.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.555 = ref_param_pattern [concrete = constants.%self.param_patt.0b7] // CHECK:STDOUT: %self.patt: %pattern_type.555 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.c81] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.0d9 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.0d9 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc44_33.6 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.25e = ref_param_pattern [concrete = constants.%self.param_patt.a66] // CHECK:STDOUT: %self.patt: %pattern_type.25e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b7b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.c3f = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.c3f = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.7: %Destroy.WithSelf.Op.type.ef016f.8 = fn_decl @Destroy.WithSelf.Op.loc44_33.6 [concrete = constants.%Destroy.WithSelf.Op.403171.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.25e = ref_param_pattern [concrete = constants.%self.param_patt.a66] // CHECK:STDOUT: %self.patt: %pattern_type.25e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b7b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.c3f = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.c3f = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestIterate(%R.loc40_17.2: %Iterate_where.type.b96) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc40_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.d00)] // CHECK:STDOUT: %Iterate.facet.loc44_33.5: %Iterate.type = facet_value %R.as_type.loc40_79.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc44_33.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.b5e)] // CHECK:STDOUT: %.loc44_33.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc44_33.5 [symbolic = %.loc44_33.20 (constants.%.c17)] // CHECK:STDOUT: %impl.elem2.loc44_33.3: @TestIterate.%.loc44_33.20 (%.c17) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc44_33.3 (constants.%impl.elem2.3ea)] // CHECK:STDOUT: %specific_impl_fn.loc44_33.4: = specific_impl_function %impl.elem2.loc44_33.3, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc44_33.5) [symbolic = %specific_impl_fn.loc44_33.4 (constants.%specific_impl_fn.b2c)] // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc44_33.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.931)] // CHECK:STDOUT: %.loc44_33.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc44_33.5 [symbolic = %.loc44_33.21 (constants.%.c9b)] // CHECK:STDOUT: %impl.elem3.loc44_33.2: @TestIterate.%.loc44_33.21 (%.c9b) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc44_33.2 (constants.%impl.elem3.0ff)] // CHECK:STDOUT: %specific_impl_fn.loc44_33.5: = specific_impl_function %impl.elem3.loc44_33.2, @Iterate.WithSelf.Next(%Iterate.facet.loc44_33.5) [symbolic = %specific_impl_fn.loc44_33.5 (constants.%specific_impl_fn.20b)] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.SelfDestruct.type (constants.%Destroy.WithSelf.SelfDestruct.type.e70)] // CHECK:STDOUT: %.loc44_33.22: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type, %impl.elem1 [symbolic = %.loc44_33.22 (constants.%.99c)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.662)] // CHECK:STDOUT: %impl.elem2.loc44_33.4: @TestIterate.%.loc44_33.22 (%.99c) = impl_witness_access %Destroy.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc44_33.4 (constants.%impl.elem2.ff7)] // CHECK:STDOUT: %specific_impl_fn.loc44_33.6: = specific_impl_function %impl.elem2.loc44_33.4, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1) [symbolic = %specific_impl_fn.loc44_33.6 (constants.%specific_impl_fn.ffc)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: ref @TestIterate.%R.as_type.loc40_79.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.149 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: ref @TestIterate.%R.as_type.loc40_79.1 (%R.as_type) = name_ref r, %r // CHECK:STDOUT: %impl.elem2.loc44_33.1: @TestIterate.%.loc44_33.20 (%.c17) = impl_witness_access constants.%Iterate.lookup_impl_witness.d00, element2 [symbolic = %impl.elem2.loc44_33.3 (constants.%impl.elem2.3ea)] // CHECK:STDOUT: %bound_method.loc44_33.1: = bound_method %r.ref, %impl.elem2.loc44_33.1 // CHECK:STDOUT: %Iterate.facet.loc44_33.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.d00) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %.loc44_33.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_33.1 [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %Iterate.facet.loc44_33.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.d00) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %.loc44_33.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_33.2 [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %specific_impl_fn.loc44_33.1: = specific_impl_function %impl.elem2.loc44_33.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.f03) [symbolic = %specific_impl_fn.loc44_33.4 (constants.%specific_impl_fn.b2c)] // CHECK:STDOUT: %bound_method.loc44_33.2: = bound_method %r.ref, %specific_impl_fn.loc44_33.1 // CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.389) = var_storage invalid // CHECK:STDOUT: %.loc44_32.1: @TestIterate.%R.as_type.loc40_79.1 (%R.as_type) = acquire_value %r.ref // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.389) to %var = call %bound_method.loc44_33.2(%.loc44_32.1) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3.loc44_33.1: @TestIterate.%.loc44_33.21 (%.c9b) = impl_witness_access constants.%Iterate.lookup_impl_witness.d00, element3 [symbolic = %impl.elem3.loc44_33.2 (constants.%impl.elem3.0ff)] // CHECK:STDOUT: %bound_method.loc44_33.3: = bound_method %r.ref, %impl.elem3.loc44_33.1 // CHECK:STDOUT: %Iterate.facet.loc44_33.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.d00) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %.loc44_33.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_33.3 [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %Iterate.facet.loc44_33.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.d00) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %.loc44_33.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_33.4 [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.f03)] // CHECK:STDOUT: %.loc44_33.5: %Destroy.type = converted constants.%as_type.389, constants.%impl.elem1.fbc [symbolic = %impl.elem1 (constants.%impl.elem1.fbc)] // CHECK:STDOUT: %.loc44_33.6: %Destroy.type = converted constants.%as_type.389, constants.%impl.elem1.fbc [symbolic = %impl.elem1 (constants.%impl.elem1.fbc)] // CHECK:STDOUT: %specific_impl_fn.loc44_33.2: = specific_impl_function %impl.elem3.loc44_33.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.f03) [symbolic = %specific_impl_fn.loc44_33.5 (constants.%specific_impl_fn.20b)] // CHECK:STDOUT: %bound_method.loc44_33.4: = bound_method %r.ref, %specific_impl_fn.loc44_33.2 // CHECK:STDOUT: %.loc44_33.7: ref %Optional.c3f = temporary_storage // CHECK:STDOUT: %.loc44_32.2: @TestIterate.%R.as_type.loc40_79.1 (%R.as_type) = acquire_value %r.ref // CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.c3f to %.loc44_33.7 = call %bound_method.loc44_33.4(%.loc44_32.2, %var) // CHECK:STDOUT: %.loc44_33.8: ref %Optional.c3f = temporary %.loc44_33.7, %Iterate.WithSelf.Next.call // CHECK:STDOUT: %.loc44_33.9: %Optional.HasValue.type.f06 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.HasValue.660] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.f06 = name_ref HasValue, %.loc44_33.9 [concrete = constants.%Optional.HasValue.660] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc44_33.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.HasValue.specific_fn.68a] // CHECK:STDOUT: %bound_method.loc44_33.5: = bound_method %.loc44_33.8, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc44_33.10: %Optional.c3f = acquire_value %.loc44_33.8 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc44_33.5(%.loc44_33.10) // CHECK:STDOUT: %.loc44_33.11: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc44_33.12: bool = converted %Optional.HasValue.call, %.loc44_33.11 // CHECK:STDOUT: if %.loc44_33.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc44_33.13: %Optional.Get.type.acd = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.Get.a06] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.acd = name_ref Get, %.loc44_33.13 [concrete = constants.%Optional.Get.a06] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc44_33.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.Get.specific_fn.2e2] // CHECK:STDOUT: %bound_method.loc44_33.6: = bound_method %.loc44_33.8, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc44_33.14: ref %DiffValueType = temporary_storage // CHECK:STDOUT: %.loc44_33.15: %Optional.c3f = acquire_value %.loc44_33.8 // CHECK:STDOUT: %Optional.Get.call: init %DiffValueType to %.loc44_33.14 = call %bound_method.loc44_33.6(%.loc44_33.15) // CHECK:STDOUT: %.loc44_33.16: ref %DiffValueType = temporary %.loc44_33.14, %Optional.Get.call // CHECK:STDOUT: %.loc44_33.17: %DiffValueType = acquire_value %.loc44_33.16 // CHECK:STDOUT: %.loc44_14: type = splice_block %DiffValueType.ref.loc44 [concrete = constants.%DiffValueType] { // CHECK:STDOUT: %Cpp.ref.loc44: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %DiffValueType.ref.loc44: type = name_ref DiffValueType, imports.%DiffValueType.decl [concrete = constants.%DiffValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i: %DiffValueType = wrapper_binding i, %.loc44_33.17 // CHECK:STDOUT: %sum.ref: ref %DiffValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %DiffValueType = name_ref i, %i // CHECK:STDOUT: %.loc45_12: ref %DiffValueType = value_as_ref %i.ref // CHECK:STDOUT: %addr.loc45: %ptr.cd0 = addr_of %.loc45_12 // CHECK:STDOUT: %.loc45_9.1: %ptr.816 = as_compatible %addr.loc45 // CHECK:STDOUT: %.loc45_9.2: %ptr.816 = converted %addr.loc45, %.loc45_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %DiffValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc45_9.2) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc44_33.1: = bound_method %.loc44_33.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc44_33.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc44_33.1(%.loc44_33.16) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc44_33.2: = bound_method %.loc44_33.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc44_33.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc44_33.2(%.loc44_33.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc44_33.3: = bound_method %.loc44_33.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc44_33.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc44_33.3(%.loc44_33.8) // CHECK:STDOUT: %impl.elem2.loc44_33.2: @TestIterate.%.loc44_33.22 (%.99c) = impl_witness_access constants.%Destroy.lookup_impl_witness.662, element2 [symbolic = %impl.elem2.loc44_33.4 (constants.%impl.elem2.ff7)] // CHECK:STDOUT: %bound_method.loc44_33.7: = bound_method %var, %impl.elem2.loc44_33.2 // CHECK:STDOUT: %.loc44_33.18: %Destroy.type = converted constants.%as_type.389, constants.%impl.elem1.fbc [symbolic = %impl.elem1 (constants.%impl.elem1.fbc)] // CHECK:STDOUT: %.loc44_33.19: %Destroy.type = converted constants.%as_type.389, constants.%impl.elem1.fbc [symbolic = %impl.elem1 (constants.%impl.elem1.fbc)] // CHECK:STDOUT: %specific_impl_fn.loc44_33.3: = specific_impl_function %impl.elem2.loc44_33.2, @Destroy.WithSelf.SelfDestruct.1(constants.%impl.elem1.fbc) [symbolic = %specific_impl_fn.loc44_33.6 (constants.%specific_impl_fn.ffc)] // CHECK:STDOUT: %bound_method.loc44_33.8: = bound_method %var, %specific_impl_fn.loc44_33.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc44_33.4: init %empty_tuple.type = call %bound_method.loc44_33.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc44_33.1(%self.param: ref %.a18) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc44_33.1(%self.param: ref %.a18) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc44_33.1(%self.param: ref %.a18) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.2(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.1(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc44_33.2(%self.param: ref %MaybeUnformed.a77) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc44_33.2(%self.param: ref %MaybeUnformed.a77) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc44_33.2(%self.param: ref %MaybeUnformed.a77) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.3(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.2(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc44_33.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc44_33.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc44_33.3(%self.param: ref bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.4(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.3(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc44_33.4(%self.param: ref %struct_type.value.has_value.41d) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc44_33.1: ref bool = struct_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc44_33.1: = bound_method %.loc44_33.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc44_33.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc44_33.1(%.loc44_33.1) // CHECK:STDOUT: %.loc44_33.2: ref %MaybeUnformed.a77 = struct_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc44_33.2: = bound_method %.loc44_33.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc44_33.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc44_33.2(%.loc44_33.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc44_33.4(%self.param: ref %struct_type.value.has_value.41d) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc44_33.4(%self.param: ref %struct_type.value.has_value.41d) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.5(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.4(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc44_33.5(%self.param: ref %DefaultOptionalStorage.0d9) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %has_value.ref: %DefaultOptionalStorage.elem.793 = name_ref has_value, imports.%Core.import_ref.e86 [concrete = imports.%field_decl.390] // CHECK:STDOUT: %.loc44_33.1: ref bool = class_element_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc44_33.1: = bound_method %.loc44_33.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc44_33.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc44_33.1(%.loc44_33.1) // CHECK:STDOUT: %value.ref: %DefaultOptionalStorage.elem.45d = name_ref value, imports.%Core.import_ref.373 [concrete = imports.%field_decl.498] // CHECK:STDOUT: %.loc44_33.2: ref %MaybeUnformed.a77 = class_element_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc44_33.2: = bound_method %.loc44_33.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc44_33.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc44_33.2(%.loc44_33.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc44_33.5(%self.param: ref %DefaultOptionalStorage.0d9) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc44_33.5(%self.param: ref %DefaultOptionalStorage.0d9) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.6(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.5(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc44_33.6(%self.param: ref %Optional.c3f) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc44_33.6(%self.param: ref %Optional.c3f) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc44_33.6(%self.param: ref %Optional.c3f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.7(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.6(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @TestRangeFor(%m.param: ref %DiffMutableRange, %c.param: %DiffConstRange) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt.loc59: %pattern_type.149 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %m.ref: ref %DiffMutableRange = name_ref m, %m // CHECK:STDOUT: %impl.elem2.loc59: %.c05 = impl_witness_access constants.%Iterate.impl_witness.606, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.a7b] // CHECK:STDOUT: %bound_method.loc59_33.1: = bound_method %m.ref, %impl.elem2.loc59 // CHECK:STDOUT: %facet_value.loc59_33.1: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffMutableRange, (constants.%custom_witness.aa8, constants.%custom_witness.db9baa.1, constants.%custom_witness.392, constants.%custom_witness.1c9, constants.%custom_witness.b32, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.db9baa.2) [concrete = constants.%facet_value.4bb] // CHECK:STDOUT: %.loc59_33.1: %CppRange_where.type.d682d6.1 = converted constants.%DiffMutableRange, %facet_value.loc59_33.1 [concrete = constants.%facet_value.4bb] // CHECK:STDOUT: %facet_value.loc59_33.2: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffMutableRange, (constants.%custom_witness.aa8, constants.%custom_witness.db9baa.1, constants.%custom_witness.392, constants.%custom_witness.1c9, constants.%custom_witness.b32, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.db9baa.2) [concrete = constants.%facet_value.4bb] // CHECK:STDOUT: %.loc59_33.2: %CppRange_where.type.d682d6.1 = converted constants.%DiffMutableRange, %facet_value.loc59_33.2 [concrete = constants.%facet_value.4bb] // CHECK:STDOUT: %specific_fn.loc59_33.1: = specific_function %impl.elem2.loc59, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.4bb) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.1d2] // CHECK:STDOUT: %bound_method.loc59_33.2: = bound_method %m.ref, %specific_fn.loc59_33.1 // CHECK:STDOUT: %var.loc59: ref %tuple.type.b18 = var_storage invalid // CHECK:STDOUT: %.loc59_32.1: %DiffMutableRange = acquire_value %m.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call.loc59: init %tuple.type.b18 to %var.loc59 = call %bound_method.loc59_33.2(%.loc59_32.1) // CHECK:STDOUT: assign %var.loc59, %T.as_type.as.Iterate.impl.NewCursor.call.loc59 // CHECK:STDOUT: br !for.next.loc59 // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc59: // CHECK:STDOUT: %impl.elem3.loc59: %.22d = impl_witness_access constants.%Iterate.impl_witness.606, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.8ce] // CHECK:STDOUT: %bound_method.loc59_33.3: = bound_method %m.ref, %impl.elem3.loc59 // CHECK:STDOUT: %facet_value.loc59_33.3: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffMutableRange, (constants.%custom_witness.aa8, constants.%custom_witness.db9baa.1, constants.%custom_witness.392, constants.%custom_witness.1c9, constants.%custom_witness.b32, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.db9baa.2) [concrete = constants.%facet_value.4bb] // CHECK:STDOUT: %.loc59_33.3: %CppRange_where.type.d682d6.1 = converted constants.%DiffMutableRange, %facet_value.loc59_33.3 [concrete = constants.%facet_value.4bb] // CHECK:STDOUT: %facet_value.loc59_33.4: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffMutableRange, (constants.%custom_witness.aa8, constants.%custom_witness.db9baa.1, constants.%custom_witness.392, constants.%custom_witness.1c9, constants.%custom_witness.b32, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.db9baa.2) [concrete = constants.%facet_value.4bb] // CHECK:STDOUT: %.loc59_33.4: %CppRange_where.type.d682d6.1 = converted constants.%DiffMutableRange, %facet_value.loc59_33.4 [concrete = constants.%facet_value.4bb] // CHECK:STDOUT: %specific_fn.loc59_33.2: = specific_function %impl.elem3.loc59, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.4bb) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn.288] // CHECK:STDOUT: %bound_method.loc59_33.4: = bound_method %m.ref, %specific_fn.loc59_33.2 // CHECK:STDOUT: %.loc59_33.5: ref %Optional.c3f = temporary_storage // CHECK:STDOUT: %.loc59_32.2: %DiffMutableRange = acquire_value %m.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call.loc59: init %Optional.c3f to %.loc59_33.5 = call %bound_method.loc59_33.4(%.loc59_32.2, %var.loc59) // CHECK:STDOUT: %.loc59_33.6: ref %Optional.c3f = temporary %.loc59_33.5, %T.as_type.as.Iterate.impl.Next.call.loc59 // CHECK:STDOUT: %.loc59_33.7: %Optional.HasValue.type.f06 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.HasValue.660] // CHECK:STDOUT: %HasValue.ref.loc59: %Optional.HasValue.type.f06 = name_ref HasValue, %.loc59_33.7 [concrete = constants.%Optional.HasValue.660] // CHECK:STDOUT: %Optional.HasValue.bound.loc59: = bound_method %.loc59_33.6, %HasValue.ref.loc59 // CHECK:STDOUT: %Optional.HasValue.specific_fn.loc59: = specific_function %HasValue.ref.loc59, @Optional.HasValue(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.HasValue.specific_fn.68a] // CHECK:STDOUT: %bound_method.loc59_33.5: = bound_method %.loc59_33.6, %Optional.HasValue.specific_fn.loc59 // CHECK:STDOUT: %.loc59_33.8: %Optional.c3f = acquire_value %.loc59_33.6 // CHECK:STDOUT: %Optional.HasValue.call.loc59: init bool = call %bound_method.loc59_33.5(%.loc59_33.8) // CHECK:STDOUT: %.loc59_33.9: bool = value_of_initializer %Optional.HasValue.call.loc59 // CHECK:STDOUT: %.loc59_33.10: bool = converted %Optional.HasValue.call.loc59, %.loc59_33.9 // CHECK:STDOUT: if %.loc59_33.10 br !for.body.loc59 else br !for.done.loc59 // CHECK:STDOUT: // CHECK:STDOUT: !for.body.loc59: // CHECK:STDOUT: %.loc59_33.11: %Optional.Get.type.acd = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.Get.a06] // CHECK:STDOUT: %Get.ref.loc59: %Optional.Get.type.acd = name_ref Get, %.loc59_33.11 [concrete = constants.%Optional.Get.a06] // CHECK:STDOUT: %Optional.Get.bound.loc59: = bound_method %.loc59_33.6, %Get.ref.loc59 // CHECK:STDOUT: %Optional.Get.specific_fn.loc59: = specific_function %Get.ref.loc59, @Optional.Get(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.Get.specific_fn.2e2] // CHECK:STDOUT: %bound_method.loc59_33.6: = bound_method %.loc59_33.6, %Optional.Get.specific_fn.loc59 // CHECK:STDOUT: %.loc59_33.12: ref %DiffValueType = temporary_storage // CHECK:STDOUT: %.loc59_33.13: %Optional.c3f = acquire_value %.loc59_33.6 // CHECK:STDOUT: %Optional.Get.call.loc59: init %DiffValueType to %.loc59_33.12 = call %bound_method.loc59_33.6(%.loc59_33.13) // CHECK:STDOUT: %.loc59_33.14: ref %DiffValueType = temporary %.loc59_33.12, %Optional.Get.call.loc59 // CHECK:STDOUT: %.loc59_33.15: %DiffValueType = acquire_value %.loc59_33.14 // CHECK:STDOUT: %.loc59_14: type = splice_block %DiffValueType.ref.loc59 [concrete = constants.%DiffValueType] { // CHECK:STDOUT: %Cpp.ref.loc59: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %DiffValueType.ref.loc59: type = name_ref DiffValueType, imports.%DiffValueType.decl [concrete = constants.%DiffValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i.loc59: %DiffValueType = wrapper_binding i, %.loc59_33.15 // CHECK:STDOUT: %sum.ref.loc60: ref %DiffValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref.loc60: %DiffValueType = name_ref i, %i.loc59 // CHECK:STDOUT: %.loc60_12: ref %DiffValueType = value_as_ref %i.ref.loc60 // CHECK:STDOUT: %addr.loc60: %ptr.cd0 = addr_of %.loc60_12 // CHECK:STDOUT: %.loc60_9.1: %ptr.816 = as_compatible %addr.loc60 // CHECK:STDOUT: %.loc60_9.2: %ptr.816 = converted %addr.loc60, %.loc60_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call.loc60: ref %DiffValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref.loc60, %.loc60_9.2) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc59_33.1: = bound_method %.loc59_33.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc59_33.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc59_33.1(%.loc59_33.14) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc59_33.2: = bound_method %.loc59_33.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc59_33.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc59_33.2(%.loc59_33.6) // CHECK:STDOUT: br !for.next.loc59 // CHECK:STDOUT: // CHECK:STDOUT: !for.done.loc59: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc59_33.3: = bound_method %.loc59_33.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc59_33.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc59_33.3(%.loc59_33.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc59_33.4: = bound_method %var.loc59, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc59_33.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc59_33.4(%var.loc59) // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt.loc63: %pattern_type.149 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %DiffConstRange = name_ref c, %c // CHECK:STDOUT: %impl.elem2.loc63: %.b0d = impl_witness_access constants.%Iterate.impl_witness.9b4, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.3cd] // CHECK:STDOUT: %bound_method.loc63_33.1: = bound_method %c.ref, %impl.elem2.loc63 // CHECK:STDOUT: %facet_value.loc63_33.1: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffConstRange, (constants.%custom_witness.7b4, constants.%custom_witness.48b6e9.1, constants.%custom_witness.0c0, constants.%custom_witness.ffb, constants.%custom_witness.fc2, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.48b6e9.2) [concrete = constants.%facet_value.683] // CHECK:STDOUT: %.loc63_33.1: %CppRange_where.type.d682d6.1 = converted constants.%DiffConstRange, %facet_value.loc63_33.1 [concrete = constants.%facet_value.683] // CHECK:STDOUT: %facet_value.loc63_33.2: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffConstRange, (constants.%custom_witness.7b4, constants.%custom_witness.48b6e9.1, constants.%custom_witness.0c0, constants.%custom_witness.ffb, constants.%custom_witness.fc2, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.48b6e9.2) [concrete = constants.%facet_value.683] // CHECK:STDOUT: %.loc63_33.2: %CppRange_where.type.d682d6.1 = converted constants.%DiffConstRange, %facet_value.loc63_33.2 [concrete = constants.%facet_value.683] // CHECK:STDOUT: %specific_fn.loc63_33.1: = specific_function %impl.elem2.loc63, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.683) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.104] // CHECK:STDOUT: %bound_method.loc63_33.2: = bound_method %c.ref, %specific_fn.loc63_33.1 // CHECK:STDOUT: %var.loc63: ref %tuple.type.df5 = var_storage invalid // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call.loc63: init %tuple.type.df5 to %var.loc63 = call %bound_method.loc63_33.2(%c.ref) // CHECK:STDOUT: assign %var.loc63, %T.as_type.as.Iterate.impl.NewCursor.call.loc63 // CHECK:STDOUT: br !for.next.loc63 // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc63: // CHECK:STDOUT: %impl.elem3.loc63: %.d85 = impl_witness_access constants.%Iterate.impl_witness.9b4, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.d18] // CHECK:STDOUT: %bound_method.loc63_33.3: = bound_method %c.ref, %impl.elem3.loc63 // CHECK:STDOUT: %facet_value.loc63_33.3: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffConstRange, (constants.%custom_witness.7b4, constants.%custom_witness.48b6e9.1, constants.%custom_witness.0c0, constants.%custom_witness.ffb, constants.%custom_witness.fc2, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.48b6e9.2) [concrete = constants.%facet_value.683] // CHECK:STDOUT: %.loc63_33.3: %CppRange_where.type.d682d6.1 = converted constants.%DiffConstRange, %facet_value.loc63_33.3 [concrete = constants.%facet_value.683] // CHECK:STDOUT: %facet_value.loc63_33.4: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffConstRange, (constants.%custom_witness.7b4, constants.%custom_witness.48b6e9.1, constants.%custom_witness.0c0, constants.%custom_witness.ffb, constants.%custom_witness.fc2, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.48b6e9.2) [concrete = constants.%facet_value.683] // CHECK:STDOUT: %.loc63_33.4: %CppRange_where.type.d682d6.1 = converted constants.%DiffConstRange, %facet_value.loc63_33.4 [concrete = constants.%facet_value.683] // CHECK:STDOUT: %specific_fn.loc63_33.2: = specific_function %impl.elem3.loc63, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.683) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn.8ee] // CHECK:STDOUT: %bound_method.loc63_33.4: = bound_method %c.ref, %specific_fn.loc63_33.2 // CHECK:STDOUT: %.loc63_33.5: ref %Optional.c3f = temporary_storage // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call.loc63: init %Optional.c3f to %.loc63_33.5 = call %bound_method.loc63_33.4(%c.ref, %var.loc63) // CHECK:STDOUT: %.loc63_33.6: ref %Optional.c3f = temporary %.loc63_33.5, %T.as_type.as.Iterate.impl.Next.call.loc63 // CHECK:STDOUT: %.loc63_33.7: %Optional.HasValue.type.f06 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.HasValue.660] // CHECK:STDOUT: %HasValue.ref.loc63: %Optional.HasValue.type.f06 = name_ref HasValue, %.loc63_33.7 [concrete = constants.%Optional.HasValue.660] // CHECK:STDOUT: %Optional.HasValue.bound.loc63: = bound_method %.loc63_33.6, %HasValue.ref.loc63 // CHECK:STDOUT: %Optional.HasValue.specific_fn.loc63: = specific_function %HasValue.ref.loc63, @Optional.HasValue(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.HasValue.specific_fn.68a] // CHECK:STDOUT: %bound_method.loc63_33.5: = bound_method %.loc63_33.6, %Optional.HasValue.specific_fn.loc63 // CHECK:STDOUT: %.loc63_33.8: %Optional.c3f = acquire_value %.loc63_33.6 // CHECK:STDOUT: %Optional.HasValue.call.loc63: init bool = call %bound_method.loc63_33.5(%.loc63_33.8) // CHECK:STDOUT: %.loc63_33.9: bool = value_of_initializer %Optional.HasValue.call.loc63 // CHECK:STDOUT: %.loc63_33.10: bool = converted %Optional.HasValue.call.loc63, %.loc63_33.9 // CHECK:STDOUT: if %.loc63_33.10 br !for.body.loc63 else br !for.done.loc63 // CHECK:STDOUT: // CHECK:STDOUT: !for.body.loc63: // CHECK:STDOUT: %.loc63_33.11: %Optional.Get.type.acd = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.Get.a06] // CHECK:STDOUT: %Get.ref.loc63: %Optional.Get.type.acd = name_ref Get, %.loc63_33.11 [concrete = constants.%Optional.Get.a06] // CHECK:STDOUT: %Optional.Get.bound.loc63: = bound_method %.loc63_33.6, %Get.ref.loc63 // CHECK:STDOUT: %Optional.Get.specific_fn.loc63: = specific_function %Get.ref.loc63, @Optional.Get(constants.%OptionalStorage.facet.9e6) [concrete = constants.%Optional.Get.specific_fn.2e2] // CHECK:STDOUT: %bound_method.loc63_33.6: = bound_method %.loc63_33.6, %Optional.Get.specific_fn.loc63 // CHECK:STDOUT: %.loc63_33.12: ref %DiffValueType = temporary_storage // CHECK:STDOUT: %.loc63_33.13: %Optional.c3f = acquire_value %.loc63_33.6 // CHECK:STDOUT: %Optional.Get.call.loc63: init %DiffValueType to %.loc63_33.12 = call %bound_method.loc63_33.6(%.loc63_33.13) // CHECK:STDOUT: %.loc63_33.14: ref %DiffValueType = temporary %.loc63_33.12, %Optional.Get.call.loc63 // CHECK:STDOUT: %.loc63_33.15: %DiffValueType = acquire_value %.loc63_33.14 // CHECK:STDOUT: %.loc63_14: type = splice_block %DiffValueType.ref.loc63 [concrete = constants.%DiffValueType] { // CHECK:STDOUT: %Cpp.ref.loc63: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %DiffValueType.ref.loc63: type = name_ref DiffValueType, imports.%DiffValueType.decl [concrete = constants.%DiffValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i.loc63: %DiffValueType = wrapper_binding i, %.loc63_33.15 // CHECK:STDOUT: %sum.ref.loc64: ref %DiffValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref.loc64: %DiffValueType = name_ref i, %i.loc63 // CHECK:STDOUT: %.loc64_12: ref %DiffValueType = value_as_ref %i.ref.loc64 // CHECK:STDOUT: %addr.loc64: %ptr.cd0 = addr_of %.loc64_12 // CHECK:STDOUT: %.loc64_9.1: %ptr.816 = as_compatible %addr.loc64 // CHECK:STDOUT: %.loc64_9.2: %ptr.816 = converted %addr.loc64, %.loc64_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call.loc64: ref %DiffValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref.loc64, %.loc64_9.2) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc63_33.1: = bound_method %.loc63_33.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc63_33.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc63_33.1(%.loc63_33.14) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc63_33.2: = bound_method %.loc63_33.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc63_33.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc63_33.2(%.loc63_33.6) // CHECK:STDOUT: br !for.next.loc63 // CHECK:STDOUT: // CHECK:STDOUT: !for.done.loc63: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc63_33.3: = bound_method %.loc63_33.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc63_33.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc63_33.3(%.loc63_33.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc63_33.4: = bound_method %var.loc63, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.15 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc63_33.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc63_33.4(%var.loc63) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc40_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc40_17.1 => constants.%R // CHECK:STDOUT: %R.as_type.loc40_79.1 => constants.%R.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.dc2 // CHECK:STDOUT: %r.patt.loc40_77.2 => constants.%r.patt.917 // CHECK:STDOUT: %r.param_patt.loc40_72.2 => constants.%r.param_patt.9a1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.2c1) { // CHECK:STDOUT: %R.patt.loc40_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.2c1 // CHECK:STDOUT: %R.as_type.loc40_79.1 => constants.%DiffMutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.611 // CHECK:STDOUT: %r.patt.loc40_77.2 => constants.%r.patt.5fe // CHECK:STDOUT: %r.param_patt.loc40_72.2 => constants.%r.param_patt.a4b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc40 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.606 // CHECK:STDOUT: %Iterate.facet.loc44_33.5 => constants.%Iterate.facet.758 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.49d // CHECK:STDOUT: %.loc44_33.20 => constants.%.c05 // CHECK:STDOUT: %impl.elem2.loc44_33.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.a7b // CHECK:STDOUT: %specific_impl_fn.loc44_33.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.1d2 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.645 // CHECK:STDOUT: %as_type => constants.%tuple.type.b18 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.bfe // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.1f8 // CHECK:STDOUT: %.loc44_33.21 => constants.%.22d // CHECK:STDOUT: %impl.elem3.loc44_33.2 => constants.%T.as_type.as.Iterate.impl.Next.8ce // CHECK:STDOUT: %specific_impl_fn.loc44_33.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn.288 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.baf // CHECK:STDOUT: %.loc44_33.22 => constants.%.085 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.8 // CHECK:STDOUT: %impl.elem2.loc44_33.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: %specific_impl_fn.loc44_33.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.1fc) { // CHECK:STDOUT: %R.patt.loc40_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.1fc // CHECK:STDOUT: %R.as_type.loc40_79.1 => constants.%DiffConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dd // CHECK:STDOUT: %r.patt.loc40_77.2 => constants.%r.patt.9c0 // CHECK:STDOUT: %r.param_patt.loc40_72.2 => constants.%r.param_patt.992 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc40 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.9b4 // CHECK:STDOUT: %Iterate.facet.loc44_33.5 => constants.%Iterate.facet.930 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.4f6 // CHECK:STDOUT: %.loc44_33.20 => constants.%.b0d // CHECK:STDOUT: %impl.elem2.loc44_33.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.3cd // CHECK:STDOUT: %specific_impl_fn.loc44_33.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.104 // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.206 // CHECK:STDOUT: %as_type => constants.%tuple.type.df5 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.ad6 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.95d // CHECK:STDOUT: %.loc44_33.21 => constants.%.d85 // CHECK:STDOUT: %impl.elem3.loc44_33.2 => constants.%T.as_type.as.Iterate.impl.Next.d18 // CHECK:STDOUT: %specific_impl_fn.loc44_33.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn.8ee // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.ee6 // CHECK:STDOUT: %.loc44_33.22 => constants.%.c1e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.9 // CHECK:STDOUT: %impl.elem2.loc44_33.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.15 // CHECK:STDOUT: %specific_impl_fn.loc44_33.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.15 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- method_overloads.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: type: type = facet_type [concrete] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %facet_type.f48: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Get.type.786: type = fn_type @Optional.Get, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Get.2d0: %Optional.Get.type.786 = struct_value () [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.3ea: type = fn_type @Optional.HasValue, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.HasValue.f2f: %Optional.HasValue.type.3ea = struct_value () [symbolic] // CHECK:STDOUT: %T.283: %facet_type.f48 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.28a: = lookup_impl_witness %T.283, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.16e: %Destroy.type = facet_value %T.as_type.74b, (%Destroy.lookup_impl_witness.28a) [symbolic] // CHECK:STDOUT: %MaybeUnformed.91c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.16e) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.ade: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%T.283) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b49: type = unbound_element_type %DefaultOptionalStorage.ade, bool [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.229: type = unbound_element_type %DefaultOptionalStorage.ade, %MaybeUnformed.91c [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.type.2f2: type = fn_type @T.as_type.as.OptionalStorage.impl.Get, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.884: %T.as_type.as.OptionalStorage.impl.Get.type.2f2 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d28: 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.f29: %T.as_type.as.OptionalStorage.impl.Has.type.d28 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.type.760: type = fn_type @T.as_type.as.OptionalStorage.impl.Some, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.268: %T.as_type.as.OptionalStorage.impl.Some.type.760 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.925: 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.f42: %T.as_type.as.OptionalStorage.impl.None.type.925 = struct_value () [symbolic] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRange.type: type = facet_type <@CppRange> [concrete] // CHECK:STDOUT: %.Self.e0b: %CppRange.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.50b: = lookup_impl_witness %.Self.e0b, @CppRangeForIterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.32d: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.50b, element0 [symbolic_self] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.851: = lookup_impl_witness %impl.elem0.32d, @CppUnsafeDeref [symbolic_self] // CHECK:STDOUT: %impl.elem0.10d: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.851, element0 [symbolic_self] // CHECK:STDOUT: %CppRange_where.type.d682d6.1: type = facet_type <@CppRange where %impl.elem0.10d impls @Copy> [concrete] // CHECK:STDOUT: %T.f45530.2: %CppRange_where.type.d682d6.1 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.d4a: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.5a8: %T.as_type.as.Iterate.impl.Next.type.d4a = struct_value () [symbolic] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.b581a8.2: = lookup_impl_witness %T.f45530.2, @CppRangeForIterate [symbolic] // CHECK:STDOUT: %impl.elem0.5f971c.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element0 [symbolic] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.87e543.2: = lookup_impl_witness %impl.elem0.5f971c.2, @CppUnsafeDeref [symbolic] // CHECK:STDOUT: %impl.elem0.493765.2: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.87e543.2, element0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.8fb: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.8a1: %T.as_type.as.Iterate.impl.NewCursor.type.8fb = struct_value () [symbolic] // CHECK:STDOUT: %impl.elem1.c2dc15.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element1 [symbolic] // CHECK:STDOUT: %tuple.type.1ba: type = tuple_type (%impl.elem0.5f971c.2, %impl.elem1.c2dc15.2) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.812: = lookup_impl_witness %tuple.type.1ba, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.9cd: %Destroy.type = facet_value %tuple.type.1ba, (%Destroy.lookup_impl_witness.812) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [symbolic] // CHECK:STDOUT: %OverloadValueType: type = class_type @OverloadValueType [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.804: type = pattern_type %OverloadValueType [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc25_56 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc25_56 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %OverloadValueType.SubobjectDestroy.type: type = fn_type @OverloadValueType.SubobjectDestroy [concrete] // CHECK:STDOUT: %OverloadValueType.SubobjectDestroy: %OverloadValueType.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.1bfa2a.1: = custom_witness (%Destroy.WithSelf.Op.403171.2, %OverloadValueType.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.2), @Destroy [concrete] // CHECK:STDOUT: %OverloadValueType.Op.type: type = fn_type @OverloadValueType.Op [concrete] // CHECK:STDOUT: %OverloadValueType.Op: %OverloadValueType.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%OverloadValueType.Op), @Copy [concrete] // CHECK:STDOUT: %facet_value.8be: %facet_type.f48 = facet_value %OverloadValueType, (%custom_witness.1bfa2a.1, %custom_witness.d0da43.1) [concrete] // 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.2ee: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.8be> [concrete] // CHECK:STDOUT: %pattern_type.e15: type = pattern_type %Iterate_where.type.2ee [concrete] // CHECK:STDOUT: %R.patt: %pattern_type.e15 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R: %Iterate_where.type.2ee = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] // CHECK:STDOUT: %pattern_type.a47: type = pattern_type %R.as_type [symbolic] // CHECK:STDOUT: %r.patt.24d: %pattern_type.a47 = ref_binding_pattern r [symbolic] // CHECK:STDOUT: %r.param_patt.d5b: %pattern_type.a47 = var_param_pattern %r.patt.24d [symbolic] // CHECK:STDOUT: %_.patt.a10: %pattern_type.804 = value_binding_pattern _ [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.e07: = lookup_impl_witness %R, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.8b0: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.e07) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.13a: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.8b0) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.63b: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.8b0) [symbolic] // CHECK:STDOUT: %.d64: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.13a, %Iterate.facet.8b0 [symbolic] // CHECK:STDOUT: %impl.elem2.8fd: %.d64 = impl_witness_access %Iterate.lookup_impl_witness.e07, element2 [symbolic] // CHECK:STDOUT: %impl.elem1.0e3: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.e07, element1 [symbolic] // CHECK:STDOUT: %as_type.400: type = facet_access_type %impl.elem1.0e3 [symbolic] // CHECK:STDOUT: %specific_impl_fn.176: = specific_impl_function %impl.elem2.8fd, @Iterate.WithSelf.NewCursor(%Iterate.facet.8b0) [symbolic] // CHECK:STDOUT: %.6fa: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.63b, %Iterate.facet.8b0 [symbolic] // CHECK:STDOUT: %impl.elem3.a35: %.6fa = impl_witness_access %Iterate.lookup_impl_witness.e07, element3 [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.455: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.8be) [concrete] // CHECK:STDOUT: %OptionalStorage.impl_witness.774: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.8be) [concrete] // CHECK:STDOUT: %OptionalStorage.facet.f35: %OptionalStorage.type = facet_value %OverloadValueType, (%OptionalStorage.impl_witness.774) [concrete] // CHECK:STDOUT: %Optional.343: type = class_type @Optional, @Optional(%OptionalStorage.facet.f35) [concrete] // CHECK:STDOUT: %pattern_type.fea: type = pattern_type %Optional.343 [concrete] // CHECK:STDOUT: %specific_impl_fn.efd: = specific_impl_function %impl.elem3.a35, @Iterate.WithSelf.Next(%Iterate.facet.8b0) [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.8ad: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.f35) [concrete] // CHECK:STDOUT: %Optional.HasValue.1ff: %Optional.HasValue.type.8ad = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.481: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.f35) [concrete] // CHECK:STDOUT: %Optional.Get.3b7: %Optional.Get.type.481 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.facet.d74: %Destroy.type = facet_value %OverloadValueType, (%custom_witness.1bfa2a.1) [concrete] // CHECK:STDOUT: %MaybeUnformed.0ed: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.d74) [concrete] // CHECK:STDOUT: %.8a2: type = maybe_unformed_type %OverloadValueType [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.2c5: type = unbound_element_type %DefaultOptionalStorage.455, %MaybeUnformed.0ed [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.cd8: type = unbound_element_type %DefaultOptionalStorage.455, bool [concrete] // CHECK:STDOUT: %struct_type.value.has_value.43a: type = struct_type {.value: %MaybeUnformed.0ed, .has_value: bool} [concrete] // CHECK:STDOUT: %Optional.HasValue.specific_fn.9b3: = specific_function %Optional.HasValue.1ff, @Optional.HasValue(%OptionalStorage.facet.f35) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn.dd9: = specific_function %Optional.Get.3b7, @Optional.Get(%OptionalStorage.facet.f35) [concrete] // CHECK:STDOUT: %pattern_type.6ff: type = pattern_type %.8a2 [concrete] // CHECK:STDOUT: %self.param_patt.b76: %pattern_type.6ff = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.079: %pattern_type.6ff = wrapper_binding_pattern self, %self.param_patt.b76 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc27_37.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc27_37.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.93e: type = pattern_type %MaybeUnformed.0ed [concrete] // CHECK:STDOUT: %self.param_patt.faa: %pattern_type.93e = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.0f8: %pattern_type.93e = wrapper_binding_pattern self, %self.param_patt.faa [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc27_37.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.4: type = fn_type @Destroy.WithSelf.Op.loc27_37.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.4: %Destroy.WithSelf.Op.type.ef016f.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4: type = fn_type @Destroy.WithSelf.SelfDestruct.loc27_37.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.4: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.40d: %pattern_type.831 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.560: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt.40d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc27_37.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.5: type = fn_type @Destroy.WithSelf.Op.loc27_37.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.5: %Destroy.WithSelf.Op.type.ef016f.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5: type = fn_type @Destroy.WithSelf.SelfDestruct.loc27_37.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.5: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.ef2: type = pattern_type %struct_type.value.has_value.43a [concrete] // CHECK:STDOUT: %self.param_patt.c33: %pattern_type.ef2 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.4b9: %pattern_type.ef2 = wrapper_binding_pattern self, %self.param_patt.c33 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc27_37.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc27_37.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.6c4: type = pattern_type %DefaultOptionalStorage.455 [concrete] // CHECK:STDOUT: %self.param_patt.c76: %pattern_type.6c4 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.433: %pattern_type.6c4 = wrapper_binding_pattern self, %self.param_patt.c76 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc27_37.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc27_37.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.ff7: %pattern_type.fea = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.19c: %pattern_type.fea = wrapper_binding_pattern self, %self.param_patt.ff7 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc27_37.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.8: type = fn_type @Destroy.WithSelf.Op.loc27_37.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.8: %Destroy.WithSelf.Op.type.ef016f.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8: type = fn_type @Destroy.WithSelf.SelfDestruct.loc27_37.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.8: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.a78: = lookup_impl_witness %impl.elem1.0e3, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.45d: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1.0e3) [symbolic] // CHECK:STDOUT: %.817: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.45d, %impl.elem1.0e3 [symbolic] // CHECK:STDOUT: %impl.elem2.25c: %.817 = impl_witness_access %Destroy.lookup_impl_witness.a78, element2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.26e: = specific_impl_function %impl.elem2.25c, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1.0e3) [symbolic] // CHECK:STDOUT: %Range: type = class_type @Range [concrete] // CHECK:STDOUT: %pattern_type.23f: type = pattern_type %Range [concrete] // CHECK:STDOUT: %Iterator: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %Range.Begin.type: type = fn_type @Range.Begin [concrete] // CHECK:STDOUT: %Range.Begin: %Range.Begin.type = struct_value () [concrete] // CHECK:STDOUT: %Range.End.type: type = fn_type @Range.End [concrete] // CHECK:STDOUT: %Range.End: %Range.End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.090: = custom_witness (%Iterator, %Iterator, %Range.Begin, %Range.End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.9: type = fn_type @Destroy.WithSelf.Op.loc32 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.9: %Destroy.WithSelf.Op.type.ef016f.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9: type = fn_type @Destroy.WithSelf.SelfDestruct.loc32 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.9: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type: type = fn_type @Iterator.SubobjectDestroy [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy: %Iterator.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.eaa: = custom_witness (%Destroy.WithSelf.Op.403171.9, %Iterator.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.9), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.4232e0.1: type = fn_type @Iterator.Op.1 [concrete] // CHECK:STDOUT: %Iterator.Op.e8caec.1: %Iterator.Op.type.4232e0.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.6bd: = custom_witness (%OverloadValueType, %Iterator.Op.e8caec.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.4232e0.2: type = fn_type @Iterator.Op.2 [concrete] // CHECK:STDOUT: %Iterator.Op.e8caec.2: %Iterator.Op.type.4232e0.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.716: = custom_witness (%Iterator.Op.e8caec.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type: type = fn_type @NotEqual [concrete] // CHECK:STDOUT: %NotEqual: %NotEqual.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f93: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Iterator) [concrete] // CHECK:STDOUT: %facet_value.8e3: %CppRange_where.type.d682d6.1 = facet_value %Range, (%custom_witness.090, %custom_witness.eaa, %custom_witness.6bd, %custom_witness.716, %custom_witness.f93, %custom_witness.1bfa2a.1, %custom_witness.d0da43.1, %custom_witness.eaa) [concrete] // CHECK:STDOUT: %tuple.type.9ef: type = tuple_type (%Iterator, %Iterator) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8: type = fn_type @Destroy.WithSelf.SubobjectDestroy.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.8: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.10: type = fn_type @Destroy.WithSelf.Op.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.10: %Destroy.WithSelf.Op.type.ef016f.10 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10: type = fn_type @Destroy.WithSelf.SelfDestruct.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.10: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.8: = custom_witness (%Destroy.WithSelf.Op.403171.10, %Destroy.WithSelf.SubobjectDestroy.d01daf.8, %Destroy.WithSelf.SelfDestruct.db3fdb.10), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.c69: %Destroy.type = facet_value %tuple.type.9ef, (%custom_witness.f8f19d.8) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.e03: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.8e3) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.549: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.8e3) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.60e: %T.as_type.as.Iterate.impl.NewCursor.type.549 = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.c07: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.8e3) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.23c: %T.as_type.as.Iterate.impl.Next.type.c07 = struct_value () [concrete] // CHECK:STDOUT: %facet_value.637: %Iterate_where.type.2ee = facet_value %Range, (%Iterate.impl_witness.e03) [concrete] // CHECK:STDOUT: %r.patt.b9f: %pattern_type.23f = ref_binding_pattern r [concrete] // CHECK:STDOUT: %r.param_patt.466: %pattern_type.23f = var_param_pattern %r.patt.b9f [concrete] // CHECK:STDOUT: %Iterate.facet.a3e: %Iterate.type = facet_value %Range, (%Iterate.impl_witness.e03) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.b10: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.a3e) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.42b: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.a3e) [concrete] // CHECK:STDOUT: %.f2a: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.b10, %Iterate.facet.a3e [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.60e, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.8e3) [concrete] // CHECK:STDOUT: %.96e: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.42b, %Iterate.facet.a3e [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.23c, @T.as_type.as.Iterate.impl.Next(%facet_value.8e3) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.106: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.c69) [concrete] // CHECK:STDOUT: %.227: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.106, %Destroy.facet.c69 [concrete] // CHECK:STDOUT: %complete_type.e35: = complete_type_witness %tuple.type.9ef [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .OverloadValueType = %OverloadValueType.decl // CHECK:STDOUT: .Range = %Range.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.c82: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.3ea) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.f2f)] // CHECK:STDOUT: %Core.import_ref.29e: @Optional.%Optional.Get.type (%Optional.Get.type.786) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Get (constants.%Optional.Get.2d0)] // CHECK:STDOUT: %Core.import_ref.2e7: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.ade)] // CHECK:STDOUT: %Core.import_ref.ef4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.925) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f42)] // CHECK:STDOUT: %Core.import_ref.a20: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.760) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.268)] // CHECK:STDOUT: %Core.import_ref.af7: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.d28) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.f29)] // CHECK:STDOUT: %Core.import_ref.dd4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.2f2) = 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.884)] // CHECK:STDOUT: %Core.import_ref.554 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.2e7, %Core.import_ref.ef4, %Core.import_ref.a20, %Core.import_ref.af7, %Core.import_ref.dd4, %Core.import_ref.554), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.373: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.498] // CHECK:STDOUT: %Core.import_ref.e86: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.390] // CHECK:STDOUT: %Core.import_ref.eef: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.f93)] // CHECK:STDOUT: %Core.import_ref.fcc: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.9cd)] // CHECK:STDOUT: %Core.import_ref.946: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.8fb) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.8a1)] // CHECK:STDOUT: %Core.import_ref.cfb: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.d4a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.5a8)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.946, %Core.import_ref.cfb), @T.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %OverloadValueType.decl: type = class_decl @OverloadValueType [concrete = constants.%OverloadValueType] {} {} // CHECK:STDOUT: %Core.import_ref.b0d0 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.390: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = field_decl has_value, element1, %Core.import_ref.b0d0 in [concrete] {} // CHECK:STDOUT: %Core.import_ref.ab7 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.498: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = field_decl value, element0, %Core.import_ref.ab7 in [concrete] {} // CHECK:STDOUT: %Range.decl: type = class_decl @Range [concrete = constants.%Range] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc27_37.1 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.2] { // CHECK:STDOUT: %self.param_patt: %pattern_type.6ff = ref_param_pattern [concrete = constants.%self.param_patt.b76] // CHECK:STDOUT: %self.patt: %pattern_type.6ff = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.079] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.8a2 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.8a2 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.2: %Destroy.WithSelf.Op.type.ef016f.3 = fn_decl @Destroy.WithSelf.Op.loc27_37.1 [concrete = constants.%Destroy.WithSelf.Op.403171.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.6ff = ref_param_pattern [concrete = constants.%self.param_patt.b76] // CHECK:STDOUT: %self.patt: %pattern_type.6ff = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.079] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.8a2 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.8a2 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc27_37.2 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.93e = ref_param_pattern [concrete = constants.%self.param_patt.faa] // CHECK:STDOUT: %self.patt: %pattern_type.93e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.0f8] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.0ed = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.0ed = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.3: %Destroy.WithSelf.Op.type.ef016f.4 = fn_decl @Destroy.WithSelf.Op.loc27_37.2 [concrete = constants.%Destroy.WithSelf.Op.403171.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.93e = ref_param_pattern [concrete = constants.%self.param_patt.faa] // CHECK:STDOUT: %self.patt: %pattern_type.93e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.0f8] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.0ed = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.0ed = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc27_37.3 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.4: %Destroy.WithSelf.Op.type.ef016f.5 = fn_decl @Destroy.WithSelf.Op.loc27_37.3 [concrete = constants.%Destroy.WithSelf.Op.403171.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc27_37.4 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.ef2 = ref_param_pattern [concrete = constants.%self.param_patt.c33] // CHECK:STDOUT: %self.patt: %pattern_type.ef2 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.4b9] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.43a = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.43a = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.5: %Destroy.WithSelf.Op.type.ef016f.6 = fn_decl @Destroy.WithSelf.Op.loc27_37.4 [concrete = constants.%Destroy.WithSelf.Op.403171.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.ef2 = ref_param_pattern [concrete = constants.%self.param_patt.c33] // CHECK:STDOUT: %self.patt: %pattern_type.ef2 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.4b9] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.43a = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.43a = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc27_37.5 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.6c4 = ref_param_pattern [concrete = constants.%self.param_patt.c76] // CHECK:STDOUT: %self.patt: %pattern_type.6c4 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.433] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.455 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.455 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.6: %Destroy.WithSelf.Op.type.ef016f.7 = fn_decl @Destroy.WithSelf.Op.loc27_37.5 [concrete = constants.%Destroy.WithSelf.Op.403171.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.6c4 = ref_param_pattern [concrete = constants.%self.param_patt.c76] // CHECK:STDOUT: %self.patt: %pattern_type.6c4 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.433] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.455 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.455 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc27_37.6 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.fea = ref_param_pattern [concrete = constants.%self.param_patt.ff7] // CHECK:STDOUT: %self.patt: %pattern_type.fea = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.19c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.343 = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.343 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.7: %Destroy.WithSelf.Op.type.ef016f.8 = fn_decl @Destroy.WithSelf.Op.loc27_37.6 [concrete = constants.%Destroy.WithSelf.Op.403171.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.fea = ref_param_pattern [concrete = constants.%self.param_patt.ff7] // CHECK:STDOUT: %self.patt: %pattern_type.fea = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.19c] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.343 = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.343 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestIterate(%R.loc25_17.2: %Iterate_where.type.2ee) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc25_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.e07)] // CHECK:STDOUT: %Iterate.facet.loc27_37.5: %Iterate.type = facet_value %R.as_type.loc25_83.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc27_37.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.13a)] // CHECK:STDOUT: %.loc27_37.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc27_37.5 [symbolic = %.loc27_37.20 (constants.%.d64)] // CHECK:STDOUT: %impl.elem2.loc27_37.3: @TestIterate.%.loc27_37.20 (%.d64) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc27_37.3 (constants.%impl.elem2.8fd)] // CHECK:STDOUT: %specific_impl_fn.loc27_37.4: = specific_impl_function %impl.elem2.loc27_37.3, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc27_37.5) [symbolic = %specific_impl_fn.loc27_37.4 (constants.%specific_impl_fn.176)] // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc27_37.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.63b)] // CHECK:STDOUT: %.loc27_37.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc27_37.5 [symbolic = %.loc27_37.21 (constants.%.6fa)] // CHECK:STDOUT: %impl.elem3.loc27_37.2: @TestIterate.%.loc27_37.21 (%.6fa) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc27_37.2 (constants.%impl.elem3.a35)] // CHECK:STDOUT: %specific_impl_fn.loc27_37.5: = specific_impl_function %impl.elem3.loc27_37.2, @Iterate.WithSelf.Next(%Iterate.facet.loc27_37.5) [symbolic = %specific_impl_fn.loc27_37.5 (constants.%specific_impl_fn.efd)] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.SelfDestruct.type (constants.%Destroy.WithSelf.SelfDestruct.type.45d)] // CHECK:STDOUT: %.loc27_37.22: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type, %impl.elem1 [symbolic = %.loc27_37.22 (constants.%.817)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.a78)] // CHECK:STDOUT: %impl.elem2.loc27_37.4: @TestIterate.%.loc27_37.22 (%.817) = impl_witness_access %Destroy.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc27_37.4 (constants.%impl.elem2.25c)] // CHECK:STDOUT: %specific_impl_fn.loc27_37.6: = specific_impl_function %impl.elem2.loc27_37.4, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1) [symbolic = %specific_impl_fn.loc27_37.6 (constants.%specific_impl_fn.26e)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: ref @TestIterate.%R.as_type.loc25_83.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %_.patt: %pattern_type.804 = value_binding_pattern _ [concrete = constants.%_.patt.a10] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: ref @TestIterate.%R.as_type.loc25_83.1 (%R.as_type) = name_ref r, %r // CHECK:STDOUT: %impl.elem2.loc27_37.1: @TestIterate.%.loc27_37.20 (%.d64) = impl_witness_access constants.%Iterate.lookup_impl_witness.e07, element2 [symbolic = %impl.elem2.loc27_37.3 (constants.%impl.elem2.8fd)] // CHECK:STDOUT: %bound_method.loc27_37.1: = bound_method %r.ref, %impl.elem2.loc27_37.1 // CHECK:STDOUT: %Iterate.facet.loc27_37.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e07) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %.loc27_37.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_37.1 [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %Iterate.facet.loc27_37.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e07) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %.loc27_37.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_37.2 [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %specific_impl_fn.loc27_37.1: = specific_impl_function %impl.elem2.loc27_37.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.8b0) [symbolic = %specific_impl_fn.loc27_37.4 (constants.%specific_impl_fn.176)] // CHECK:STDOUT: %bound_method.loc27_37.2: = bound_method %r.ref, %specific_impl_fn.loc27_37.1 // CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.400) = var_storage invalid // CHECK:STDOUT: %.loc27_36.1: @TestIterate.%R.as_type.loc25_83.1 (%R.as_type) = acquire_value %r.ref // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.400) to %var = call %bound_method.loc27_37.2(%.loc27_36.1) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3.loc27_37.1: @TestIterate.%.loc27_37.21 (%.6fa) = impl_witness_access constants.%Iterate.lookup_impl_witness.e07, element3 [symbolic = %impl.elem3.loc27_37.2 (constants.%impl.elem3.a35)] // CHECK:STDOUT: %bound_method.loc27_37.3: = bound_method %r.ref, %impl.elem3.loc27_37.1 // CHECK:STDOUT: %Iterate.facet.loc27_37.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e07) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %.loc27_37.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_37.3 [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %Iterate.facet.loc27_37.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e07) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %.loc27_37.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_37.4 [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.8b0)] // CHECK:STDOUT: %.loc27_37.5: %Destroy.type = converted constants.%as_type.400, constants.%impl.elem1.0e3 [symbolic = %impl.elem1 (constants.%impl.elem1.0e3)] // CHECK:STDOUT: %.loc27_37.6: %Destroy.type = converted constants.%as_type.400, constants.%impl.elem1.0e3 [symbolic = %impl.elem1 (constants.%impl.elem1.0e3)] // CHECK:STDOUT: %specific_impl_fn.loc27_37.2: = specific_impl_function %impl.elem3.loc27_37.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.8b0) [symbolic = %specific_impl_fn.loc27_37.5 (constants.%specific_impl_fn.efd)] // CHECK:STDOUT: %bound_method.loc27_37.4: = bound_method %r.ref, %specific_impl_fn.loc27_37.2 // CHECK:STDOUT: %.loc27_37.7: ref %Optional.343 = temporary_storage // CHECK:STDOUT: %.loc27_36.2: @TestIterate.%R.as_type.loc25_83.1 (%R.as_type) = acquire_value %r.ref // CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.343 to %.loc27_37.7 = call %bound_method.loc27_37.4(%.loc27_36.2, %var) // CHECK:STDOUT: %.loc27_37.8: ref %Optional.343 = temporary %.loc27_37.7, %Iterate.WithSelf.Next.call // CHECK:STDOUT: %.loc27_37.9: %Optional.HasValue.type.8ad = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.f35) [concrete = constants.%Optional.HasValue.1ff] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.8ad = name_ref HasValue, %.loc27_37.9 [concrete = constants.%Optional.HasValue.1ff] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc27_37.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.f35) [concrete = constants.%Optional.HasValue.specific_fn.9b3] // CHECK:STDOUT: %bound_method.loc27_37.5: = bound_method %.loc27_37.8, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc27_37.10: %Optional.343 = acquire_value %.loc27_37.8 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc27_37.5(%.loc27_37.10) // CHECK:STDOUT: %.loc27_37.11: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc27_37.12: bool = converted %Optional.HasValue.call, %.loc27_37.11 // CHECK:STDOUT: if %.loc27_37.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc27_37.13: %Optional.Get.type.481 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.f35) [concrete = constants.%Optional.Get.3b7] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.481 = name_ref Get, %.loc27_37.13 [concrete = constants.%Optional.Get.3b7] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc27_37.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.f35) [concrete = constants.%Optional.Get.specific_fn.dd9] // CHECK:STDOUT: %bound_method.loc27_37.6: = bound_method %.loc27_37.8, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc27_37.14: ref %OverloadValueType = temporary_storage // CHECK:STDOUT: %.loc27_37.15: %Optional.343 = acquire_value %.loc27_37.8 // CHECK:STDOUT: %Optional.Get.call: init %OverloadValueType to %.loc27_37.14 = call %bound_method.loc27_37.6(%.loc27_37.15) // CHECK:STDOUT: %.loc27_37.16: ref %OverloadValueType = temporary %.loc27_37.14, %Optional.Get.call // CHECK:STDOUT: %.loc27_37.17: %OverloadValueType = acquire_value %.loc27_37.16 // CHECK:STDOUT: %.loc27_14: type = splice_block %OverloadValueType.ref.loc27 [concrete = constants.%OverloadValueType] { // CHECK:STDOUT: %Cpp.ref.loc27: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %OverloadValueType.ref.loc27: type = name_ref OverloadValueType, imports.%OverloadValueType.decl [concrete = constants.%OverloadValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %_: %OverloadValueType = wrapper_binding _, %.loc27_37.17 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc27_37.1: = bound_method %.loc27_37.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc27_37.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc27_37.1(%.loc27_37.16) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc27_37.2: = bound_method %.loc27_37.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc27_37.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc27_37.2(%.loc27_37.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc27_37.3: = bound_method %.loc27_37.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc27_37.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc27_37.3(%.loc27_37.8) // CHECK:STDOUT: %impl.elem2.loc27_37.2: @TestIterate.%.loc27_37.22 (%.817) = impl_witness_access constants.%Destroy.lookup_impl_witness.a78, element2 [symbolic = %impl.elem2.loc27_37.4 (constants.%impl.elem2.25c)] // CHECK:STDOUT: %bound_method.loc27_37.7: = bound_method %var, %impl.elem2.loc27_37.2 // CHECK:STDOUT: %.loc27_37.18: %Destroy.type = converted constants.%as_type.400, constants.%impl.elem1.0e3 [symbolic = %impl.elem1 (constants.%impl.elem1.0e3)] // CHECK:STDOUT: %.loc27_37.19: %Destroy.type = converted constants.%as_type.400, constants.%impl.elem1.0e3 [symbolic = %impl.elem1 (constants.%impl.elem1.0e3)] // CHECK:STDOUT: %specific_impl_fn.loc27_37.3: = specific_impl_function %impl.elem2.loc27_37.2, @Destroy.WithSelf.SelfDestruct.1(constants.%impl.elem1.0e3) [symbolic = %specific_impl_fn.loc27_37.6 (constants.%specific_impl_fn.26e)] // CHECK:STDOUT: %bound_method.loc27_37.8: = bound_method %var, %specific_impl_fn.loc27_37.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc27_37.4: init %empty_tuple.type = call %bound_method.loc27_37.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc27_37.1(%self.param: ref %.8a2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc27_37.1(%self.param: ref %.8a2) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc27_37.1(%self.param: ref %.8a2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.2(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.1(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc27_37.2(%self.param: ref %MaybeUnformed.0ed) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc27_37.2(%self.param: ref %MaybeUnformed.0ed) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc27_37.2(%self.param: ref %MaybeUnformed.0ed) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.3(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.2(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc27_37.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc27_37.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc27_37.3(%self.param: ref bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.4(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.3(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc27_37.4(%self.param: ref %struct_type.value.has_value.43a) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc27_37.1: ref bool = struct_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc27_37.1: = bound_method %.loc27_37.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc27_37.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc27_37.1(%.loc27_37.1) // CHECK:STDOUT: %.loc27_37.2: ref %MaybeUnformed.0ed = struct_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc27_37.2: = bound_method %.loc27_37.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc27_37.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc27_37.2(%.loc27_37.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc27_37.4(%self.param: ref %struct_type.value.has_value.43a) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc27_37.4(%self.param: ref %struct_type.value.has_value.43a) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.5(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.4(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc27_37.5(%self.param: ref %DefaultOptionalStorage.455) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %has_value.ref: %DefaultOptionalStorage.elem.cd8 = name_ref has_value, imports.%Core.import_ref.e86 [concrete = imports.%field_decl.390] // CHECK:STDOUT: %.loc27_37.1: ref bool = class_element_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc27_37.1: = bound_method %.loc27_37.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc27_37.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc27_37.1(%.loc27_37.1) // CHECK:STDOUT: %value.ref: %DefaultOptionalStorage.elem.2c5 = name_ref value, imports.%Core.import_ref.373 [concrete = imports.%field_decl.498] // CHECK:STDOUT: %.loc27_37.2: ref %MaybeUnformed.0ed = class_element_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc27_37.2: = bound_method %.loc27_37.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc27_37.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc27_37.2(%.loc27_37.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc27_37.5(%self.param: ref %DefaultOptionalStorage.455) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc27_37.5(%self.param: ref %DefaultOptionalStorage.455) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.6(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.5(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc27_37.6(%self.param: ref %Optional.343) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc27_37.6(%self.param: ref %Optional.343) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc27_37.6(%self.param: ref %Optional.343) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.7(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.6(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @TestRangeFor(%r.param: ref %Range) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %_.patt: %pattern_type.804 = value_binding_pattern _ [concrete = constants.%_.patt.a10] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: ref %Range = name_ref r, %r // CHECK:STDOUT: %impl.elem2: %.f2a = impl_witness_access constants.%Iterate.impl_witness.e03, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.60e] // CHECK:STDOUT: %bound_method.loc37_37.1: = bound_method %r.ref, %impl.elem2 // CHECK:STDOUT: %facet_value.loc37_37.1: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.090, constants.%custom_witness.eaa, constants.%custom_witness.6bd, constants.%custom_witness.716, constants.%custom_witness.f93, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.eaa) [concrete = constants.%facet_value.8e3] // CHECK:STDOUT: %.loc37_37.1: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_37.1 [concrete = constants.%facet_value.8e3] // CHECK:STDOUT: %facet_value.loc37_37.2: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.090, constants.%custom_witness.eaa, constants.%custom_witness.6bd, constants.%custom_witness.716, constants.%custom_witness.f93, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.eaa) [concrete = constants.%facet_value.8e3] // CHECK:STDOUT: %.loc37_37.2: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_37.2 [concrete = constants.%facet_value.8e3] // CHECK:STDOUT: %specific_fn.loc37_37.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.8e3) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] // CHECK:STDOUT: %bound_method.loc37_37.2: = bound_method %r.ref, %specific_fn.loc37_37.1 // CHECK:STDOUT: %var: ref %tuple.type.9ef = var_storage invalid // CHECK:STDOUT: %.loc37_36.1: %Range = acquire_value %r.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.9ef to %var = call %bound_method.loc37_37.2(%.loc37_36.1) // CHECK:STDOUT: assign %var, %T.as_type.as.Iterate.impl.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3: %.96e = impl_witness_access constants.%Iterate.impl_witness.e03, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.23c] // CHECK:STDOUT: %bound_method.loc37_37.3: = bound_method %r.ref, %impl.elem3 // CHECK:STDOUT: %facet_value.loc37_37.3: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.090, constants.%custom_witness.eaa, constants.%custom_witness.6bd, constants.%custom_witness.716, constants.%custom_witness.f93, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.eaa) [concrete = constants.%facet_value.8e3] // CHECK:STDOUT: %.loc37_37.3: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_37.3 [concrete = constants.%facet_value.8e3] // CHECK:STDOUT: %facet_value.loc37_37.4: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.090, constants.%custom_witness.eaa, constants.%custom_witness.6bd, constants.%custom_witness.716, constants.%custom_witness.f93, constants.%custom_witness.1bfa2a.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.eaa) [concrete = constants.%facet_value.8e3] // CHECK:STDOUT: %.loc37_37.4: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_37.4 [concrete = constants.%facet_value.8e3] // CHECK:STDOUT: %specific_fn.loc37_37.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.8e3) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] // CHECK:STDOUT: %bound_method.loc37_37.4: = bound_method %r.ref, %specific_fn.loc37_37.2 // CHECK:STDOUT: %.loc37_37.5: ref %Optional.343 = temporary_storage // CHECK:STDOUT: %.loc37_36.2: %Range = acquire_value %r.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.343 to %.loc37_37.5 = call %bound_method.loc37_37.4(%.loc37_36.2, %var) // CHECK:STDOUT: %.loc37_37.6: ref %Optional.343 = temporary %.loc37_37.5, %T.as_type.as.Iterate.impl.Next.call // CHECK:STDOUT: %.loc37_37.7: %Optional.HasValue.type.8ad = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.f35) [concrete = constants.%Optional.HasValue.1ff] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.8ad = name_ref HasValue, %.loc37_37.7 [concrete = constants.%Optional.HasValue.1ff] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc37_37.6, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.f35) [concrete = constants.%Optional.HasValue.specific_fn.9b3] // CHECK:STDOUT: %bound_method.loc37_37.5: = bound_method %.loc37_37.6, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc37_37.8: %Optional.343 = acquire_value %.loc37_37.6 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc37_37.5(%.loc37_37.8) // CHECK:STDOUT: %.loc37_37.9: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc37_37.10: bool = converted %Optional.HasValue.call, %.loc37_37.9 // CHECK:STDOUT: if %.loc37_37.10 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc37_37.11: %Optional.Get.type.481 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.f35) [concrete = constants.%Optional.Get.3b7] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.481 = name_ref Get, %.loc37_37.11 [concrete = constants.%Optional.Get.3b7] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc37_37.6, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.f35) [concrete = constants.%Optional.Get.specific_fn.dd9] // CHECK:STDOUT: %bound_method.loc37_37.6: = bound_method %.loc37_37.6, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc37_37.12: ref %OverloadValueType = temporary_storage // CHECK:STDOUT: %.loc37_37.13: %Optional.343 = acquire_value %.loc37_37.6 // CHECK:STDOUT: %Optional.Get.call: init %OverloadValueType to %.loc37_37.12 = call %bound_method.loc37_37.6(%.loc37_37.13) // CHECK:STDOUT: %.loc37_37.14: ref %OverloadValueType = temporary %.loc37_37.12, %Optional.Get.call // CHECK:STDOUT: %.loc37_37.15: %OverloadValueType = acquire_value %.loc37_37.14 // CHECK:STDOUT: %.loc37_14: type = splice_block %OverloadValueType.ref [concrete = constants.%OverloadValueType] { // CHECK:STDOUT: %Cpp.ref.loc37: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %OverloadValueType.ref: type = name_ref OverloadValueType, imports.%OverloadValueType.decl [concrete = constants.%OverloadValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %_: %OverloadValueType = wrapper_binding _, %.loc37_37.15 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc37_37.1: = bound_method %.loc37_37.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc37_37.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc37_37.1(%.loc37_37.14) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc37_37.2: = bound_method %.loc37_37.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc37_37.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc37_37.2(%.loc37_37.6) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc37_37.3: = bound_method %.loc37_37.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc37_37.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc37_37.3(%.loc37_37.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc37_37.4: = bound_method %var, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc37_37.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc37_37.4(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc25_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc25_17.1 => constants.%R // CHECK:STDOUT: %R.as_type.loc25_83.1 => constants.%R.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.a47 // CHECK:STDOUT: %r.patt.loc25_81.2 => constants.%r.patt.24d // CHECK:STDOUT: %r.param_patt.loc25_76.2 => constants.%r.param_patt.d5b // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.637) { // CHECK:STDOUT: %R.patt.loc25_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc25_17.1 => constants.%facet_value.637 // CHECK:STDOUT: %R.as_type.loc25_83.1 => constants.%Range // CHECK:STDOUT: %pattern_type => constants.%pattern_type.23f // CHECK:STDOUT: %r.patt.loc25_81.2 => constants.%r.patt.b9f // CHECK:STDOUT: %r.param_patt.loc25_76.2 => constants.%r.param_patt.466 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc25 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.e03 // CHECK:STDOUT: %Iterate.facet.loc27_37.5 => constants.%Iterate.facet.a3e // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.b10 // CHECK:STDOUT: %.loc27_37.20 => constants.%.f2a // CHECK:STDOUT: %impl.elem2.loc27_37.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.60e // CHECK:STDOUT: %specific_impl_fn.loc27_37.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.c69 // CHECK:STDOUT: %as_type => constants.%tuple.type.9ef // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.e35 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.42b // CHECK:STDOUT: %.loc27_37.21 => constants.%.96e // CHECK:STDOUT: %impl.elem3.loc27_37.2 => constants.%T.as_type.as.Iterate.impl.Next.23c // CHECK:STDOUT: %specific_impl_fn.loc27_37.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.106 // CHECK:STDOUT: %.loc27_37.22 => constants.%.227 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.8 // CHECK:STDOUT: %impl.elem2.loc27_37.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: %specific_impl_fn.loc27_37.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- adl_return_same_types.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: type: type = facet_type [concrete] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %facet_type.f48: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Get.type.786: type = fn_type @Optional.Get, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Get.2d0: %Optional.Get.type.786 = struct_value () [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.3ea: type = fn_type @Optional.HasValue, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.HasValue.f2f: %Optional.HasValue.type.3ea = struct_value () [symbolic] // CHECK:STDOUT: %T.283: %facet_type.f48 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.28a: = lookup_impl_witness %T.283, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.16e: %Destroy.type = facet_value %T.as_type.74b, (%Destroy.lookup_impl_witness.28a) [symbolic] // CHECK:STDOUT: %MaybeUnformed.91c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.16e) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.ade: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%T.283) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b49: type = unbound_element_type %DefaultOptionalStorage.ade, bool [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.229: type = unbound_element_type %DefaultOptionalStorage.ade, %MaybeUnformed.91c [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.type.2f2: type = fn_type @T.as_type.as.OptionalStorage.impl.Get, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.884: %T.as_type.as.OptionalStorage.impl.Get.type.2f2 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d28: 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.f29: %T.as_type.as.OptionalStorage.impl.Has.type.d28 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.type.760: type = fn_type @T.as_type.as.OptionalStorage.impl.Some, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.268: %T.as_type.as.OptionalStorage.impl.Some.type.760 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.925: 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.f42: %T.as_type.as.OptionalStorage.impl.None.type.925 = struct_value () [symbolic] // CHECK:STDOUT: %N.fe9: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRange.type: type = facet_type <@CppRange> [concrete] // CHECK:STDOUT: %.Self.e0b: %CppRange.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.50b: = lookup_impl_witness %.Self.e0b, @CppRangeForIterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.32d: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.50b, element0 [symbolic_self] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.851: = lookup_impl_witness %impl.elem0.32d, @CppUnsafeDeref [symbolic_self] // CHECK:STDOUT: %impl.elem0.10d: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.851, element0 [symbolic_self] // CHECK:STDOUT: %CppRange_where.type.d682d6.1: type = facet_type <@CppRange where %impl.elem0.10d impls @Copy> [concrete] // CHECK:STDOUT: %T.f45530.2: %CppRange_where.type.d682d6.1 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.d4a: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.5a8: %T.as_type.as.Iterate.impl.Next.type.d4a = struct_value () [symbolic] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.b581a8.2: = lookup_impl_witness %T.f45530.2, @CppRangeForIterate [symbolic] // CHECK:STDOUT: %impl.elem0.5f971c.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element0 [symbolic] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.87e543.2: = lookup_impl_witness %impl.elem0.5f971c.2, @CppUnsafeDeref [symbolic] // CHECK:STDOUT: %impl.elem0.493765.2: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.87e543.2, element0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.8fb: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.8a1: %T.as_type.as.Iterate.impl.NewCursor.type.8fb = struct_value () [symbolic] // CHECK:STDOUT: %impl.elem1.c2dc15.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element1 [symbolic] // CHECK:STDOUT: %tuple.type.1ba: type = tuple_type (%impl.elem0.5f971c.2, %impl.elem1.c2dc15.2) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.812: = lookup_impl_witness %tuple.type.1ba, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.9cd: %Destroy.type = facet_value %tuple.type.1ba, (%Destroy.lookup_impl_witness.812) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [symbolic] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.761: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.667: type = pattern_type %f64.761 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc20 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc20 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc20 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.2: = custom_witness (%Destroy.WithSelf.Op.403171.2, %Destroy.WithSelf.SubobjectDestroy.d01daf.2, %Destroy.WithSelf.SelfDestruct.db3fdb.2), @Destroy [concrete] // CHECK:STDOUT: %Float.as.Copy.impl.Op.type.e8d: type = fn_type @Float.as.Copy.impl.Op, @Float.as.Copy.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %Float.as.Copy.impl.Op.fe9: %Float.as.Copy.impl.Op.type.e8d = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.eac: = impl_witness imports.%Copy.impl_witness_table.14d, @Float.as.Copy.impl(%int_64) [concrete] // CHECK:STDOUT: %facet_value.1d1: %facet_type.f48 = facet_value %f64.761, (%custom_witness.f8f19d.2, %Copy.impl_witness.eac) [concrete] // 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.11d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.1d1> [concrete] // CHECK:STDOUT: %pattern_type.999: type = pattern_type %Iterate_where.type.11d [concrete] // CHECK:STDOUT: %R.patt: %pattern_type.999 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R: %Iterate_where.type.11d = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] // CHECK:STDOUT: %pattern_type.874: type = pattern_type %R.as_type [symbolic] // CHECK:STDOUT: %r.param_patt.ef5: %pattern_type.874 = value_param_pattern [symbolic] // CHECK:STDOUT: %r.patt.c43: %pattern_type.874 = wrapper_binding_pattern r, %r.param_patt.ef5 [symbolic] // CHECK:STDOUT: %i.patt: %pattern_type.667 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.e7e: = lookup_impl_witness %R, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.a43: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.e7e) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.248: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.a43) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.9a9: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.a43) [symbolic] // CHECK:STDOUT: %.678: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.248, %Iterate.facet.a43 [symbolic] // CHECK:STDOUT: %impl.elem2.e3e: %.678 = impl_witness_access %Iterate.lookup_impl_witness.e7e, element2 [symbolic] // CHECK:STDOUT: %impl.elem1.2af: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.e7e, element1 [symbolic] // CHECK:STDOUT: %as_type.ba7: type = facet_access_type %impl.elem1.2af [symbolic] // CHECK:STDOUT: %specific_impl_fn.0ea: = specific_impl_function %impl.elem2.e3e, @Iterate.WithSelf.NewCursor(%Iterate.facet.a43) [symbolic] // CHECK:STDOUT: %.fe7: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.9a9, %Iterate.facet.a43 [symbolic] // CHECK:STDOUT: %impl.elem3.ae5: %.fe7 = impl_witness_access %Iterate.lookup_impl_witness.e7e, element3 [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.6ea: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.1d1) [concrete] // CHECK:STDOUT: %OptionalStorage.impl_witness.49d: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.1d1) [concrete] // CHECK:STDOUT: %OptionalStorage.facet.d7a: %OptionalStorage.type = facet_value %f64.761, (%OptionalStorage.impl_witness.49d) [concrete] // CHECK:STDOUT: %Optional.000: type = class_type @Optional, @Optional(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %pattern_type.40d: type = pattern_type %Optional.000 [concrete] // CHECK:STDOUT: %specific_impl_fn.493: = specific_impl_function %impl.elem3.ae5, @Iterate.WithSelf.Next(%Iterate.facet.a43) [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.92f: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %Optional.HasValue.ff5: %Optional.HasValue.type.92f = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.695: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %Optional.Get.62a: %Optional.Get.type.695 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.facet.bb7: %Destroy.type = facet_value %f64.761, (%custom_witness.f8f19d.2) [concrete] // CHECK:STDOUT: %MaybeUnformed.912: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.bb7) [concrete] // CHECK:STDOUT: %.ecc: type = maybe_unformed_type %f64.761 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.9ab: type = unbound_element_type %DefaultOptionalStorage.6ea, %MaybeUnformed.912 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b33: type = unbound_element_type %DefaultOptionalStorage.6ea, bool [concrete] // CHECK:STDOUT: %struct_type.value.has_value.82f: type = struct_type {.value: %MaybeUnformed.912, .has_value: bool} [concrete] // CHECK:STDOUT: %Optional.HasValue.specific_fn.315: = specific_function %Optional.HasValue.ff5, @Optional.HasValue(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn.570: = specific_function %Optional.Get.62a, @Optional.Get(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %AddAssignWith.type.0c5: type = facet_type <@AddAssignWith, @AddAssignWith(%f64.761)> [concrete] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.type.763: type = fn_type @Float.as.AddAssignWith.impl.Op, @Float.as.AddAssignWith.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.8aa: %Float.as.AddAssignWith.impl.Op.type.763 = struct_value () [symbolic] // CHECK:STDOUT: %AddAssignWith.impl_witness.5c7: = impl_witness imports.%AddAssignWith.impl_witness_table, @Float.as.AddAssignWith.impl(%int_64) [concrete] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.type.f20: type = fn_type @Float.as.AddAssignWith.impl.Op, @Float.as.AddAssignWith.impl(%int_64) [concrete] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.e04: %Float.as.AddAssignWith.impl.Op.type.f20 = struct_value () [concrete] // CHECK:STDOUT: %AddAssignWith.facet: %AddAssignWith.type.0c5 = facet_value %f64.761, (%AddAssignWith.impl_witness.5c7) [concrete] // CHECK:STDOUT: %AddAssignWith.WithSelf.Op.type.bb6: type = fn_type @AddAssignWith.WithSelf.Op, @AddAssignWith.WithSelf(%f64.761, %AddAssignWith.facet) [concrete] // CHECK:STDOUT: %.48b: type = fn_type_with_self_type %AddAssignWith.WithSelf.Op.type.bb6, %AddAssignWith.facet [concrete] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Float.as.AddAssignWith.impl.Op.e04, @Float.as.AddAssignWith.impl.Op(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.d8c: type = pattern_type %.ecc [concrete] // CHECK:STDOUT: %self.param_patt.5ca: %pattern_type.d8c = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.1f3: %pattern_type.d8c = wrapper_binding_pattern self, %self.param_patt.5ca [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_19.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc24_19.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.007: type = pattern_type %MaybeUnformed.912 [concrete] // CHECK:STDOUT: %self.param_patt.6cf: %pattern_type.007 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.b4d: %pattern_type.007 = wrapper_binding_pattern self, %self.param_patt.6cf [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.4: type = fn_type @Destroy.WithSelf.Op.loc24_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.4: %Destroy.WithSelf.Op.type.ef016f.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.4: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.40d: %pattern_type.831 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.560: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt.40d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.5: type = fn_type @Destroy.WithSelf.Op.loc24_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.5: %Destroy.WithSelf.Op.type.ef016f.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.5: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.28d: type = pattern_type %struct_type.value.has_value.82f [concrete] // CHECK:STDOUT: %self.param_patt.f24: %pattern_type.28d = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.396: %pattern_type.28d = wrapper_binding_pattern self, %self.param_patt.f24 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_19.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc24_19.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.ee1: type = pattern_type %DefaultOptionalStorage.6ea [concrete] // CHECK:STDOUT: %self.param_patt.d5d: %pattern_type.ee1 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.aa9: %pattern_type.ee1 = wrapper_binding_pattern self, %self.param_patt.d5d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_19.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc24_19.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.4ac: %pattern_type.40d = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.1ec: %pattern_type.40d = wrapper_binding_pattern self, %self.param_patt.4ac [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc24_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.8: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.8: type = fn_type @Destroy.WithSelf.Op.loc24_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.8: %Destroy.WithSelf.Op.type.ef016f.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8: type = fn_type @Destroy.WithSelf.SelfDestruct.loc24_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.8: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.cb1: = lookup_impl_witness %impl.elem1.2af, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.a48: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1.2af) [symbolic] // CHECK:STDOUT: %.421: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.a48, %impl.elem1.2af [symbolic] // CHECK:STDOUT: %impl.elem2.f8d: %.421 = impl_witness_access %Destroy.lookup_impl_witness.cb1, element2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.6a1: = specific_impl_function %impl.elem2.f8d, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1.2af) [symbolic] // CHECK:STDOUT: %ConstRange: type = class_type @ConstRange [concrete] // CHECK:STDOUT: %pattern_type.025: type = pattern_type %ConstRange [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Iterator: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %Begin.type: type = fn_type @Begin [concrete] // CHECK:STDOUT: %Begin: %Begin.type = struct_value () [concrete] // CHECK:STDOUT: %End.type: type = fn_type @End [concrete] // CHECK:STDOUT: %End: %End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.5d5: = custom_witness (%Iterator, %Iterator, %Begin, %End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.9: type = fn_type @Destroy.WithSelf.Op.loc31 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.9: %Destroy.WithSelf.Op.type.ef016f.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9: type = fn_type @Destroy.WithSelf.SelfDestruct.loc31 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.9: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type: type = fn_type @Iterator.SubobjectDestroy [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy: %Iterator.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.b76: = custom_witness (%Destroy.WithSelf.Op.403171.9, %Iterator.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.9), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.ac7e09.1: type = fn_type @Iterator.Op.1 [concrete] // CHECK:STDOUT: %Iterator.Op.583fda.1: %Iterator.Op.type.ac7e09.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f6f: = custom_witness (%f64.761, %Iterator.Op.583fda.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.ac7e09.2: type = fn_type @Iterator.Op.2 [concrete] // CHECK:STDOUT: %Iterator.Op.583fda.2: %Iterator.Op.type.ac7e09.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.393: = custom_witness (%Iterator.Op.583fda.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type: type = fn_type @NotEqual [concrete] // CHECK:STDOUT: %NotEqual: %NotEqual.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.eb7: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Iterator) [concrete] // CHECK:STDOUT: %facet_value.120: %CppRange_where.type.d682d6.1 = facet_value %ConstRange, (%custom_witness.5d5, %custom_witness.b76, %custom_witness.f6f, %custom_witness.393, %custom_witness.eb7, %custom_witness.f8f19d.2, %Copy.impl_witness.eac, %custom_witness.b76) [concrete] // CHECK:STDOUT: %tuple.type.005: type = tuple_type (%Iterator, %Iterator) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.9: type = fn_type @Destroy.WithSelf.SubobjectDestroy.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.9: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.10: type = fn_type @Destroy.WithSelf.Op.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.10: %Destroy.WithSelf.Op.type.ef016f.10 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10: type = fn_type @Destroy.WithSelf.SelfDestruct.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.10: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.9: = custom_witness (%Destroy.WithSelf.Op.403171.10, %Destroy.WithSelf.SubobjectDestroy.d01daf.9, %Destroy.WithSelf.SelfDestruct.db3fdb.10), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.362: %Destroy.type = facet_value %tuple.type.005, (%custom_witness.f8f19d.9) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.a53: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.120) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.35f: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.120) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.1ed: %T.as_type.as.Iterate.impl.NewCursor.type.35f = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.6c4: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.120) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.9ad: %T.as_type.as.Iterate.impl.Next.type.6c4 = struct_value () [concrete] // CHECK:STDOUT: %facet_value.36b: %Iterate_where.type.11d = facet_value %ConstRange, (%Iterate.impl_witness.a53) [concrete] // CHECK:STDOUT: %r.param_patt.a73: %pattern_type.025 = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.0b5: %pattern_type.025 = wrapper_binding_pattern r, %r.param_patt.a73 [concrete] // CHECK:STDOUT: %Iterate.facet.1a5: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.a53) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.793: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.1a5) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.c0d: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.1a5) [concrete] // CHECK:STDOUT: %.588: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.793, %Iterate.facet.1a5 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.1ed, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.120) [concrete] // CHECK:STDOUT: %.7bd: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.c0d, %Iterate.facet.1a5 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.9ad, @T.as_type.as.Iterate.impl.Next(%facet_value.120) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.dd4: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.362) [concrete] // CHECK:STDOUT: %.38e: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.dd4, %Destroy.facet.362 [concrete] // CHECK:STDOUT: %complete_type.320: = complete_type_witness %tuple.type.005 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core.import_ref.c82: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.3ea) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.f2f)] // CHECK:STDOUT: %Core.import_ref.29e: @Optional.%Optional.Get.type (%Optional.Get.type.786) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Get (constants.%Optional.Get.2d0)] // CHECK:STDOUT: %Core.import_ref.2e7: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.ade)] // CHECK:STDOUT: %Core.import_ref.ef4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.925) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f42)] // CHECK:STDOUT: %Core.import_ref.a20: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.760) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.268)] // CHECK:STDOUT: %Core.import_ref.af7: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.d28) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.f29)] // CHECK:STDOUT: %Core.import_ref.dd4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.2f2) = 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.884)] // CHECK:STDOUT: %Core.import_ref.554 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.2e7, %Core.import_ref.ef4, %Core.import_ref.a20, %Core.import_ref.af7, %Core.import_ref.dd4, %Core.import_ref.554), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.373: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.498] // CHECK:STDOUT: %Core.import_ref.e86: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.390] // CHECK:STDOUT: %Core.import_ref.eef: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.f93)] // CHECK:STDOUT: %Core.import_ref.fcc: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.9cd)] // CHECK:STDOUT: %Core.import_ref.946: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.8fb) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.8a1)] // CHECK:STDOUT: %Core.import_ref.cfb: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.d4a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.5a8)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.946, %Core.import_ref.cfb), @T.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %Core.import_ref.19b: @Float.as.Copy.impl.%Float.as.Copy.impl.Op.type (%Float.as.Copy.impl.Op.type.e8d) = 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.fe9)] // CHECK:STDOUT: %Copy.impl_witness_table.14d = impl_witness_table (%Core.import_ref.19b), @Float.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.e0d0: @Float.as.AddAssignWith.impl.%Float.as.AddAssignWith.impl.Op.type (%Float.as.AddAssignWith.impl.Op.type.763) = 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.8aa)] // CHECK:STDOUT: %AddAssignWith.impl_witness_table = impl_witness_table (%Core.import_ref.e0d0), @Float.as.AddAssignWith.impl [concrete] // CHECK:STDOUT: %Core.import_ref.b0d0 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.390: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = field_decl has_value, element1, %Core.import_ref.b0d0 in [concrete] {} // CHECK:STDOUT: %Core.import_ref.ab7 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.498: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = field_decl value, element0, %Core.import_ref.ab7 in [concrete] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc24_19.1 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.d8c = ref_param_pattern [concrete = constants.%self.param_patt.5ca] // CHECK:STDOUT: %self.patt: %pattern_type.d8c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1f3] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.ecc = ref_param call_param0 // CHECK:STDOUT: %self: ref %.ecc = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.2: %Destroy.WithSelf.Op.type.ef016f.3 = fn_decl @Destroy.WithSelf.Op.loc24_19.1 [concrete = constants.%Destroy.WithSelf.Op.403171.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.d8c = ref_param_pattern [concrete = constants.%self.param_patt.5ca] // CHECK:STDOUT: %self.patt: %pattern_type.d8c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1f3] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.ecc = ref_param call_param0 // CHECK:STDOUT: %self: ref %.ecc = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc24_19.2 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.007 = ref_param_pattern [concrete = constants.%self.param_patt.6cf] // CHECK:STDOUT: %self.patt: %pattern_type.007 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b4d] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.912 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.912 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.3: %Destroy.WithSelf.Op.type.ef016f.4 = fn_decl @Destroy.WithSelf.Op.loc24_19.2 [concrete = constants.%Destroy.WithSelf.Op.403171.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.007 = ref_param_pattern [concrete = constants.%self.param_patt.6cf] // CHECK:STDOUT: %self.patt: %pattern_type.007 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b4d] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.912 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.912 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc24_19.3 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.4: %Destroy.WithSelf.Op.type.ef016f.5 = fn_decl @Destroy.WithSelf.Op.loc24_19.3 [concrete = constants.%Destroy.WithSelf.Op.403171.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc24_19.4 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.28d = ref_param_pattern [concrete = constants.%self.param_patt.f24] // CHECK:STDOUT: %self.patt: %pattern_type.28d = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.396] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.82f = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.82f = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.5: %Destroy.WithSelf.Op.type.ef016f.6 = fn_decl @Destroy.WithSelf.Op.loc24_19.4 [concrete = constants.%Destroy.WithSelf.Op.403171.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.28d = ref_param_pattern [concrete = constants.%self.param_patt.f24] // CHECK:STDOUT: %self.patt: %pattern_type.28d = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.396] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.82f = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.82f = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc24_19.5 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.ee1 = ref_param_pattern [concrete = constants.%self.param_patt.d5d] // CHECK:STDOUT: %self.patt: %pattern_type.ee1 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.aa9] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.6ea = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.6ea = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.6: %Destroy.WithSelf.Op.type.ef016f.7 = fn_decl @Destroy.WithSelf.Op.loc24_19.5 [concrete = constants.%Destroy.WithSelf.Op.403171.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.ee1 = ref_param_pattern [concrete = constants.%self.param_patt.d5d] // CHECK:STDOUT: %self.patt: %pattern_type.ee1 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.aa9] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.6ea = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.6ea = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc24_19.6 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.40d = ref_param_pattern [concrete = constants.%self.param_patt.4ac] // CHECK:STDOUT: %self.patt: %pattern_type.40d = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1ec] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.000 = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.000 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.7: %Destroy.WithSelf.Op.type.ef016f.8 = fn_decl @Destroy.WithSelf.Op.loc24_19.6 [concrete = constants.%Destroy.WithSelf.Op.403171.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.40d = ref_param_pattern [concrete = constants.%self.param_patt.4ac] // CHECK:STDOUT: %self.patt: %pattern_type.40d = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1ec] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.000 = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.000 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestIterate(%R.loc20_17.2: %Iterate_where.type.11d) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc20_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.e7e)] // CHECK:STDOUT: %Iterate.facet.loc24_19.5: %Iterate.type = facet_value %R.as_type.loc20_61.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc24_19.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.248)] // CHECK:STDOUT: %.loc24_19.19: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc24_19.5 [symbolic = %.loc24_19.19 (constants.%.678)] // CHECK:STDOUT: %impl.elem2.loc24_19.3: @TestIterate.%.loc24_19.19 (%.678) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc24_19.3 (constants.%impl.elem2.e3e)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.4: = specific_impl_function %impl.elem2.loc24_19.3, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc24_19.5) [symbolic = %specific_impl_fn.loc24_19.4 (constants.%specific_impl_fn.0ea)] // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc24_19.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.9a9)] // CHECK:STDOUT: %.loc24_19.20: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc24_19.5 [symbolic = %.loc24_19.20 (constants.%.fe7)] // CHECK:STDOUT: %impl.elem3.loc24_19.2: @TestIterate.%.loc24_19.20 (%.fe7) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc24_19.2 (constants.%impl.elem3.ae5)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.5: = specific_impl_function %impl.elem3.loc24_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc24_19.5) [symbolic = %specific_impl_fn.loc24_19.5 (constants.%specific_impl_fn.493)] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.SelfDestruct.type (constants.%Destroy.WithSelf.SelfDestruct.type.a48)] // CHECK:STDOUT: %.loc24_19.21: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type, %impl.elem1 [symbolic = %.loc24_19.21 (constants.%.421)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.cb1)] // CHECK:STDOUT: %impl.elem2.loc24_19.4: @TestIterate.%.loc24_19.21 (%.421) = impl_witness_access %Destroy.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc24_19.4 (constants.%impl.elem2.f8d)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.6: = specific_impl_function %impl.elem2.loc24_19.4, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1) [symbolic = %specific_impl_fn.loc24_19.6 (constants.%specific_impl_fn.6a1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc20_61.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.667 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc20_61.1 (%R.as_type) = name_ref r, %r // CHECK:STDOUT: %impl.elem2.loc24_19.1: @TestIterate.%.loc24_19.19 (%.678) = impl_witness_access constants.%Iterate.lookup_impl_witness.e7e, element2 [symbolic = %impl.elem2.loc24_19.3 (constants.%impl.elem2.e3e)] // CHECK:STDOUT: %bound_method.loc24_19.1: = bound_method %r.ref, %impl.elem2.loc24_19.1 // CHECK:STDOUT: %Iterate.facet.loc24_19.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e7e) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc24_19.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc24_19.1 [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %Iterate.facet.loc24_19.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e7e) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc24_19.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc24_19.2 [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.1: = specific_impl_function %impl.elem2.loc24_19.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.a43) [symbolic = %specific_impl_fn.loc24_19.4 (constants.%specific_impl_fn.0ea)] // CHECK:STDOUT: %bound_method.loc24_19.2: = bound_method %r.ref, %specific_impl_fn.loc24_19.1 // CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.ba7) = var_storage invalid // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.ba7) to %var = call %bound_method.loc24_19.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3.loc24_19.1: @TestIterate.%.loc24_19.20 (%.fe7) = impl_witness_access constants.%Iterate.lookup_impl_witness.e7e, element3 [symbolic = %impl.elem3.loc24_19.2 (constants.%impl.elem3.ae5)] // CHECK:STDOUT: %bound_method.loc24_19.3: = bound_method %r.ref, %impl.elem3.loc24_19.1 // CHECK:STDOUT: %Iterate.facet.loc24_19.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e7e) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc24_19.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc24_19.3 [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %Iterate.facet.loc24_19.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e7e) [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc24_19.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc24_19.4 [symbolic = %Iterate.facet.loc24_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc24_19.5: %Destroy.type = converted constants.%as_type.ba7, constants.%impl.elem1.2af [symbolic = %impl.elem1 (constants.%impl.elem1.2af)] // CHECK:STDOUT: %.loc24_19.6: %Destroy.type = converted constants.%as_type.ba7, constants.%impl.elem1.2af [symbolic = %impl.elem1 (constants.%impl.elem1.2af)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.2: = specific_impl_function %impl.elem3.loc24_19.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.a43) [symbolic = %specific_impl_fn.loc24_19.5 (constants.%specific_impl_fn.493)] // CHECK:STDOUT: %bound_method.loc24_19.4: = bound_method %r.ref, %specific_impl_fn.loc24_19.2 // CHECK:STDOUT: %.loc24_19.7: ref %Optional.000 = temporary_storage // CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.000 to %.loc24_19.7 = call %bound_method.loc24_19.4(%r.ref, %var) // CHECK:STDOUT: %.loc24_19.8: ref %Optional.000 = temporary %.loc24_19.7, %Iterate.WithSelf.Next.call // CHECK:STDOUT: %.loc24_19.9: %Optional.HasValue.type.92f = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.HasValue.ff5] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.92f = name_ref HasValue, %.loc24_19.9 [concrete = constants.%Optional.HasValue.ff5] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc24_19.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.HasValue.specific_fn.315] // CHECK:STDOUT: %bound_method.loc24_19.5: = bound_method %.loc24_19.8, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc24_19.10: %Optional.000 = acquire_value %.loc24_19.8 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc24_19.5(%.loc24_19.10) // CHECK:STDOUT: %.loc24_19.11: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc24_19.12: bool = converted %Optional.HasValue.call, %.loc24_19.11 // CHECK:STDOUT: if %.loc24_19.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc24_19.13: %Optional.Get.type.695 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.Get.62a] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.695 = name_ref Get, %.loc24_19.13 [concrete = constants.%Optional.Get.62a] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc24_19.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.Get.specific_fn.570] // CHECK:STDOUT: %bound_method.loc24_19.6: = bound_method %.loc24_19.8, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc24_19.14: %Optional.000 = acquire_value %.loc24_19.8 // CHECK:STDOUT: %Optional.Get.call: init %f64.761 = call %bound_method.loc24_19.6(%.loc24_19.14) // CHECK:STDOUT: %.loc24_19.15: %f64.761 = value_of_initializer %Optional.Get.call // CHECK:STDOUT: %.loc24_19.16: %f64.761 = converted %Optional.Get.call, %.loc24_19.15 // CHECK:STDOUT: %f64.loc24: type = type_literal constants.%f64.761 [concrete = constants.%f64.761] // CHECK:STDOUT: %i: %f64.761 = wrapper_binding i, %.loc24_19.16 // CHECK:STDOUT: %sum.ref: ref %f64.761 = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %f64.761 = name_ref i, %i // CHECK:STDOUT: %impl.elem0.loc25: %.48b = impl_witness_access constants.%AddAssignWith.impl_witness.5c7, element0 [concrete = constants.%Float.as.AddAssignWith.impl.Op.e04] // CHECK:STDOUT: %bound_method.loc25_9.1: = bound_method %sum.ref, %impl.elem0.loc25 // CHECK:STDOUT: %specific_fn.loc25: = specific_function %impl.elem0.loc25, @Float.as.AddAssignWith.impl.Op(constants.%int_64) [concrete = constants.%Float.as.AddAssignWith.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc25_9.2: = bound_method %sum.ref, %specific_fn.loc25 // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.call: init %empty_tuple.type = call %bound_method.loc25_9.2(%sum.ref, %i.ref) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_19.1: = bound_method %.loc24_19.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_19.1(%.loc24_19.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_19.2: = bound_method %.loc24_19.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_19.2(%.loc24_19.8) // CHECK:STDOUT: %impl.elem2.loc24_19.2: @TestIterate.%.loc24_19.21 (%.421) = impl_witness_access constants.%Destroy.lookup_impl_witness.cb1, element2 [symbolic = %impl.elem2.loc24_19.4 (constants.%impl.elem2.f8d)] // CHECK:STDOUT: %bound_method.loc24_19.7: = bound_method %var, %impl.elem2.loc24_19.2 // CHECK:STDOUT: %.loc24_19.17: %Destroy.type = converted constants.%as_type.ba7, constants.%impl.elem1.2af [symbolic = %impl.elem1 (constants.%impl.elem1.2af)] // CHECK:STDOUT: %.loc24_19.18: %Destroy.type = converted constants.%as_type.ba7, constants.%impl.elem1.2af [symbolic = %impl.elem1 (constants.%impl.elem1.2af)] // CHECK:STDOUT: %specific_impl_fn.loc24_19.3: = specific_impl_function %impl.elem2.loc24_19.2, @Destroy.WithSelf.SelfDestruct.1(constants.%impl.elem1.2af) [symbolic = %specific_impl_fn.loc24_19.6 (constants.%specific_impl_fn.6a1)] // CHECK:STDOUT: %bound_method.loc24_19.8: = bound_method %var, %specific_impl_fn.loc24_19.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_19.3: init %empty_tuple.type = call %bound_method.loc24_19.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_19.1(%self.param: ref %.ecc) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc24_19.1(%self.param: ref %.ecc) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc24_19.1(%self.param: ref %.ecc) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.2(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.2(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_19.2(%self.param: ref %MaybeUnformed.912) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc24_19.2(%self.param: ref %MaybeUnformed.912) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc24_19.2(%self.param: ref %MaybeUnformed.912) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.3(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.3(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_19.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc24_19.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc24_19.3(%self.param: ref bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.4(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.4(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_19.4(%self.param: ref %struct_type.value.has_value.82f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc24_19.1: ref bool = struct_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_19.1: = bound_method %.loc24_19.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_19.1(%.loc24_19.1) // CHECK:STDOUT: %.loc24_19.2: ref %MaybeUnformed.912 = struct_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_19.2: = bound_method %.loc24_19.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_19.2(%.loc24_19.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc24_19.4(%self.param: ref %struct_type.value.has_value.82f) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc24_19.4(%self.param: ref %struct_type.value.has_value.82f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.5(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.5(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_19.5(%self.param: ref %DefaultOptionalStorage.6ea) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %has_value.ref: %DefaultOptionalStorage.elem.b33 = name_ref has_value, imports.%Core.import_ref.e86 [concrete = imports.%field_decl.390] // CHECK:STDOUT: %.loc24_19.1: ref bool = class_element_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_19.1: = bound_method %.loc24_19.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_19.1(%.loc24_19.1) // CHECK:STDOUT: %value.ref: %DefaultOptionalStorage.elem.9ab = name_ref value, imports.%Core.import_ref.373 [concrete = imports.%field_decl.498] // CHECK:STDOUT: %.loc24_19.2: ref %MaybeUnformed.912 = class_element_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc24_19.2: = bound_method %.loc24_19.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc24_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc24_19.2(%.loc24_19.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc24_19.5(%self.param: ref %DefaultOptionalStorage.6ea) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc24_19.5(%self.param: ref %DefaultOptionalStorage.6ea) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.6(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.6(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc24_19.6(%self.param: ref %Optional.000) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc24_19.6(%self.param: ref %Optional.000) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc24_19.6(%self.param: ref %Optional.000) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.7(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.7(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @TestRangeFor(%c.param: %ConstRange) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.667 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c // CHECK:STDOUT: %impl.elem2: %.588 = impl_witness_access constants.%Iterate.impl_witness.a53, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.1ed] // CHECK:STDOUT: %bound_method.loc38_19.1: = bound_method %c.ref, %impl.elem2 // CHECK:STDOUT: %facet_value.loc38_19.1: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.5d5, constants.%custom_witness.b76, constants.%custom_witness.f6f, constants.%custom_witness.393, constants.%custom_witness.eb7, constants.%custom_witness.f8f19d.2, constants.%Copy.impl_witness.eac, constants.%custom_witness.b76) [concrete = constants.%facet_value.120] // CHECK:STDOUT: %.loc38_19.1: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc38_19.1 [concrete = constants.%facet_value.120] // CHECK:STDOUT: %facet_value.loc38_19.2: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.5d5, constants.%custom_witness.b76, constants.%custom_witness.f6f, constants.%custom_witness.393, constants.%custom_witness.eb7, constants.%custom_witness.f8f19d.2, constants.%Copy.impl_witness.eac, constants.%custom_witness.b76) [concrete = constants.%facet_value.120] // CHECK:STDOUT: %.loc38_19.2: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc38_19.2 [concrete = constants.%facet_value.120] // CHECK:STDOUT: %specific_fn.loc38_19.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.120) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] // CHECK:STDOUT: %bound_method.loc38_19.2: = bound_method %c.ref, %specific_fn.loc38_19.1 // CHECK:STDOUT: %var: ref %tuple.type.005 = var_storage invalid // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.005 to %var = call %bound_method.loc38_19.2(%c.ref) // CHECK:STDOUT: assign %var, %T.as_type.as.Iterate.impl.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3: %.7bd = impl_witness_access constants.%Iterate.impl_witness.a53, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.9ad] // CHECK:STDOUT: %bound_method.loc38_19.3: = bound_method %c.ref, %impl.elem3 // CHECK:STDOUT: %facet_value.loc38_19.3: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.5d5, constants.%custom_witness.b76, constants.%custom_witness.f6f, constants.%custom_witness.393, constants.%custom_witness.eb7, constants.%custom_witness.f8f19d.2, constants.%Copy.impl_witness.eac, constants.%custom_witness.b76) [concrete = constants.%facet_value.120] // CHECK:STDOUT: %.loc38_19.3: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc38_19.3 [concrete = constants.%facet_value.120] // CHECK:STDOUT: %facet_value.loc38_19.4: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.5d5, constants.%custom_witness.b76, constants.%custom_witness.f6f, constants.%custom_witness.393, constants.%custom_witness.eb7, constants.%custom_witness.f8f19d.2, constants.%Copy.impl_witness.eac, constants.%custom_witness.b76) [concrete = constants.%facet_value.120] // CHECK:STDOUT: %.loc38_19.4: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc38_19.4 [concrete = constants.%facet_value.120] // CHECK:STDOUT: %specific_fn.loc38_19.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.120) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] // CHECK:STDOUT: %bound_method.loc38_19.4: = bound_method %c.ref, %specific_fn.loc38_19.2 // CHECK:STDOUT: %.loc38_19.5: ref %Optional.000 = temporary_storage // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.000 to %.loc38_19.5 = call %bound_method.loc38_19.4(%c.ref, %var) // CHECK:STDOUT: %.loc38_19.6: ref %Optional.000 = temporary %.loc38_19.5, %T.as_type.as.Iterate.impl.Next.call // CHECK:STDOUT: %.loc38_19.7: %Optional.HasValue.type.92f = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.HasValue.ff5] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.92f = name_ref HasValue, %.loc38_19.7 [concrete = constants.%Optional.HasValue.ff5] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc38_19.6, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.HasValue.specific_fn.315] // CHECK:STDOUT: %bound_method.loc38_19.5: = bound_method %.loc38_19.6, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc38_19.8: %Optional.000 = acquire_value %.loc38_19.6 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc38_19.5(%.loc38_19.8) // CHECK:STDOUT: %.loc38_19.9: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc38_19.10: bool = converted %Optional.HasValue.call, %.loc38_19.9 // CHECK:STDOUT: if %.loc38_19.10 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc38_19.11: %Optional.Get.type.695 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.Get.62a] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.695 = name_ref Get, %.loc38_19.11 [concrete = constants.%Optional.Get.62a] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc38_19.6, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.Get.specific_fn.570] // CHECK:STDOUT: %bound_method.loc38_19.6: = bound_method %.loc38_19.6, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc38_19.12: %Optional.000 = acquire_value %.loc38_19.6 // CHECK:STDOUT: %Optional.Get.call: init %f64.761 = call %bound_method.loc38_19.6(%.loc38_19.12) // CHECK:STDOUT: %.loc38_19.13: %f64.761 = value_of_initializer %Optional.Get.call // CHECK:STDOUT: %.loc38_19.14: %f64.761 = converted %Optional.Get.call, %.loc38_19.13 // CHECK:STDOUT: %f64.loc38: type = type_literal constants.%f64.761 [concrete = constants.%f64.761] // CHECK:STDOUT: %i: %f64.761 = wrapper_binding i, %.loc38_19.14 // CHECK:STDOUT: %sum.ref: ref %f64.761 = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %f64.761 = name_ref i, %i // CHECK:STDOUT: %impl.elem0.loc39: %.48b = impl_witness_access constants.%AddAssignWith.impl_witness.5c7, element0 [concrete = constants.%Float.as.AddAssignWith.impl.Op.e04] // CHECK:STDOUT: %bound_method.loc39_9.1: = bound_method %sum.ref, %impl.elem0.loc39 // CHECK:STDOUT: %specific_fn.loc39: = specific_function %impl.elem0.loc39, @Float.as.AddAssignWith.impl.Op(constants.%int_64) [concrete = constants.%Float.as.AddAssignWith.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc39_9.2: = bound_method %sum.ref, %specific_fn.loc39 // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.call: init %empty_tuple.type = call %bound_method.loc39_9.2(%sum.ref, %i.ref) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc38_19.1: = bound_method %.loc38_19.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc38_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc38_19.1(%.loc38_19.6) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc38_19.2: = bound_method %.loc38_19.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc38_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc38_19.2(%.loc38_19.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc38_19.3: = bound_method %var, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc38_19.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc38_19.3(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc20_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc20_17.1 => constants.%R // CHECK:STDOUT: %R.as_type.loc20_61.1 => constants.%R.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.874 // CHECK:STDOUT: %r.param_patt.loc20_59.2 => constants.%r.param_patt.ef5 // CHECK:STDOUT: %r.patt.loc20_59.2 => constants.%r.patt.c43 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.36b) { // CHECK:STDOUT: %R.patt.loc20_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc20_17.1 => constants.%facet_value.36b // CHECK:STDOUT: %R.as_type.loc20_61.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.025 // CHECK:STDOUT: %r.param_patt.loc20_59.2 => constants.%r.param_patt.a73 // CHECK:STDOUT: %r.patt.loc20_59.2 => constants.%r.patt.0b5 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc20 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.a53 // CHECK:STDOUT: %Iterate.facet.loc24_19.5 => constants.%Iterate.facet.1a5 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.793 // CHECK:STDOUT: %.loc24_19.19 => constants.%.588 // CHECK:STDOUT: %impl.elem2.loc24_19.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.1ed // CHECK:STDOUT: %specific_impl_fn.loc24_19.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.362 // CHECK:STDOUT: %as_type => constants.%tuple.type.005 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.320 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.c0d // CHECK:STDOUT: %.loc24_19.20 => constants.%.7bd // CHECK:STDOUT: %impl.elem3.loc24_19.2 => constants.%T.as_type.as.Iterate.impl.Next.9ad // CHECK:STDOUT: %specific_impl_fn.loc24_19.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.dd4 // CHECK:STDOUT: %.loc24_19.21 => constants.%.38e // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.9 // CHECK:STDOUT: %impl.elem2.loc24_19.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: %specific_impl_fn.loc24_19.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_adl_returns_same_types_mutable.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: type: type = facet_type [concrete] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %facet_type.f48: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Get.type.786: type = fn_type @Optional.Get, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Get.2d0: %Optional.Get.type.786 = struct_value () [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.3ea: type = fn_type @Optional.HasValue, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.HasValue.f2f: %Optional.HasValue.type.3ea = struct_value () [symbolic] // CHECK:STDOUT: %T.283: %facet_type.f48 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.28a: = lookup_impl_witness %T.283, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.16e: %Destroy.type = facet_value %T.as_type.74b, (%Destroy.lookup_impl_witness.28a) [symbolic] // CHECK:STDOUT: %MaybeUnformed.91c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.16e) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.ade: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%T.283) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b49: type = unbound_element_type %DefaultOptionalStorage.ade, bool [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.229: type = unbound_element_type %DefaultOptionalStorage.ade, %MaybeUnformed.91c [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.type.2f2: type = fn_type @T.as_type.as.OptionalStorage.impl.Get, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.884: %T.as_type.as.OptionalStorage.impl.Get.type.2f2 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d28: 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.f29: %T.as_type.as.OptionalStorage.impl.Has.type.d28 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.type.760: type = fn_type @T.as_type.as.OptionalStorage.impl.Some, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.268: %T.as_type.as.OptionalStorage.impl.Some.type.760 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.925: 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.f42: %T.as_type.as.OptionalStorage.impl.None.type.925 = struct_value () [symbolic] // CHECK:STDOUT: %N.fe9: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRange.type: type = facet_type <@CppRange> [concrete] // CHECK:STDOUT: %.Self.e0b: %CppRange.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.50b: = lookup_impl_witness %.Self.e0b, @CppRangeForIterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.32d: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.50b, element0 [symbolic_self] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.851: = lookup_impl_witness %impl.elem0.32d, @CppUnsafeDeref [symbolic_self] // CHECK:STDOUT: %impl.elem0.10d: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.851, element0 [symbolic_self] // CHECK:STDOUT: %CppRange_where.type.d682d6.1: type = facet_type <@CppRange where %impl.elem0.10d impls @Copy> [concrete] // CHECK:STDOUT: %T.f45530.2: %CppRange_where.type.d682d6.1 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.d4a: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.5a8: %T.as_type.as.Iterate.impl.Next.type.d4a = struct_value () [symbolic] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.b581a8.2: = lookup_impl_witness %T.f45530.2, @CppRangeForIterate [symbolic] // CHECK:STDOUT: %impl.elem0.5f971c.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element0 [symbolic] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.87e543.2: = lookup_impl_witness %impl.elem0.5f971c.2, @CppUnsafeDeref [symbolic] // CHECK:STDOUT: %impl.elem0.493765.2: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.87e543.2, element0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.8fb: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.8a1: %T.as_type.as.Iterate.impl.NewCursor.type.8fb = struct_value () [symbolic] // CHECK:STDOUT: %impl.elem1.c2dc15.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element1 [symbolic] // CHECK:STDOUT: %tuple.type.1ba: type = tuple_type (%impl.elem0.5f971c.2, %impl.elem1.c2dc15.2) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.812: = lookup_impl_witness %tuple.type.1ba, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.9cd: %Destroy.type = facet_value %tuple.type.1ba, (%Destroy.lookup_impl_witness.812) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [symbolic] // CHECK:STDOUT: %int_64: Core.IntLiteral = int_value 64 [concrete] // CHECK:STDOUT: %f64.761: type = class_type @Float, @Float(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.667: type = pattern_type %f64.761 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc32 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc32 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc32 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.2: = custom_witness (%Destroy.WithSelf.Op.403171.2, %Destroy.WithSelf.SubobjectDestroy.d01daf.2, %Destroy.WithSelf.SelfDestruct.db3fdb.2), @Destroy [concrete] // CHECK:STDOUT: %Float.as.Copy.impl.Op.type.e8d: type = fn_type @Float.as.Copy.impl.Op, @Float.as.Copy.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %Float.as.Copy.impl.Op.fe9: %Float.as.Copy.impl.Op.type.e8d = struct_value () [symbolic] // CHECK:STDOUT: %Copy.impl_witness.eac: = impl_witness imports.%Copy.impl_witness_table.14d, @Float.as.Copy.impl(%int_64) [concrete] // CHECK:STDOUT: %facet_value.1d1: %facet_type.f48 = facet_value %f64.761, (%custom_witness.f8f19d.2, %Copy.impl_witness.eac) [concrete] // 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.11d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.1d1> [concrete] // CHECK:STDOUT: %pattern_type.999: type = pattern_type %Iterate_where.type.11d [concrete] // CHECK:STDOUT: %R.patt: %pattern_type.999 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R: %Iterate_where.type.11d = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] // CHECK:STDOUT: %pattern_type.874: type = pattern_type %R.as_type [symbolic] // CHECK:STDOUT: %r.param_patt.ef5: %pattern_type.874 = value_param_pattern [symbolic] // CHECK:STDOUT: %r.patt.c43: %pattern_type.874 = wrapper_binding_pattern r, %r.param_patt.ef5 [symbolic] // CHECK:STDOUT: %i.patt: %pattern_type.667 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.e7e: = lookup_impl_witness %R, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.a43: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.e7e) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.248: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.a43) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.9a9: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.a43) [symbolic] // CHECK:STDOUT: %.678: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.248, %Iterate.facet.a43 [symbolic] // CHECK:STDOUT: %impl.elem2.e3e: %.678 = impl_witness_access %Iterate.lookup_impl_witness.e7e, element2 [symbolic] // CHECK:STDOUT: %impl.elem1.2af: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.e7e, element1 [symbolic] // CHECK:STDOUT: %as_type.ba7: type = facet_access_type %impl.elem1.2af [symbolic] // CHECK:STDOUT: %specific_impl_fn.0ea: = specific_impl_function %impl.elem2.e3e, @Iterate.WithSelf.NewCursor(%Iterate.facet.a43) [symbolic] // CHECK:STDOUT: %.fe7: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.9a9, %Iterate.facet.a43 [symbolic] // CHECK:STDOUT: %impl.elem3.ae5: %.fe7 = impl_witness_access %Iterate.lookup_impl_witness.e7e, element3 [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.6ea: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.1d1) [concrete] // CHECK:STDOUT: %OptionalStorage.impl_witness.49d: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.1d1) [concrete] // CHECK:STDOUT: %OptionalStorage.facet.d7a: %OptionalStorage.type = facet_value %f64.761, (%OptionalStorage.impl_witness.49d) [concrete] // CHECK:STDOUT: %Optional.000: type = class_type @Optional, @Optional(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %pattern_type.40d: type = pattern_type %Optional.000 [concrete] // CHECK:STDOUT: %specific_impl_fn.493: = specific_impl_function %impl.elem3.ae5, @Iterate.WithSelf.Next(%Iterate.facet.a43) [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.92f: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %Optional.HasValue.ff5: %Optional.HasValue.type.92f = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.695: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %Optional.Get.62a: %Optional.Get.type.695 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.facet.bb7: %Destroy.type = facet_value %f64.761, (%custom_witness.f8f19d.2) [concrete] // CHECK:STDOUT: %MaybeUnformed.912: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.bb7) [concrete] // CHECK:STDOUT: %.ecc: type = maybe_unformed_type %f64.761 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.9ab: type = unbound_element_type %DefaultOptionalStorage.6ea, %MaybeUnformed.912 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b33: type = unbound_element_type %DefaultOptionalStorage.6ea, bool [concrete] // CHECK:STDOUT: %struct_type.value.has_value.82f: type = struct_type {.value: %MaybeUnformed.912, .has_value: bool} [concrete] // CHECK:STDOUT: %Optional.HasValue.specific_fn.315: = specific_function %Optional.HasValue.ff5, @Optional.HasValue(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn.570: = specific_function %Optional.Get.62a, @Optional.Get(%OptionalStorage.facet.d7a) [concrete] // CHECK:STDOUT: %AddAssignWith.type.0c5: type = facet_type <@AddAssignWith, @AddAssignWith(%f64.761)> [concrete] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.type.763: type = fn_type @Float.as.AddAssignWith.impl.Op, @Float.as.AddAssignWith.impl(%N.fe9) [symbolic] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.8aa: %Float.as.AddAssignWith.impl.Op.type.763 = struct_value () [symbolic] // CHECK:STDOUT: %AddAssignWith.impl_witness.5c7: = impl_witness imports.%AddAssignWith.impl_witness_table, @Float.as.AddAssignWith.impl(%int_64) [concrete] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.type.f20: type = fn_type @Float.as.AddAssignWith.impl.Op, @Float.as.AddAssignWith.impl(%int_64) [concrete] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.e04: %Float.as.AddAssignWith.impl.Op.type.f20 = struct_value () [concrete] // CHECK:STDOUT: %AddAssignWith.facet: %AddAssignWith.type.0c5 = facet_value %f64.761, (%AddAssignWith.impl_witness.5c7) [concrete] // CHECK:STDOUT: %AddAssignWith.WithSelf.Op.type.bb6: type = fn_type @AddAssignWith.WithSelf.Op, @AddAssignWith.WithSelf(%f64.761, %AddAssignWith.facet) [concrete] // CHECK:STDOUT: %.48b: type = fn_type_with_self_type %AddAssignWith.WithSelf.Op.type.bb6, %AddAssignWith.facet [concrete] // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.specific_fn: = specific_function %Float.as.AddAssignWith.impl.Op.e04, @Float.as.AddAssignWith.impl.Op(%int_64) [concrete] // CHECK:STDOUT: %pattern_type.d8c: type = pattern_type %.ecc [concrete] // CHECK:STDOUT: %self.param_patt.5ca: %pattern_type.d8c = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.1f3: %pattern_type.d8c = wrapper_binding_pattern self, %self.param_patt.5ca [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc36_19.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc36_19.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.007: type = pattern_type %MaybeUnformed.912 [concrete] // CHECK:STDOUT: %self.param_patt.6cf: %pattern_type.007 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.b4d: %pattern_type.007 = wrapper_binding_pattern self, %self.param_patt.6cf [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc36_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.4: type = fn_type @Destroy.WithSelf.Op.loc36_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.4: %Destroy.WithSelf.Op.type.ef016f.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4: type = fn_type @Destroy.WithSelf.SelfDestruct.loc36_19.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.4: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.40d: %pattern_type.831 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.560: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt.40d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc36_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.5: type = fn_type @Destroy.WithSelf.Op.loc36_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.5: %Destroy.WithSelf.Op.type.ef016f.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5: type = fn_type @Destroy.WithSelf.SelfDestruct.loc36_19.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.5: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.28d: type = pattern_type %struct_type.value.has_value.82f [concrete] // CHECK:STDOUT: %self.param_patt.f24: %pattern_type.28d = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.396: %pattern_type.28d = wrapper_binding_pattern self, %self.param_patt.f24 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc36_19.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc36_19.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.ee1: type = pattern_type %DefaultOptionalStorage.6ea [concrete] // CHECK:STDOUT: %self.param_patt.d5d: %pattern_type.ee1 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.aa9: %pattern_type.ee1 = wrapper_binding_pattern self, %self.param_patt.d5d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc36_19.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc36_19.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.4ac: %pattern_type.40d = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.1ec: %pattern_type.40d = wrapper_binding_pattern self, %self.param_patt.4ac [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc36_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.8: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.8: type = fn_type @Destroy.WithSelf.Op.loc36_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.8: %Destroy.WithSelf.Op.type.ef016f.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8: type = fn_type @Destroy.WithSelf.SelfDestruct.loc36_19.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.8: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.cb1: = lookup_impl_witness %impl.elem1.2af, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.a48: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1.2af) [symbolic] // CHECK:STDOUT: %.421: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.a48, %impl.elem1.2af [symbolic] // CHECK:STDOUT: %impl.elem2.f8d: %.421 = impl_witness_access %Destroy.lookup_impl_witness.cb1, element2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.6a1: = specific_impl_function %impl.elem2.f8d, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1.2af) [symbolic] // CHECK:STDOUT: %MutableRange: type = class_type @MutableRange [concrete] // CHECK:STDOUT: %pattern_type.992: type = pattern_type %MutableRange [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Iterator: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %Begin.type: type = fn_type @Begin [concrete] // CHECK:STDOUT: %Begin: %Begin.type = struct_value () [concrete] // CHECK:STDOUT: %End.type: type = fn_type @End [concrete] // CHECK:STDOUT: %End: %End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.902: = custom_witness (%Iterator, %Iterator, %Begin, %End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.9: type = fn_type @Destroy.WithSelf.Op.loc43 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.9: %Destroy.WithSelf.Op.type.ef016f.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9: type = fn_type @Destroy.WithSelf.SelfDestruct.loc43 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.9: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type: type = fn_type @Iterator.SubobjectDestroy [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy: %Iterator.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.e74: = custom_witness (%Destroy.WithSelf.Op.403171.9, %Iterator.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.9), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.b9731e.1: type = fn_type @Iterator.Op.1 [concrete] // CHECK:STDOUT: %Iterator.Op.ac6aad.1: %Iterator.Op.type.b9731e.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.0a8: = custom_witness (%f64.761, %Iterator.Op.ac6aad.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.b9731e.2: type = fn_type @Iterator.Op.2 [concrete] // CHECK:STDOUT: %Iterator.Op.ac6aad.2: %Iterator.Op.type.b9731e.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.491: = custom_witness (%Iterator.Op.ac6aad.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type: type = fn_type @NotEqual [concrete] // CHECK:STDOUT: %NotEqual: %NotEqual.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.068: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Iterator) [concrete] // CHECK:STDOUT: %facet_value.c62: %CppRange_where.type.d682d6.1 = facet_value %MutableRange, (%custom_witness.902, %custom_witness.e74, %custom_witness.0a8, %custom_witness.491, %custom_witness.068, %custom_witness.f8f19d.2, %Copy.impl_witness.eac, %custom_witness.e74) [concrete] // CHECK:STDOUT: %tuple.type.dd0: type = tuple_type (%Iterator, %Iterator) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.9: type = fn_type @Destroy.WithSelf.SubobjectDestroy.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.9: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.10: type = fn_type @Destroy.WithSelf.Op.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.10: %Destroy.WithSelf.Op.type.ef016f.10 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10: type = fn_type @Destroy.WithSelf.SelfDestruct.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.10: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.9: = custom_witness (%Destroy.WithSelf.Op.403171.10, %Destroy.WithSelf.SubobjectDestroy.d01daf.9, %Destroy.WithSelf.SelfDestruct.db3fdb.10), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.f0b: %Destroy.type = facet_value %tuple.type.dd0, (%custom_witness.f8f19d.9) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.8eb: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.c62) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.c03: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.c62) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.f32: %T.as_type.as.Iterate.impl.NewCursor.type.c03 = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.06b: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.c62) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.8a0: %T.as_type.as.Iterate.impl.Next.type.06b = struct_value () [concrete] // CHECK:STDOUT: %facet_value.da8: %Iterate_where.type.11d = facet_value %MutableRange, (%Iterate.impl_witness.8eb) [concrete] // CHECK:STDOUT: %r.param_patt.aeb: %pattern_type.992 = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.892: %pattern_type.992 = wrapper_binding_pattern r, %r.param_patt.aeb [concrete] // CHECK:STDOUT: %Iterate.facet.b38: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.8eb) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.601: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.b38) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.63c: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.b38) [concrete] // CHECK:STDOUT: %.177: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.601, %Iterate.facet.b38 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.f32, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.c62) [concrete] // CHECK:STDOUT: %.d10: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.63c, %Iterate.facet.b38 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.8a0, @T.as_type.as.Iterate.impl.Next(%facet_value.c62) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.1a9: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.f0b) [concrete] // CHECK:STDOUT: %.4a2: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.1a9, %Destroy.facet.f0b [concrete] // CHECK:STDOUT: %complete_type.843: = complete_type_witness %tuple.type.dd0 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Core.import_ref.c82: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.3ea) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.f2f)] // CHECK:STDOUT: %Core.import_ref.29e: @Optional.%Optional.Get.type (%Optional.Get.type.786) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Get (constants.%Optional.Get.2d0)] // CHECK:STDOUT: %Core.import_ref.2e7: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.ade)] // CHECK:STDOUT: %Core.import_ref.ef4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.925) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f42)] // CHECK:STDOUT: %Core.import_ref.a20: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.760) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.268)] // CHECK:STDOUT: %Core.import_ref.af7: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.d28) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.f29)] // CHECK:STDOUT: %Core.import_ref.dd4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.2f2) = 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.884)] // CHECK:STDOUT: %Core.import_ref.554 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.2e7, %Core.import_ref.ef4, %Core.import_ref.a20, %Core.import_ref.af7, %Core.import_ref.dd4, %Core.import_ref.554), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.373: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.498] // CHECK:STDOUT: %Core.import_ref.e86: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.390] // CHECK:STDOUT: %Core.import_ref.eef: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.f93)] // CHECK:STDOUT: %Core.import_ref.fcc: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.9cd)] // CHECK:STDOUT: %Core.import_ref.946: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.8fb) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.8a1)] // CHECK:STDOUT: %Core.import_ref.cfb: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.d4a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.5a8)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.946, %Core.import_ref.cfb), @T.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %Core.import_ref.19b: @Float.as.Copy.impl.%Float.as.Copy.impl.Op.type (%Float.as.Copy.impl.Op.type.e8d) = 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.fe9)] // CHECK:STDOUT: %Copy.impl_witness_table.14d = impl_witness_table (%Core.import_ref.19b), @Float.as.Copy.impl [concrete] // CHECK:STDOUT: %Core.import_ref.e0d0: @Float.as.AddAssignWith.impl.%Float.as.AddAssignWith.impl.Op.type (%Float.as.AddAssignWith.impl.Op.type.763) = 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.8aa)] // CHECK:STDOUT: %AddAssignWith.impl_witness_table = impl_witness_table (%Core.import_ref.e0d0), @Float.as.AddAssignWith.impl [concrete] // CHECK:STDOUT: %Core.import_ref.b0d0 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.390: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = field_decl has_value, element1, %Core.import_ref.b0d0 in [concrete] {} // CHECK:STDOUT: %Core.import_ref.ab7 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.498: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = field_decl value, element0, %Core.import_ref.ab7 in [concrete] {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc36_19.1 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.d8c = ref_param_pattern [concrete = constants.%self.param_patt.5ca] // CHECK:STDOUT: %self.patt: %pattern_type.d8c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1f3] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.ecc = ref_param call_param0 // CHECK:STDOUT: %self: ref %.ecc = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.2: %Destroy.WithSelf.Op.type.ef016f.3 = fn_decl @Destroy.WithSelf.Op.loc36_19.1 [concrete = constants.%Destroy.WithSelf.Op.403171.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.d8c = ref_param_pattern [concrete = constants.%self.param_patt.5ca] // CHECK:STDOUT: %self.patt: %pattern_type.d8c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1f3] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.ecc = ref_param call_param0 // CHECK:STDOUT: %self: ref %.ecc = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc36_19.2 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.007 = ref_param_pattern [concrete = constants.%self.param_patt.6cf] // CHECK:STDOUT: %self.patt: %pattern_type.007 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b4d] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.912 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.912 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.3: %Destroy.WithSelf.Op.type.ef016f.4 = fn_decl @Destroy.WithSelf.Op.loc36_19.2 [concrete = constants.%Destroy.WithSelf.Op.403171.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.007 = ref_param_pattern [concrete = constants.%self.param_patt.6cf] // CHECK:STDOUT: %self.patt: %pattern_type.007 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b4d] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.912 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.912 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc36_19.3 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.4: %Destroy.WithSelf.Op.type.ef016f.5 = fn_decl @Destroy.WithSelf.Op.loc36_19.3 [concrete = constants.%Destroy.WithSelf.Op.403171.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc36_19.4 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.28d = ref_param_pattern [concrete = constants.%self.param_patt.f24] // CHECK:STDOUT: %self.patt: %pattern_type.28d = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.396] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.82f = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.82f = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.5: %Destroy.WithSelf.Op.type.ef016f.6 = fn_decl @Destroy.WithSelf.Op.loc36_19.4 [concrete = constants.%Destroy.WithSelf.Op.403171.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.28d = ref_param_pattern [concrete = constants.%self.param_patt.f24] // CHECK:STDOUT: %self.patt: %pattern_type.28d = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.396] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.82f = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.82f = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc36_19.5 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.ee1 = ref_param_pattern [concrete = constants.%self.param_patt.d5d] // CHECK:STDOUT: %self.patt: %pattern_type.ee1 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.aa9] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.6ea = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.6ea = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.6: %Destroy.WithSelf.Op.type.ef016f.7 = fn_decl @Destroy.WithSelf.Op.loc36_19.5 [concrete = constants.%Destroy.WithSelf.Op.403171.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.ee1 = ref_param_pattern [concrete = constants.%self.param_patt.d5d] // CHECK:STDOUT: %self.patt: %pattern_type.ee1 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.aa9] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.6ea = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.6ea = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc36_19.6 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.40d = ref_param_pattern [concrete = constants.%self.param_patt.4ac] // CHECK:STDOUT: %self.patt: %pattern_type.40d = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1ec] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.000 = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.000 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.7: %Destroy.WithSelf.Op.type.ef016f.8 = fn_decl @Destroy.WithSelf.Op.loc36_19.6 [concrete = constants.%Destroy.WithSelf.Op.403171.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.40d = ref_param_pattern [concrete = constants.%self.param_patt.4ac] // CHECK:STDOUT: %self.patt: %pattern_type.40d = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.1ec] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.000 = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.000 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestIterate(%R.loc32_17.2: %Iterate_where.type.11d) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc32_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.e7e)] // CHECK:STDOUT: %Iterate.facet.loc36_19.5: %Iterate.type = facet_value %R.as_type.loc32_61.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc36_19.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.248)] // CHECK:STDOUT: %.loc36_19.19: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc36_19.5 [symbolic = %.loc36_19.19 (constants.%.678)] // CHECK:STDOUT: %impl.elem2.loc36_19.3: @TestIterate.%.loc36_19.19 (%.678) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc36_19.3 (constants.%impl.elem2.e3e)] // CHECK:STDOUT: %specific_impl_fn.loc36_19.4: = specific_impl_function %impl.elem2.loc36_19.3, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc36_19.5) [symbolic = %specific_impl_fn.loc36_19.4 (constants.%specific_impl_fn.0ea)] // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc36_19.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.9a9)] // CHECK:STDOUT: %.loc36_19.20: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc36_19.5 [symbolic = %.loc36_19.20 (constants.%.fe7)] // CHECK:STDOUT: %impl.elem3.loc36_19.2: @TestIterate.%.loc36_19.20 (%.fe7) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc36_19.2 (constants.%impl.elem3.ae5)] // CHECK:STDOUT: %specific_impl_fn.loc36_19.5: = specific_impl_function %impl.elem3.loc36_19.2, @Iterate.WithSelf.Next(%Iterate.facet.loc36_19.5) [symbolic = %specific_impl_fn.loc36_19.5 (constants.%specific_impl_fn.493)] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.SelfDestruct.type (constants.%Destroy.WithSelf.SelfDestruct.type.a48)] // CHECK:STDOUT: %.loc36_19.21: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type, %impl.elem1 [symbolic = %.loc36_19.21 (constants.%.421)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.cb1)] // CHECK:STDOUT: %impl.elem2.loc36_19.4: @TestIterate.%.loc36_19.21 (%.421) = impl_witness_access %Destroy.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc36_19.4 (constants.%impl.elem2.f8d)] // CHECK:STDOUT: %specific_impl_fn.loc36_19.6: = specific_impl_function %impl.elem2.loc36_19.4, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1) [symbolic = %specific_impl_fn.loc36_19.6 (constants.%specific_impl_fn.6a1)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc32_61.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.667 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc32_61.1 (%R.as_type) = name_ref r, %r // CHECK:STDOUT: %impl.elem2.loc36_19.1: @TestIterate.%.loc36_19.19 (%.678) = impl_witness_access constants.%Iterate.lookup_impl_witness.e7e, element2 [symbolic = %impl.elem2.loc36_19.3 (constants.%impl.elem2.e3e)] // CHECK:STDOUT: %bound_method.loc36_19.1: = bound_method %r.ref, %impl.elem2.loc36_19.1 // CHECK:STDOUT: %Iterate.facet.loc36_19.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e7e) [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc36_19.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc36_19.1 [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %Iterate.facet.loc36_19.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e7e) [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc36_19.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc36_19.2 [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %specific_impl_fn.loc36_19.1: = specific_impl_function %impl.elem2.loc36_19.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.a43) [symbolic = %specific_impl_fn.loc36_19.4 (constants.%specific_impl_fn.0ea)] // CHECK:STDOUT: %bound_method.loc36_19.2: = bound_method %r.ref, %specific_impl_fn.loc36_19.1 // CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.ba7) = var_storage invalid // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.ba7) to %var = call %bound_method.loc36_19.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3.loc36_19.1: @TestIterate.%.loc36_19.20 (%.fe7) = impl_witness_access constants.%Iterate.lookup_impl_witness.e7e, element3 [symbolic = %impl.elem3.loc36_19.2 (constants.%impl.elem3.ae5)] // CHECK:STDOUT: %bound_method.loc36_19.3: = bound_method %r.ref, %impl.elem3.loc36_19.1 // CHECK:STDOUT: %Iterate.facet.loc36_19.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e7e) [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc36_19.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc36_19.3 [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %Iterate.facet.loc36_19.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.e7e) [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc36_19.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc36_19.4 [symbolic = %Iterate.facet.loc36_19.5 (constants.%Iterate.facet.a43)] // CHECK:STDOUT: %.loc36_19.5: %Destroy.type = converted constants.%as_type.ba7, constants.%impl.elem1.2af [symbolic = %impl.elem1 (constants.%impl.elem1.2af)] // CHECK:STDOUT: %.loc36_19.6: %Destroy.type = converted constants.%as_type.ba7, constants.%impl.elem1.2af [symbolic = %impl.elem1 (constants.%impl.elem1.2af)] // CHECK:STDOUT: %specific_impl_fn.loc36_19.2: = specific_impl_function %impl.elem3.loc36_19.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.a43) [symbolic = %specific_impl_fn.loc36_19.5 (constants.%specific_impl_fn.493)] // CHECK:STDOUT: %bound_method.loc36_19.4: = bound_method %r.ref, %specific_impl_fn.loc36_19.2 // CHECK:STDOUT: %.loc36_19.7: ref %Optional.000 = temporary_storage // CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.000 to %.loc36_19.7 = call %bound_method.loc36_19.4(%r.ref, %var) // CHECK:STDOUT: %.loc36_19.8: ref %Optional.000 = temporary %.loc36_19.7, %Iterate.WithSelf.Next.call // CHECK:STDOUT: %.loc36_19.9: %Optional.HasValue.type.92f = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.HasValue.ff5] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.92f = name_ref HasValue, %.loc36_19.9 [concrete = constants.%Optional.HasValue.ff5] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc36_19.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.HasValue.specific_fn.315] // CHECK:STDOUT: %bound_method.loc36_19.5: = bound_method %.loc36_19.8, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc36_19.10: %Optional.000 = acquire_value %.loc36_19.8 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc36_19.5(%.loc36_19.10) // CHECK:STDOUT: %.loc36_19.11: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc36_19.12: bool = converted %Optional.HasValue.call, %.loc36_19.11 // CHECK:STDOUT: if %.loc36_19.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc36_19.13: %Optional.Get.type.695 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.Get.62a] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.695 = name_ref Get, %.loc36_19.13 [concrete = constants.%Optional.Get.62a] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc36_19.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.Get.specific_fn.570] // CHECK:STDOUT: %bound_method.loc36_19.6: = bound_method %.loc36_19.8, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc36_19.14: %Optional.000 = acquire_value %.loc36_19.8 // CHECK:STDOUT: %Optional.Get.call: init %f64.761 = call %bound_method.loc36_19.6(%.loc36_19.14) // CHECK:STDOUT: %.loc36_19.15: %f64.761 = value_of_initializer %Optional.Get.call // CHECK:STDOUT: %.loc36_19.16: %f64.761 = converted %Optional.Get.call, %.loc36_19.15 // CHECK:STDOUT: %f64.loc36: type = type_literal constants.%f64.761 [concrete = constants.%f64.761] // CHECK:STDOUT: %i: %f64.761 = wrapper_binding i, %.loc36_19.16 // CHECK:STDOUT: %sum.ref: ref %f64.761 = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %f64.761 = name_ref i, %i // CHECK:STDOUT: %impl.elem0.loc37: %.48b = impl_witness_access constants.%AddAssignWith.impl_witness.5c7, element0 [concrete = constants.%Float.as.AddAssignWith.impl.Op.e04] // CHECK:STDOUT: %bound_method.loc37_9.1: = bound_method %sum.ref, %impl.elem0.loc37 // CHECK:STDOUT: %specific_fn.loc37: = specific_function %impl.elem0.loc37, @Float.as.AddAssignWith.impl.Op(constants.%int_64) [concrete = constants.%Float.as.AddAssignWith.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc37_9.2: = bound_method %sum.ref, %specific_fn.loc37 // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.call: init %empty_tuple.type = call %bound_method.loc37_9.2(%sum.ref, %i.ref) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc36_19.1: = bound_method %.loc36_19.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc36_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc36_19.1(%.loc36_19.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc36_19.2: = bound_method %.loc36_19.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc36_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc36_19.2(%.loc36_19.8) // CHECK:STDOUT: %impl.elem2.loc36_19.2: @TestIterate.%.loc36_19.21 (%.421) = impl_witness_access constants.%Destroy.lookup_impl_witness.cb1, element2 [symbolic = %impl.elem2.loc36_19.4 (constants.%impl.elem2.f8d)] // CHECK:STDOUT: %bound_method.loc36_19.7: = bound_method %var, %impl.elem2.loc36_19.2 // CHECK:STDOUT: %.loc36_19.17: %Destroy.type = converted constants.%as_type.ba7, constants.%impl.elem1.2af [symbolic = %impl.elem1 (constants.%impl.elem1.2af)] // CHECK:STDOUT: %.loc36_19.18: %Destroy.type = converted constants.%as_type.ba7, constants.%impl.elem1.2af [symbolic = %impl.elem1 (constants.%impl.elem1.2af)] // CHECK:STDOUT: %specific_impl_fn.loc36_19.3: = specific_impl_function %impl.elem2.loc36_19.2, @Destroy.WithSelf.SelfDestruct.1(constants.%impl.elem1.2af) [symbolic = %specific_impl_fn.loc36_19.6 (constants.%specific_impl_fn.6a1)] // CHECK:STDOUT: %bound_method.loc36_19.8: = bound_method %var, %specific_impl_fn.loc36_19.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc36_19.3: init %empty_tuple.type = call %bound_method.loc36_19.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc36_19.1(%self.param: ref %.ecc) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc36_19.1(%self.param: ref %.ecc) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc36_19.1(%self.param: ref %.ecc) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.2(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.2(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc36_19.2(%self.param: ref %MaybeUnformed.912) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc36_19.2(%self.param: ref %MaybeUnformed.912) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc36_19.2(%self.param: ref %MaybeUnformed.912) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.3(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.3(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc36_19.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc36_19.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc36_19.3(%self.param: ref bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.4(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.4(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc36_19.4(%self.param: ref %struct_type.value.has_value.82f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc36_19.1: ref bool = struct_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc36_19.1: = bound_method %.loc36_19.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc36_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc36_19.1(%.loc36_19.1) // CHECK:STDOUT: %.loc36_19.2: ref %MaybeUnformed.912 = struct_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc36_19.2: = bound_method %.loc36_19.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc36_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc36_19.2(%.loc36_19.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc36_19.4(%self.param: ref %struct_type.value.has_value.82f) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc36_19.4(%self.param: ref %struct_type.value.has_value.82f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.5(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.5(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc36_19.5(%self.param: ref %DefaultOptionalStorage.6ea) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %has_value.ref: %DefaultOptionalStorage.elem.b33 = name_ref has_value, imports.%Core.import_ref.e86 [concrete = imports.%field_decl.390] // CHECK:STDOUT: %.loc36_19.1: ref bool = class_element_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc36_19.1: = bound_method %.loc36_19.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc36_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc36_19.1(%.loc36_19.1) // CHECK:STDOUT: %value.ref: %DefaultOptionalStorage.elem.9ab = name_ref value, imports.%Core.import_ref.373 [concrete = imports.%field_decl.498] // CHECK:STDOUT: %.loc36_19.2: ref %MaybeUnformed.912 = class_element_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc36_19.2: = bound_method %.loc36_19.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc36_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc36_19.2(%.loc36_19.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc36_19.5(%self.param: ref %DefaultOptionalStorage.6ea) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc36_19.5(%self.param: ref %DefaultOptionalStorage.6ea) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.6(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.6(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc36_19.6(%self.param: ref %Optional.000) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc36_19.6(%self.param: ref %Optional.000) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc36_19.6(%self.param: ref %Optional.000) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.7(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.7(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @TestRangeFor(%m.param: ref %MutableRange) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.667 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %m.ref: ref %MutableRange = name_ref m, %m // CHECK:STDOUT: %impl.elem2: %.177 = impl_witness_access constants.%Iterate.impl_witness.8eb, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.f32] // CHECK:STDOUT: %bound_method.loc50_19.1: = bound_method %m.ref, %impl.elem2 // CHECK:STDOUT: %facet_value.loc50_19.1: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.902, constants.%custom_witness.e74, constants.%custom_witness.0a8, constants.%custom_witness.491, constants.%custom_witness.068, constants.%custom_witness.f8f19d.2, constants.%Copy.impl_witness.eac, constants.%custom_witness.e74) [concrete = constants.%facet_value.c62] // CHECK:STDOUT: %.loc50_19.1: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc50_19.1 [concrete = constants.%facet_value.c62] // CHECK:STDOUT: %facet_value.loc50_19.2: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.902, constants.%custom_witness.e74, constants.%custom_witness.0a8, constants.%custom_witness.491, constants.%custom_witness.068, constants.%custom_witness.f8f19d.2, constants.%Copy.impl_witness.eac, constants.%custom_witness.e74) [concrete = constants.%facet_value.c62] // CHECK:STDOUT: %.loc50_19.2: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc50_19.2 [concrete = constants.%facet_value.c62] // CHECK:STDOUT: %specific_fn.loc50_19.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.c62) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] // CHECK:STDOUT: %bound_method.loc50_19.2: = bound_method %m.ref, %specific_fn.loc50_19.1 // CHECK:STDOUT: %var: ref %tuple.type.dd0 = var_storage invalid // CHECK:STDOUT: %.loc50_18.1: %MutableRange = acquire_value %m.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.dd0 to %var = call %bound_method.loc50_19.2(%.loc50_18.1) // CHECK:STDOUT: assign %var, %T.as_type.as.Iterate.impl.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3: %.d10 = impl_witness_access constants.%Iterate.impl_witness.8eb, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.8a0] // CHECK:STDOUT: %bound_method.loc50_19.3: = bound_method %m.ref, %impl.elem3 // CHECK:STDOUT: %facet_value.loc50_19.3: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.902, constants.%custom_witness.e74, constants.%custom_witness.0a8, constants.%custom_witness.491, constants.%custom_witness.068, constants.%custom_witness.f8f19d.2, constants.%Copy.impl_witness.eac, constants.%custom_witness.e74) [concrete = constants.%facet_value.c62] // CHECK:STDOUT: %.loc50_19.3: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc50_19.3 [concrete = constants.%facet_value.c62] // CHECK:STDOUT: %facet_value.loc50_19.4: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.902, constants.%custom_witness.e74, constants.%custom_witness.0a8, constants.%custom_witness.491, constants.%custom_witness.068, constants.%custom_witness.f8f19d.2, constants.%Copy.impl_witness.eac, constants.%custom_witness.e74) [concrete = constants.%facet_value.c62] // CHECK:STDOUT: %.loc50_19.4: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc50_19.4 [concrete = constants.%facet_value.c62] // CHECK:STDOUT: %specific_fn.loc50_19.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.c62) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] // CHECK:STDOUT: %bound_method.loc50_19.4: = bound_method %m.ref, %specific_fn.loc50_19.2 // CHECK:STDOUT: %.loc50_19.5: ref %Optional.000 = temporary_storage // CHECK:STDOUT: %.loc50_18.2: %MutableRange = acquire_value %m.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.000 to %.loc50_19.5 = call %bound_method.loc50_19.4(%.loc50_18.2, %var) // CHECK:STDOUT: %.loc50_19.6: ref %Optional.000 = temporary %.loc50_19.5, %T.as_type.as.Iterate.impl.Next.call // CHECK:STDOUT: %.loc50_19.7: %Optional.HasValue.type.92f = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.HasValue.ff5] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.92f = name_ref HasValue, %.loc50_19.7 [concrete = constants.%Optional.HasValue.ff5] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc50_19.6, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.HasValue.specific_fn.315] // CHECK:STDOUT: %bound_method.loc50_19.5: = bound_method %.loc50_19.6, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc50_19.8: %Optional.000 = acquire_value %.loc50_19.6 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc50_19.5(%.loc50_19.8) // CHECK:STDOUT: %.loc50_19.9: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc50_19.10: bool = converted %Optional.HasValue.call, %.loc50_19.9 // CHECK:STDOUT: if %.loc50_19.10 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc50_19.11: %Optional.Get.type.695 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.Get.62a] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.695 = name_ref Get, %.loc50_19.11 [concrete = constants.%Optional.Get.62a] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc50_19.6, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.d7a) [concrete = constants.%Optional.Get.specific_fn.570] // CHECK:STDOUT: %bound_method.loc50_19.6: = bound_method %.loc50_19.6, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc50_19.12: %Optional.000 = acquire_value %.loc50_19.6 // CHECK:STDOUT: %Optional.Get.call: init %f64.761 = call %bound_method.loc50_19.6(%.loc50_19.12) // CHECK:STDOUT: %.loc50_19.13: %f64.761 = value_of_initializer %Optional.Get.call // CHECK:STDOUT: %.loc50_19.14: %f64.761 = converted %Optional.Get.call, %.loc50_19.13 // CHECK:STDOUT: %f64.loc50: type = type_literal constants.%f64.761 [concrete = constants.%f64.761] // CHECK:STDOUT: %i: %f64.761 = wrapper_binding i, %.loc50_19.14 // CHECK:STDOUT: %sum.ref: ref %f64.761 = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %f64.761 = name_ref i, %i // CHECK:STDOUT: %impl.elem0.loc51: %.48b = impl_witness_access constants.%AddAssignWith.impl_witness.5c7, element0 [concrete = constants.%Float.as.AddAssignWith.impl.Op.e04] // CHECK:STDOUT: %bound_method.loc51_9.1: = bound_method %sum.ref, %impl.elem0.loc51 // CHECK:STDOUT: %specific_fn.loc51: = specific_function %impl.elem0.loc51, @Float.as.AddAssignWith.impl.Op(constants.%int_64) [concrete = constants.%Float.as.AddAssignWith.impl.Op.specific_fn] // CHECK:STDOUT: %bound_method.loc51_9.2: = bound_method %sum.ref, %specific_fn.loc51 // CHECK:STDOUT: %Float.as.AddAssignWith.impl.Op.call: init %empty_tuple.type = call %bound_method.loc51_9.2(%sum.ref, %i.ref) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc50_19.1: = bound_method %.loc50_19.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc50_19.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc50_19.1(%.loc50_19.6) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc50_19.2: = bound_method %.loc50_19.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc50_19.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc50_19.2(%.loc50_19.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc50_19.3: = bound_method %var, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc50_19.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc50_19.3(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc32_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc32_17.1 => constants.%R // CHECK:STDOUT: %R.as_type.loc32_61.1 => constants.%R.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.874 // CHECK:STDOUT: %r.param_patt.loc32_59.2 => constants.%r.param_patt.ef5 // CHECK:STDOUT: %r.patt.loc32_59.2 => constants.%r.patt.c43 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.da8) { // CHECK:STDOUT: %R.patt.loc32_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc32_17.1 => constants.%facet_value.da8 // CHECK:STDOUT: %R.as_type.loc32_61.1 => constants.%MutableRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.992 // CHECK:STDOUT: %r.param_patt.loc32_59.2 => constants.%r.param_patt.aeb // CHECK:STDOUT: %r.patt.loc32_59.2 => constants.%r.patt.892 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc32 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.8eb // CHECK:STDOUT: %Iterate.facet.loc36_19.5 => constants.%Iterate.facet.b38 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.601 // CHECK:STDOUT: %.loc36_19.19 => constants.%.177 // CHECK:STDOUT: %impl.elem2.loc36_19.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.f32 // CHECK:STDOUT: %specific_impl_fn.loc36_19.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.f0b // CHECK:STDOUT: %as_type => constants.%tuple.type.dd0 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.843 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.63c // CHECK:STDOUT: %.loc36_19.20 => constants.%.d10 // CHECK:STDOUT: %impl.elem3.loc36_19.2 => constants.%T.as_type.as.Iterate.impl.Next.8a0 // CHECK:STDOUT: %specific_impl_fn.loc36_19.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.1a9 // CHECK:STDOUT: %.loc36_19.21 => constants.%.4a2 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.9 // CHECK:STDOUT: %impl.elem2.loc36_19.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: %specific_impl_fn.loc36_19.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- adl_returns_different_types.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: type: type = facet_type [concrete] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %facet_type.f48: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Get.type.786: type = fn_type @Optional.Get, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Get.2d0: %Optional.Get.type.786 = struct_value () [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.3ea: type = fn_type @Optional.HasValue, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.HasValue.f2f: %Optional.HasValue.type.3ea = struct_value () [symbolic] // CHECK:STDOUT: %T.283: %facet_type.f48 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.28a: = lookup_impl_witness %T.283, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.16e: %Destroy.type = facet_value %T.as_type.74b, (%Destroy.lookup_impl_witness.28a) [symbolic] // CHECK:STDOUT: %MaybeUnformed.91c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.16e) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.ade: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%T.283) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b49: type = unbound_element_type %DefaultOptionalStorage.ade, bool [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.229: type = unbound_element_type %DefaultOptionalStorage.ade, %MaybeUnformed.91c [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.type.2f2: type = fn_type @T.as_type.as.OptionalStorage.impl.Get, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.884: %T.as_type.as.OptionalStorage.impl.Get.type.2f2 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d28: 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.f29: %T.as_type.as.OptionalStorage.impl.Has.type.d28 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.type.760: type = fn_type @T.as_type.as.OptionalStorage.impl.Some, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.268: %T.as_type.as.OptionalStorage.impl.Some.type.760 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.925: 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.f42: %T.as_type.as.OptionalStorage.impl.None.type.925 = struct_value () [symbolic] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRange.type: type = facet_type <@CppRange> [concrete] // CHECK:STDOUT: %.Self.e0b: %CppRange.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.50b: = lookup_impl_witness %.Self.e0b, @CppRangeForIterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.32d: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.50b, element0 [symbolic_self] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.851: = lookup_impl_witness %impl.elem0.32d, @CppUnsafeDeref [symbolic_self] // CHECK:STDOUT: %impl.elem0.10d: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.851, element0 [symbolic_self] // CHECK:STDOUT: %CppRange_where.type.d682d6.1: type = facet_type <@CppRange where %impl.elem0.10d impls @Copy> [concrete] // CHECK:STDOUT: %T.f45530.2: %CppRange_where.type.d682d6.1 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.d4a: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.5a8: %T.as_type.as.Iterate.impl.Next.type.d4a = struct_value () [symbolic] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.b581a8.2: = lookup_impl_witness %T.f45530.2, @CppRangeForIterate [symbolic] // CHECK:STDOUT: %impl.elem0.5f971c.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element0 [symbolic] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.87e543.2: = lookup_impl_witness %impl.elem0.5f971c.2, @CppUnsafeDeref [symbolic] // CHECK:STDOUT: %impl.elem0.493765.2: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.87e543.2, element0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.8fb: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.8a1: %T.as_type.as.Iterate.impl.NewCursor.type.8fb = struct_value () [symbolic] // CHECK:STDOUT: %impl.elem1.c2dc15.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element1 [symbolic] // CHECK:STDOUT: %tuple.type.1ba: type = tuple_type (%impl.elem0.5f971c.2, %impl.elem1.c2dc15.2) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.812: = lookup_impl_witness %tuple.type.1ba, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.9cd: %Destroy.type = facet_value %tuple.type.1ba, (%Destroy.lookup_impl_witness.812) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [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.c43: type = pattern_type %ValueType [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc27 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc27 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %ValueType.SubobjectDestroy.type: type = fn_type @ValueType.SubobjectDestroy [concrete] // CHECK:STDOUT: %ValueType.SubobjectDestroy: %ValueType.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.226: = custom_witness (%Destroy.WithSelf.Op.403171.2, %ValueType.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.2), @Destroy [concrete] // CHECK:STDOUT: %const.dd6: type = const_type %ValueType [concrete] // CHECK:STDOUT: %ptr.69c: type = ptr_type %const.dd6 [concrete] // CHECK:STDOUT: %ptr.233: type = ptr_type %ValueType [concrete] // CHECK:STDOUT: %ValueType.Op.type: type = fn_type @ValueType.Op [concrete] // CHECK:STDOUT: %ValueType.Op: %ValueType.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.202: = custom_witness (%ValueType.Op), @Copy [concrete] // CHECK:STDOUT: %facet_value.978: %facet_type.f48 = facet_value %ValueType, (%custom_witness.226, %custom_witness.202) [concrete] // 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.87e: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.978> [concrete] // CHECK:STDOUT: %pattern_type.ba8: type = pattern_type %Iterate_where.type.87e [concrete] // CHECK:STDOUT: %R.patt: %pattern_type.ba8 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R: %Iterate_where.type.87e = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] // CHECK:STDOUT: %pattern_type.053: type = pattern_type %R.as_type [symbolic] // CHECK:STDOUT: %r.param_patt.75e: %pattern_type.053 = value_param_pattern [symbolic] // CHECK:STDOUT: %r.patt.82a: %pattern_type.053 = wrapper_binding_pattern r, %r.param_patt.75e [symbolic] // CHECK:STDOUT: %i.patt: %pattern_type.c43 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.01e: = lookup_impl_witness %R, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.467: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.01e) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.b87: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.467) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.526: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.467) [symbolic] // CHECK:STDOUT: %.c11: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.b87, %Iterate.facet.467 [symbolic] // CHECK:STDOUT: %impl.elem2.978: %.c11 = impl_witness_access %Iterate.lookup_impl_witness.01e, element2 [symbolic] // CHECK:STDOUT: %impl.elem1.d56: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.01e, element1 [symbolic] // CHECK:STDOUT: %as_type.db9: type = facet_access_type %impl.elem1.d56 [symbolic] // CHECK:STDOUT: %specific_impl_fn.f0e: = specific_impl_function %impl.elem2.978, @Iterate.WithSelf.NewCursor(%Iterate.facet.467) [symbolic] // CHECK:STDOUT: %.118: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.526, %Iterate.facet.467 [symbolic] // CHECK:STDOUT: %impl.elem3.2b1: %.118 = impl_witness_access %Iterate.lookup_impl_witness.01e, element3 [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.8e6: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.978) [concrete] // CHECK:STDOUT: %OptionalStorage.impl_witness.13c: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.978) [concrete] // CHECK:STDOUT: %OptionalStorage.facet.0d1: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.13c) [concrete] // CHECK:STDOUT: %Optional.b4b: type = class_type @Optional, @Optional(%OptionalStorage.facet.0d1) [concrete] // CHECK:STDOUT: %pattern_type.f6f: type = pattern_type %Optional.b4b [concrete] // CHECK:STDOUT: %specific_impl_fn.3f1: = specific_impl_function %impl.elem3.2b1, @Iterate.WithSelf.Next(%Iterate.facet.467) [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.1a1: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.0d1) [concrete] // CHECK:STDOUT: %Optional.HasValue.766: %Optional.HasValue.type.1a1 = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.edf: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.0d1) [concrete] // CHECK:STDOUT: %Optional.Get.047: %Optional.Get.type.edf = struct_value () [concrete] // CHECK:STDOUT: %Destroy.facet.c1d: %Destroy.type = facet_value %ValueType, (%custom_witness.226) [concrete] // CHECK:STDOUT: %MaybeUnformed.485: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.c1d) [concrete] // CHECK:STDOUT: %.be1: type = maybe_unformed_type %ValueType [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.4bc: type = unbound_element_type %DefaultOptionalStorage.8e6, %MaybeUnformed.485 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.97e: type = unbound_element_type %DefaultOptionalStorage.8e6, bool [concrete] // CHECK:STDOUT: %struct_type.value.has_value.718: type = struct_type {.value: %MaybeUnformed.485, .has_value: bool} [concrete] // CHECK:STDOUT: %Optional.HasValue.specific_fn.98f: = specific_function %Optional.HasValue.766, @Optional.HasValue(%OptionalStorage.facet.0d1) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn.9f0: = specific_function %Optional.Get.047, @Optional.Get(%OptionalStorage.facet.0d1) [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.type: type = fn_type @operator_PlusEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk: %operator_PlusEqual__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.ce5: type = pattern_type %.be1 [concrete] // CHECK:STDOUT: %self.param_patt.36c: %pattern_type.ce5 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.548: %pattern_type.ce5 = wrapper_binding_pattern self, %self.param_patt.36c [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc31_37.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc31_37.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.96c: type = pattern_type %MaybeUnformed.485 [concrete] // CHECK:STDOUT: %self.param_patt.aad: %pattern_type.96c = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.180: %pattern_type.96c = wrapper_binding_pattern self, %self.param_patt.aad [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc31_37.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.4: type = fn_type @Destroy.WithSelf.Op.loc31_37.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.4: %Destroy.WithSelf.Op.type.ef016f.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4: type = fn_type @Destroy.WithSelf.SelfDestruct.loc31_37.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.4: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.40d: %pattern_type.831 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.560: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt.40d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc31_37.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.5: type = fn_type @Destroy.WithSelf.Op.loc31_37.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.5: %Destroy.WithSelf.Op.type.ef016f.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5: type = fn_type @Destroy.WithSelf.SelfDestruct.loc31_37.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.5: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.0f6: type = pattern_type %struct_type.value.has_value.718 [concrete] // CHECK:STDOUT: %self.param_patt.244: %pattern_type.0f6 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.781: %pattern_type.0f6 = wrapper_binding_pattern self, %self.param_patt.244 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc31_37.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc31_37.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.cd3: type = pattern_type %DefaultOptionalStorage.8e6 [concrete] // CHECK:STDOUT: %self.param_patt.c9e: %pattern_type.cd3 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.369: %pattern_type.cd3 = wrapper_binding_pattern self, %self.param_patt.c9e [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc31_37.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc31_37.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.53e: %pattern_type.f6f = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.78b: %pattern_type.f6f = wrapper_binding_pattern self, %self.param_patt.53e [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc31_37.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.8: type = fn_type @Destroy.WithSelf.Op.loc31_37.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.8: %Destroy.WithSelf.Op.type.ef016f.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8: type = fn_type @Destroy.WithSelf.SelfDestruct.loc31_37.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.8: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.d0e: = lookup_impl_witness %impl.elem1.d56, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.726: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1.d56) [symbolic] // CHECK:STDOUT: %.a54: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.726, %impl.elem1.d56 [symbolic] // CHECK:STDOUT: %impl.elem2.9bf: %.a54 = impl_witness_access %Destroy.lookup_impl_witness.d0e, element2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.2dd: = specific_impl_function %impl.elem2.9bf, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1.d56) [symbolic] // CHECK:STDOUT: %ConstRange: type = class_type @ConstRange [concrete] // CHECK:STDOUT: %pattern_type.c1d: type = pattern_type %ConstRange [concrete] // CHECK:STDOUT: %Iterator: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %Sentinel: type = class_type @Sentinel.1 [concrete] // CHECK:STDOUT: %Begin.type: type = fn_type @Begin [concrete] // CHECK:STDOUT: %Begin: %Begin.type = struct_value () [concrete] // CHECK:STDOUT: %End.type: type = fn_type @End [concrete] // CHECK:STDOUT: %End: %End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.116: = custom_witness (%Iterator, %Sentinel, %Begin, %End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.9: type = fn_type @Destroy.WithSelf.Op.loc38_16.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.9: %Destroy.WithSelf.Op.type.ef016f.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9: type = fn_type @Destroy.WithSelf.SelfDestruct.loc38_16.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.9: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type: type = fn_type @Iterator.SubobjectDestroy [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy: %Iterator.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.429ac1.1: = custom_witness (%Destroy.WithSelf.Op.403171.9, %Iterator.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.9), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.3f6dc2.1: type = fn_type @Iterator.Op.1 [concrete] // CHECK:STDOUT: %Iterator.Op.240e50.1: %Iterator.Op.type.3f6dc2.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.5be: = custom_witness (%ValueType, %Iterator.Op.240e50.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.3f6dc2.2: type = fn_type @Iterator.Op.2 [concrete] // CHECK:STDOUT: %Iterator.Op.240e50.2: %Iterator.Op.type.3f6dc2.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.c31: = custom_witness (%Iterator.Op.240e50.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type: type = fn_type @NotEqual [concrete] // CHECK:STDOUT: %NotEqual: %NotEqual.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.bf4: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Sentinel) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.10: type = fn_type @Destroy.WithSelf.Op.loc38_16.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.10: %Destroy.WithSelf.Op.type.ef016f.10 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10: type = fn_type @Destroy.WithSelf.SelfDestruct.loc38_16.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.10: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10 = struct_value () [concrete] // CHECK:STDOUT: %Sentinel.SubobjectDestroy.type: type = fn_type @Sentinel.SubobjectDestroy [concrete] // CHECK:STDOUT: %Sentinel.SubobjectDestroy: %Sentinel.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.429ac1.2: = custom_witness (%Destroy.WithSelf.Op.403171.10, %Sentinel.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.10), @Destroy [concrete] // CHECK:STDOUT: %facet_value.d15: %CppRange_where.type.d682d6.1 = facet_value %ConstRange, (%custom_witness.116, %custom_witness.429ac1.1, %custom_witness.5be, %custom_witness.c31, %custom_witness.bf4, %custom_witness.226, %custom_witness.202, %custom_witness.429ac1.2) [concrete] // CHECK:STDOUT: %tuple.type.7a6: type = tuple_type (%Iterator, %Sentinel) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8: type = fn_type @Destroy.WithSelf.SubobjectDestroy.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.8: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.11: type = fn_type @Destroy.WithSelf.Op.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.11: %Destroy.WithSelf.Op.type.ef016f.11 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.11: type = fn_type @Destroy.WithSelf.SelfDestruct.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.11: %Destroy.WithSelf.SelfDestruct.type.fbceb5.11 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.8: = custom_witness (%Destroy.WithSelf.Op.403171.11, %Destroy.WithSelf.SubobjectDestroy.d01daf.8, %Destroy.WithSelf.SelfDestruct.db3fdb.11), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.d83: %Destroy.type = facet_value %tuple.type.7a6, (%custom_witness.f8f19d.8) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.d1d: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.d15) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.755: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.d15) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.437: %T.as_type.as.Iterate.impl.NewCursor.type.755 = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.b75: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.d15) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.82c: %T.as_type.as.Iterate.impl.Next.type.b75 = struct_value () [concrete] // CHECK:STDOUT: %facet_value.1d8: %Iterate_where.type.87e = facet_value %ConstRange, (%Iterate.impl_witness.d1d) [concrete] // CHECK:STDOUT: %r.param_patt.ac5: %pattern_type.c1d = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.97f: %pattern_type.c1d = wrapper_binding_pattern r, %r.param_patt.ac5 [concrete] // CHECK:STDOUT: %Iterate.facet.8d3: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.d1d) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.7f7: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.8d3) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.035: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.8d3) [concrete] // CHECK:STDOUT: %.8c0: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.7f7, %Iterate.facet.8d3 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.437, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.d15) [concrete] // CHECK:STDOUT: %.b64: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.035, %Iterate.facet.8d3 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.82c, @T.as_type.as.Iterate.impl.Next(%facet_value.d15) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.000: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.d83) [concrete] // CHECK:STDOUT: %.dc3: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.000, %Destroy.facet.d83 [concrete] // CHECK:STDOUT: %complete_type.cf0: = complete_type_witness %tuple.type.7a6 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .DiffADL = %DiffADL // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.c82: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.3ea) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.f2f)] // CHECK:STDOUT: %Core.import_ref.29e: @Optional.%Optional.Get.type (%Optional.Get.type.786) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Get (constants.%Optional.Get.2d0)] // CHECK:STDOUT: %Core.import_ref.2e7: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.ade)] // CHECK:STDOUT: %Core.import_ref.ef4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.925) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f42)] // CHECK:STDOUT: %Core.import_ref.a20: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.760) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.268)] // CHECK:STDOUT: %Core.import_ref.af7: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.d28) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.f29)] // CHECK:STDOUT: %Core.import_ref.dd4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.2f2) = 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.884)] // CHECK:STDOUT: %Core.import_ref.554 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.2e7, %Core.import_ref.ef4, %Core.import_ref.a20, %Core.import_ref.af7, %Core.import_ref.dd4, %Core.import_ref.554), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.373: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.498] // CHECK:STDOUT: %Core.import_ref.e86: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.390] // CHECK:STDOUT: %Core.import_ref.eef: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.f93)] // CHECK:STDOUT: %Core.import_ref.fcc: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.9cd)] // CHECK:STDOUT: %Core.import_ref.946: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.8fb) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.8a1)] // CHECK:STDOUT: %Core.import_ref.cfb: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.d4a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.5a8)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.946, %Core.import_ref.cfb), @T.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %DiffADL: = namespace [concrete] { // CHECK:STDOUT: .ValueType = %ValueType.decl // CHECK:STDOUT: .ConstRange = %ConstRange.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %ValueType.decl: type = class_decl @ValueType [concrete = constants.%ValueType] {} {} // 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: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.b0d0 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.390: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = field_decl has_value, element1, %Core.import_ref.b0d0 in [concrete] {} // CHECK:STDOUT: %Core.import_ref.ab7 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.498: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = field_decl value, element0, %Core.import_ref.ab7 in [concrete] {} // CHECK:STDOUT: %ConstRange.decl: type = class_decl @ConstRange [concrete = constants.%ConstRange] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc31_37.1 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.2] { // CHECK:STDOUT: %self.param_patt: %pattern_type.ce5 = ref_param_pattern [concrete = constants.%self.param_patt.36c] // CHECK:STDOUT: %self.patt: %pattern_type.ce5 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.548] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.be1 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.be1 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.2: %Destroy.WithSelf.Op.type.ef016f.3 = fn_decl @Destroy.WithSelf.Op.loc31_37.1 [concrete = constants.%Destroy.WithSelf.Op.403171.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.ce5 = ref_param_pattern [concrete = constants.%self.param_patt.36c] // CHECK:STDOUT: %self.patt: %pattern_type.ce5 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.548] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.be1 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.be1 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc31_37.2 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.96c = ref_param_pattern [concrete = constants.%self.param_patt.aad] // CHECK:STDOUT: %self.patt: %pattern_type.96c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.180] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.485 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.485 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.3: %Destroy.WithSelf.Op.type.ef016f.4 = fn_decl @Destroy.WithSelf.Op.loc31_37.2 [concrete = constants.%Destroy.WithSelf.Op.403171.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.96c = ref_param_pattern [concrete = constants.%self.param_patt.aad] // CHECK:STDOUT: %self.patt: %pattern_type.96c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.180] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.485 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.485 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc31_37.3 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.4: %Destroy.WithSelf.Op.type.ef016f.5 = fn_decl @Destroy.WithSelf.Op.loc31_37.3 [concrete = constants.%Destroy.WithSelf.Op.403171.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc31_37.4 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.0f6 = ref_param_pattern [concrete = constants.%self.param_patt.244] // CHECK:STDOUT: %self.patt: %pattern_type.0f6 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.781] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.718 = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.718 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.5: %Destroy.WithSelf.Op.type.ef016f.6 = fn_decl @Destroy.WithSelf.Op.loc31_37.4 [concrete = constants.%Destroy.WithSelf.Op.403171.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.0f6 = ref_param_pattern [concrete = constants.%self.param_patt.244] // CHECK:STDOUT: %self.patt: %pattern_type.0f6 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.781] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.718 = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.718 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc31_37.5 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.cd3 = ref_param_pattern [concrete = constants.%self.param_patt.c9e] // CHECK:STDOUT: %self.patt: %pattern_type.cd3 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.369] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.8e6 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.8e6 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.6: %Destroy.WithSelf.Op.type.ef016f.7 = fn_decl @Destroy.WithSelf.Op.loc31_37.5 [concrete = constants.%Destroy.WithSelf.Op.403171.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.cd3 = ref_param_pattern [concrete = constants.%self.param_patt.c9e] // CHECK:STDOUT: %self.patt: %pattern_type.cd3 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.369] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.8e6 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.8e6 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc31_37.6 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.f6f = ref_param_pattern [concrete = constants.%self.param_patt.53e] // CHECK:STDOUT: %self.patt: %pattern_type.f6f = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.78b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.b4b = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.b4b = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.7: %Destroy.WithSelf.Op.type.ef016f.8 = fn_decl @Destroy.WithSelf.Op.loc31_37.6 [concrete = constants.%Destroy.WithSelf.Op.403171.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.f6f = ref_param_pattern [concrete = constants.%self.param_patt.53e] // CHECK:STDOUT: %self.patt: %pattern_type.f6f = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.78b] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.b4b = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.b4b = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestIterate(%R.loc27_17.2: %Iterate_where.type.87e) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc27_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.01e)] // CHECK:STDOUT: %Iterate.facet.loc31_37.5: %Iterate.type = facet_value %R.as_type.loc27_79.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc31_37.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.b87)] // CHECK:STDOUT: %.loc31_37.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc31_37.5 [symbolic = %.loc31_37.20 (constants.%.c11)] // CHECK:STDOUT: %impl.elem2.loc31_37.3: @TestIterate.%.loc31_37.20 (%.c11) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc31_37.3 (constants.%impl.elem2.978)] // CHECK:STDOUT: %specific_impl_fn.loc31_37.4: = specific_impl_function %impl.elem2.loc31_37.3, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc31_37.5) [symbolic = %specific_impl_fn.loc31_37.4 (constants.%specific_impl_fn.f0e)] // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc31_37.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.526)] // CHECK:STDOUT: %.loc31_37.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc31_37.5 [symbolic = %.loc31_37.21 (constants.%.118)] // CHECK:STDOUT: %impl.elem3.loc31_37.2: @TestIterate.%.loc31_37.21 (%.118) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc31_37.2 (constants.%impl.elem3.2b1)] // CHECK:STDOUT: %specific_impl_fn.loc31_37.5: = specific_impl_function %impl.elem3.loc31_37.2, @Iterate.WithSelf.Next(%Iterate.facet.loc31_37.5) [symbolic = %specific_impl_fn.loc31_37.5 (constants.%specific_impl_fn.3f1)] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.SelfDestruct.type (constants.%Destroy.WithSelf.SelfDestruct.type.726)] // CHECK:STDOUT: %.loc31_37.22: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type, %impl.elem1 [symbolic = %.loc31_37.22 (constants.%.a54)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.d0e)] // CHECK:STDOUT: %impl.elem2.loc31_37.4: @TestIterate.%.loc31_37.22 (%.a54) = impl_witness_access %Destroy.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc31_37.4 (constants.%impl.elem2.9bf)] // CHECK:STDOUT: %specific_impl_fn.loc31_37.6: = specific_impl_function %impl.elem2.loc31_37.4, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1) [symbolic = %specific_impl_fn.loc31_37.6 (constants.%specific_impl_fn.2dd)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc27_79.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.c43 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc27_79.1 (%R.as_type) = name_ref r, %r // CHECK:STDOUT: %impl.elem2.loc31_37.1: @TestIterate.%.loc31_37.20 (%.c11) = impl_witness_access constants.%Iterate.lookup_impl_witness.01e, element2 [symbolic = %impl.elem2.loc31_37.3 (constants.%impl.elem2.978)] // CHECK:STDOUT: %bound_method.loc31_37.1: = bound_method %r.ref, %impl.elem2.loc31_37.1 // CHECK:STDOUT: %Iterate.facet.loc31_37.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.01e) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %.loc31_37.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_37.1 [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %Iterate.facet.loc31_37.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.01e) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %.loc31_37.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_37.2 [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %specific_impl_fn.loc31_37.1: = specific_impl_function %impl.elem2.loc31_37.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.467) [symbolic = %specific_impl_fn.loc31_37.4 (constants.%specific_impl_fn.f0e)] // CHECK:STDOUT: %bound_method.loc31_37.2: = bound_method %r.ref, %specific_impl_fn.loc31_37.1 // CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.db9) = var_storage invalid // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.db9) to %var = call %bound_method.loc31_37.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3.loc31_37.1: @TestIterate.%.loc31_37.21 (%.118) = impl_witness_access constants.%Iterate.lookup_impl_witness.01e, element3 [symbolic = %impl.elem3.loc31_37.2 (constants.%impl.elem3.2b1)] // CHECK:STDOUT: %bound_method.loc31_37.3: = bound_method %r.ref, %impl.elem3.loc31_37.1 // CHECK:STDOUT: %Iterate.facet.loc31_37.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.01e) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %.loc31_37.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_37.3 [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %Iterate.facet.loc31_37.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.01e) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %.loc31_37.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_37.4 [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.467)] // CHECK:STDOUT: %.loc31_37.5: %Destroy.type = converted constants.%as_type.db9, constants.%impl.elem1.d56 [symbolic = %impl.elem1 (constants.%impl.elem1.d56)] // CHECK:STDOUT: %.loc31_37.6: %Destroy.type = converted constants.%as_type.db9, constants.%impl.elem1.d56 [symbolic = %impl.elem1 (constants.%impl.elem1.d56)] // CHECK:STDOUT: %specific_impl_fn.loc31_37.2: = specific_impl_function %impl.elem3.loc31_37.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.467) [symbolic = %specific_impl_fn.loc31_37.5 (constants.%specific_impl_fn.3f1)] // CHECK:STDOUT: %bound_method.loc31_37.4: = bound_method %r.ref, %specific_impl_fn.loc31_37.2 // CHECK:STDOUT: %.loc31_37.7: ref %Optional.b4b = temporary_storage // CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.b4b to %.loc31_37.7 = call %bound_method.loc31_37.4(%r.ref, %var) // CHECK:STDOUT: %.loc31_37.8: ref %Optional.b4b = temporary %.loc31_37.7, %Iterate.WithSelf.Next.call // CHECK:STDOUT: %.loc31_37.9: %Optional.HasValue.type.1a1 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.0d1) [concrete = constants.%Optional.HasValue.766] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.1a1 = name_ref HasValue, %.loc31_37.9 [concrete = constants.%Optional.HasValue.766] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc31_37.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.0d1) [concrete = constants.%Optional.HasValue.specific_fn.98f] // CHECK:STDOUT: %bound_method.loc31_37.5: = bound_method %.loc31_37.8, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc31_37.10: %Optional.b4b = acquire_value %.loc31_37.8 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc31_37.5(%.loc31_37.10) // CHECK:STDOUT: %.loc31_37.11: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc31_37.12: bool = converted %Optional.HasValue.call, %.loc31_37.11 // CHECK:STDOUT: if %.loc31_37.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc31_37.13: %Optional.Get.type.edf = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.0d1) [concrete = constants.%Optional.Get.047] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.edf = name_ref Get, %.loc31_37.13 [concrete = constants.%Optional.Get.047] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc31_37.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.0d1) [concrete = constants.%Optional.Get.specific_fn.9f0] // CHECK:STDOUT: %bound_method.loc31_37.6: = bound_method %.loc31_37.8, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc31_37.14: ref %ValueType = temporary_storage // CHECK:STDOUT: %.loc31_37.15: %Optional.b4b = acquire_value %.loc31_37.8 // CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc31_37.14 = call %bound_method.loc31_37.6(%.loc31_37.15) // CHECK:STDOUT: %.loc31_37.16: ref %ValueType = temporary %.loc31_37.14, %Optional.Get.call // CHECK:STDOUT: %.loc31_37.17: %ValueType = acquire_value %.loc31_37.16 // CHECK:STDOUT: %.loc31_22: type = splice_block %ValueType.ref.loc31 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %DiffADL.ref.loc31: = name_ref DiffADL, imports.%DiffADL [concrete = imports.%DiffADL] // CHECK:STDOUT: %ValueType.ref.loc31: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc31_37.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc32_12: ref %ValueType = value_as_ref %i.ref // CHECK:STDOUT: %addr.loc32: %ptr.233 = addr_of %.loc32_12 // CHECK:STDOUT: %.loc32_9.1: %ptr.69c = as_compatible %addr.loc32 // CHECK:STDOUT: %.loc32_9.2: %ptr.69c = converted %addr.loc32, %.loc32_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc32_9.2) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc31_37.1: = bound_method %.loc31_37.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc31_37.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc31_37.1(%.loc31_37.16) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc31_37.2: = bound_method %.loc31_37.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc31_37.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc31_37.2(%.loc31_37.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc31_37.3: = bound_method %.loc31_37.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc31_37.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc31_37.3(%.loc31_37.8) // CHECK:STDOUT: %impl.elem2.loc31_37.2: @TestIterate.%.loc31_37.22 (%.a54) = impl_witness_access constants.%Destroy.lookup_impl_witness.d0e, element2 [symbolic = %impl.elem2.loc31_37.4 (constants.%impl.elem2.9bf)] // CHECK:STDOUT: %bound_method.loc31_37.7: = bound_method %var, %impl.elem2.loc31_37.2 // CHECK:STDOUT: %.loc31_37.18: %Destroy.type = converted constants.%as_type.db9, constants.%impl.elem1.d56 [symbolic = %impl.elem1 (constants.%impl.elem1.d56)] // CHECK:STDOUT: %.loc31_37.19: %Destroy.type = converted constants.%as_type.db9, constants.%impl.elem1.d56 [symbolic = %impl.elem1 (constants.%impl.elem1.d56)] // CHECK:STDOUT: %specific_impl_fn.loc31_37.3: = specific_impl_function %impl.elem2.loc31_37.2, @Destroy.WithSelf.SelfDestruct.1(constants.%impl.elem1.d56) [symbolic = %specific_impl_fn.loc31_37.6 (constants.%specific_impl_fn.2dd)] // CHECK:STDOUT: %bound_method.loc31_37.8: = bound_method %var, %specific_impl_fn.loc31_37.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc31_37.4: init %empty_tuple.type = call %bound_method.loc31_37.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc31_37.1(%self.param: ref %.be1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc31_37.1(%self.param: ref %.be1) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc31_37.1(%self.param: ref %.be1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.2(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.1(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc31_37.2(%self.param: ref %MaybeUnformed.485) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc31_37.2(%self.param: ref %MaybeUnformed.485) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc31_37.2(%self.param: ref %MaybeUnformed.485) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.3(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.2(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc31_37.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc31_37.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc31_37.3(%self.param: ref bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.4(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.3(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc31_37.4(%self.param: ref %struct_type.value.has_value.718) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc31_37.1: ref bool = struct_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc31_37.1: = bound_method %.loc31_37.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc31_37.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc31_37.1(%.loc31_37.1) // CHECK:STDOUT: %.loc31_37.2: ref %MaybeUnformed.485 = struct_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc31_37.2: = bound_method %.loc31_37.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc31_37.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc31_37.2(%.loc31_37.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc31_37.4(%self.param: ref %struct_type.value.has_value.718) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc31_37.4(%self.param: ref %struct_type.value.has_value.718) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.5(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.4(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc31_37.5(%self.param: ref %DefaultOptionalStorage.8e6) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %has_value.ref: %DefaultOptionalStorage.elem.97e = name_ref has_value, imports.%Core.import_ref.e86 [concrete = imports.%field_decl.390] // CHECK:STDOUT: %.loc31_37.1: ref bool = class_element_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc31_37.1: = bound_method %.loc31_37.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc31_37.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc31_37.1(%.loc31_37.1) // CHECK:STDOUT: %value.ref: %DefaultOptionalStorage.elem.4bc = name_ref value, imports.%Core.import_ref.373 [concrete = imports.%field_decl.498] // CHECK:STDOUT: %.loc31_37.2: ref %MaybeUnformed.485 = class_element_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc31_37.2: = bound_method %.loc31_37.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc31_37.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc31_37.2(%.loc31_37.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc31_37.5(%self.param: ref %DefaultOptionalStorage.8e6) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc31_37.5(%self.param: ref %DefaultOptionalStorage.8e6) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.6(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.5(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc31_37.6(%self.param: ref %Optional.b4b) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc31_37.6(%self.param: ref %Optional.b4b) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc31_37.6(%self.param: ref %Optional.b4b) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.7(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.6(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @TestRangeFor(%c.param: %ConstRange) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.c43 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c // CHECK:STDOUT: %impl.elem2: %.8c0 = impl_witness_access constants.%Iterate.impl_witness.d1d, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.437] // CHECK:STDOUT: %bound_method.loc45_37.1: = bound_method %c.ref, %impl.elem2 // CHECK:STDOUT: %facet_value.loc45_37.1: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.116, constants.%custom_witness.429ac1.1, constants.%custom_witness.5be, constants.%custom_witness.c31, constants.%custom_witness.bf4, constants.%custom_witness.226, constants.%custom_witness.202, constants.%custom_witness.429ac1.2) [concrete = constants.%facet_value.d15] // CHECK:STDOUT: %.loc45_37.1: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_37.1 [concrete = constants.%facet_value.d15] // CHECK:STDOUT: %facet_value.loc45_37.2: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.116, constants.%custom_witness.429ac1.1, constants.%custom_witness.5be, constants.%custom_witness.c31, constants.%custom_witness.bf4, constants.%custom_witness.226, constants.%custom_witness.202, constants.%custom_witness.429ac1.2) [concrete = constants.%facet_value.d15] // CHECK:STDOUT: %.loc45_37.2: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_37.2 [concrete = constants.%facet_value.d15] // CHECK:STDOUT: %specific_fn.loc45_37.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.d15) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] // CHECK:STDOUT: %bound_method.loc45_37.2: = bound_method %c.ref, %specific_fn.loc45_37.1 // CHECK:STDOUT: %var: ref %tuple.type.7a6 = var_storage invalid // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.7a6 to %var = call %bound_method.loc45_37.2(%c.ref) // CHECK:STDOUT: assign %var, %T.as_type.as.Iterate.impl.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3: %.b64 = impl_witness_access constants.%Iterate.impl_witness.d1d, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.82c] // CHECK:STDOUT: %bound_method.loc45_37.3: = bound_method %c.ref, %impl.elem3 // CHECK:STDOUT: %facet_value.loc45_37.3: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.116, constants.%custom_witness.429ac1.1, constants.%custom_witness.5be, constants.%custom_witness.c31, constants.%custom_witness.bf4, constants.%custom_witness.226, constants.%custom_witness.202, constants.%custom_witness.429ac1.2) [concrete = constants.%facet_value.d15] // CHECK:STDOUT: %.loc45_37.3: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_37.3 [concrete = constants.%facet_value.d15] // CHECK:STDOUT: %facet_value.loc45_37.4: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.116, constants.%custom_witness.429ac1.1, constants.%custom_witness.5be, constants.%custom_witness.c31, constants.%custom_witness.bf4, constants.%custom_witness.226, constants.%custom_witness.202, constants.%custom_witness.429ac1.2) [concrete = constants.%facet_value.d15] // CHECK:STDOUT: %.loc45_37.4: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_37.4 [concrete = constants.%facet_value.d15] // CHECK:STDOUT: %specific_fn.loc45_37.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.d15) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] // CHECK:STDOUT: %bound_method.loc45_37.4: = bound_method %c.ref, %specific_fn.loc45_37.2 // CHECK:STDOUT: %.loc45_37.5: ref %Optional.b4b = temporary_storage // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.b4b to %.loc45_37.5 = call %bound_method.loc45_37.4(%c.ref, %var) // CHECK:STDOUT: %.loc45_37.6: ref %Optional.b4b = temporary %.loc45_37.5, %T.as_type.as.Iterate.impl.Next.call // CHECK:STDOUT: %.loc45_37.7: %Optional.HasValue.type.1a1 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.0d1) [concrete = constants.%Optional.HasValue.766] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.1a1 = name_ref HasValue, %.loc45_37.7 [concrete = constants.%Optional.HasValue.766] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc45_37.6, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.0d1) [concrete = constants.%Optional.HasValue.specific_fn.98f] // CHECK:STDOUT: %bound_method.loc45_37.5: = bound_method %.loc45_37.6, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc45_37.8: %Optional.b4b = acquire_value %.loc45_37.6 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc45_37.5(%.loc45_37.8) // CHECK:STDOUT: %.loc45_37.9: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc45_37.10: bool = converted %Optional.HasValue.call, %.loc45_37.9 // CHECK:STDOUT: if %.loc45_37.10 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc45_37.11: %Optional.Get.type.edf = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.0d1) [concrete = constants.%Optional.Get.047] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.edf = name_ref Get, %.loc45_37.11 [concrete = constants.%Optional.Get.047] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc45_37.6, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.0d1) [concrete = constants.%Optional.Get.specific_fn.9f0] // CHECK:STDOUT: %bound_method.loc45_37.6: = bound_method %.loc45_37.6, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc45_37.12: ref %ValueType = temporary_storage // CHECK:STDOUT: %.loc45_37.13: %Optional.b4b = acquire_value %.loc45_37.6 // CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc45_37.12 = call %bound_method.loc45_37.6(%.loc45_37.13) // CHECK:STDOUT: %.loc45_37.14: ref %ValueType = temporary %.loc45_37.12, %Optional.Get.call // CHECK:STDOUT: %.loc45_37.15: %ValueType = acquire_value %.loc45_37.14 // CHECK:STDOUT: %.loc45_22: type = splice_block %ValueType.ref.loc45 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc45: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %DiffADL.ref.loc45: = name_ref DiffADL, imports.%DiffADL [concrete = imports.%DiffADL] // CHECK:STDOUT: %ValueType.ref.loc45: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc45_37.15 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc46_12: ref %ValueType = value_as_ref %i.ref // CHECK:STDOUT: %addr.loc46: %ptr.233 = addr_of %.loc46_12 // CHECK:STDOUT: %.loc46_9.1: %ptr.69c = as_compatible %addr.loc46 // CHECK:STDOUT: %.loc46_9.2: %ptr.69c = converted %addr.loc46, %.loc46_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc46_9.2) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc45_37.1: = bound_method %.loc45_37.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc45_37.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc45_37.1(%.loc45_37.14) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc45_37.2: = bound_method %.loc45_37.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc45_37.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc45_37.2(%.loc45_37.6) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc45_37.3: = bound_method %.loc45_37.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc45_37.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc45_37.3(%.loc45_37.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc45_37.4: = bound_method %var, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc45_37.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc45_37.4(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc27_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc27_17.1 => constants.%R // CHECK:STDOUT: %R.as_type.loc27_79.1 => constants.%R.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.053 // CHECK:STDOUT: %r.param_patt.loc27_77.2 => constants.%r.param_patt.75e // CHECK:STDOUT: %r.patt.loc27_77.2 => constants.%r.patt.82a // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.1d8) { // CHECK:STDOUT: %R.patt.loc27_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc27_17.1 => constants.%facet_value.1d8 // CHECK:STDOUT: %R.as_type.loc27_79.1 => constants.%ConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.c1d // CHECK:STDOUT: %r.param_patt.loc27_77.2 => constants.%r.param_patt.ac5 // CHECK:STDOUT: %r.patt.loc27_77.2 => constants.%r.patt.97f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc27 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.d1d // CHECK:STDOUT: %Iterate.facet.loc31_37.5 => constants.%Iterate.facet.8d3 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.7f7 // CHECK:STDOUT: %.loc31_37.20 => constants.%.8c0 // CHECK:STDOUT: %impl.elem2.loc31_37.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.437 // CHECK:STDOUT: %specific_impl_fn.loc31_37.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.d83 // CHECK:STDOUT: %as_type => constants.%tuple.type.7a6 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.cf0 // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.035 // CHECK:STDOUT: %.loc31_37.21 => constants.%.b64 // CHECK:STDOUT: %impl.elem3.loc31_37.2 => constants.%T.as_type.as.Iterate.impl.Next.82c // CHECK:STDOUT: %specific_impl_fn.loc31_37.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.000 // CHECK:STDOUT: %.loc31_37.22 => constants.%.dc3 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.8 // CHECK:STDOUT: %impl.elem2.loc31_37.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: %specific_impl_fn.loc31_37.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.11 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_adl_returns_different_types_mutable.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: type: type = facet_type [concrete] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %facet_type.f48: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Get.type.786: type = fn_type @Optional.Get, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Get.2d0: %Optional.Get.type.786 = struct_value () [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.3ea: type = fn_type @Optional.HasValue, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.HasValue.f2f: %Optional.HasValue.type.3ea = struct_value () [symbolic] // CHECK:STDOUT: %T.283: %facet_type.f48 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.28a: = lookup_impl_witness %T.283, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.16e: %Destroy.type = facet_value %T.as_type.74b, (%Destroy.lookup_impl_witness.28a) [symbolic] // CHECK:STDOUT: %MaybeUnformed.91c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.16e) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.ade: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%T.283) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b49: type = unbound_element_type %DefaultOptionalStorage.ade, bool [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.229: type = unbound_element_type %DefaultOptionalStorage.ade, %MaybeUnformed.91c [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.type.2f2: type = fn_type @T.as_type.as.OptionalStorage.impl.Get, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.884: %T.as_type.as.OptionalStorage.impl.Get.type.2f2 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d28: 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.f29: %T.as_type.as.OptionalStorage.impl.Has.type.d28 = struct_value () [symbolic] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] // CHECK:STDOUT: %pattern_type.d2d: type = pattern_type %ValueType [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc37 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc37 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %ValueType.SubobjectDestroy.type: type = fn_type @ValueType.SubobjectDestroy [concrete] // CHECK:STDOUT: %ValueType.SubobjectDestroy: %ValueType.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.3ec: = custom_witness (%Destroy.WithSelf.Op.403171.2, %ValueType.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.2), @Destroy [concrete] // CHECK:STDOUT: %const.91f: type = const_type %ValueType [concrete] // CHECK:STDOUT: %ptr.5f4: type = ptr_type %const.91f [concrete] // CHECK:STDOUT: %ptr.9c6: type = ptr_type %ValueType [concrete] // CHECK:STDOUT: %ValueType.Op.type: type = fn_type @ValueType.Op [concrete] // CHECK:STDOUT: %ValueType.Op: %ValueType.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.587: = custom_witness (%ValueType.Op), @Copy [concrete] // CHECK:STDOUT: %facet_value.14c: %facet_type.f48 = facet_value %ValueType, (%custom_witness.3ec, %custom_witness.587) [concrete] // 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.9df: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.14c> [concrete] // CHECK:STDOUT: %pattern_type.e3a: type = pattern_type %Iterate_where.type.9df [concrete] // CHECK:STDOUT: %R.patt: %pattern_type.e3a = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R: %Iterate_where.type.9df = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] // CHECK:STDOUT: %pattern_type.0bc: type = pattern_type %R.as_type [symbolic] // CHECK:STDOUT: %r.param_patt: %pattern_type.0bc = value_param_pattern [symbolic] // CHECK:STDOUT: %r.patt: %pattern_type.0bc = wrapper_binding_pattern r, %r.param_patt [symbolic] // CHECK:STDOUT: %i.patt: %pattern_type.d2d = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.711: = lookup_impl_witness %R, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.04e: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.711) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.f6c: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.04e) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.d76: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.04e) [symbolic] // CHECK:STDOUT: %.2577: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.f6c, %Iterate.facet.04e [symbolic] // CHECK:STDOUT: %impl.elem2.f11: %.2577 = impl_witness_access %Iterate.lookup_impl_witness.711, element2 [symbolic] // CHECK:STDOUT: %impl.elem1.0e0: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.711, element1 [symbolic] // CHECK:STDOUT: %as_type.b30: type = facet_access_type %impl.elem1.0e0 [symbolic] // CHECK:STDOUT: %specific_impl_fn.d03: = specific_impl_function %impl.elem2.f11, @Iterate.WithSelf.NewCursor(%Iterate.facet.04e) [symbolic] // CHECK:STDOUT: %.894: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.d76, %Iterate.facet.04e [symbolic] // CHECK:STDOUT: %impl.elem3.eed: %.894 = impl_witness_access %Iterate.lookup_impl_witness.711, element3 [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.f08: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.14c) [concrete] // CHECK:STDOUT: %OptionalStorage.impl_witness.90a: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.14c) [concrete] // CHECK:STDOUT: %OptionalStorage.facet.c95: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.90a) [concrete] // CHECK:STDOUT: %Optional.f5e: type = class_type @Optional, @Optional(%OptionalStorage.facet.c95) [concrete] // CHECK:STDOUT: %pattern_type.0bb: type = pattern_type %Optional.f5e [concrete] // CHECK:STDOUT: %specific_impl_fn.303: = specific_impl_function %impl.elem3.eed, @Iterate.WithSelf.Next(%Iterate.facet.04e) [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.a05: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.c95) [concrete] // CHECK:STDOUT: %Optional.HasValue.a9c: %Optional.HasValue.type.a05 = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.476: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.c95) [concrete] // CHECK:STDOUT: %Optional.Get.60b: %Optional.Get.type.476 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.facet.6cb: %Destroy.type = facet_value %ValueType, (%custom_witness.3ec) [concrete] // CHECK:STDOUT: %MaybeUnformed.65d: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.6cb) [concrete] // CHECK:STDOUT: %.dd1: type = maybe_unformed_type %ValueType [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.28f: type = unbound_element_type %DefaultOptionalStorage.f08, %MaybeUnformed.65d [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.9e9: type = unbound_element_type %DefaultOptionalStorage.f08, bool [concrete] // CHECK:STDOUT: %struct_type.value.has_value.afd: type = struct_type {.value: %MaybeUnformed.65d, .has_value: bool} [concrete] // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %Optional.HasValue.a9c, @Optional.HasValue(%OptionalStorage.facet.c95) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Optional.Get.60b, @Optional.Get(%OptionalStorage.facet.c95) [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.type: type = fn_type @operator_PlusEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk: %operator_PlusEqual__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.1d1: type = pattern_type %.dd1 [concrete] // CHECK:STDOUT: %self.param_patt.964: %pattern_type.1d1 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.82f: %pattern_type.1d1 = wrapper_binding_pattern self, %self.param_patt.964 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc41_44.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc41_44.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.5da: type = pattern_type %MaybeUnformed.65d [concrete] // CHECK:STDOUT: %self.param_patt.323: %pattern_type.5da = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.b95: %pattern_type.5da = wrapper_binding_pattern self, %self.param_patt.323 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc41_44.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.4: type = fn_type @Destroy.WithSelf.Op.loc41_44.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.4: %Destroy.WithSelf.Op.type.ef016f.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4: type = fn_type @Destroy.WithSelf.SelfDestruct.loc41_44.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.4: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.40d: %pattern_type.831 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.560: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt.40d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc41_44.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.5: type = fn_type @Destroy.WithSelf.Op.loc41_44.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.5: %Destroy.WithSelf.Op.type.ef016f.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5: type = fn_type @Destroy.WithSelf.SelfDestruct.loc41_44.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.5: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.bef: type = pattern_type %struct_type.value.has_value.afd [concrete] // CHECK:STDOUT: %self.param_patt.5ce: %pattern_type.bef = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.6ba: %pattern_type.bef = wrapper_binding_pattern self, %self.param_patt.5ce [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc41_44.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc41_44.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.c4b: type = pattern_type %DefaultOptionalStorage.f08 [concrete] // CHECK:STDOUT: %self.param_patt.0a4: %pattern_type.c4b = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.138: %pattern_type.c4b = wrapper_binding_pattern self, %self.param_patt.0a4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc41_44.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc41_44.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.8be: %pattern_type.0bb = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.bb8: %pattern_type.0bb = wrapper_binding_pattern self, %self.param_patt.8be [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc41_44.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.8: type = fn_type @Destroy.WithSelf.Op.loc41_44.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.8: %Destroy.WithSelf.Op.type.ef016f.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8: type = fn_type @Destroy.WithSelf.SelfDestruct.loc41_44.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.8: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.696: = lookup_impl_witness %impl.elem1.0e0, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.55d: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1.0e0) [symbolic] // CHECK:STDOUT: %.a44: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.55d, %impl.elem1.0e0 [symbolic] // CHECK:STDOUT: %impl.elem2.1f1: %.a44 = impl_witness_access %Destroy.lookup_impl_witness.696, element2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.cb8: = specific_impl_function %impl.elem2.1f1, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1.0e0) [symbolic] // CHECK:STDOUT: %MutableRange: type = class_type @MutableRange [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .DiffMutableADL = %DiffMutableADL // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.c82: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.3ea) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.f2f)] // CHECK:STDOUT: %Core.import_ref.29e: @Optional.%Optional.Get.type (%Optional.Get.type.786) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Get (constants.%Optional.Get.2d0)] // CHECK:STDOUT: %Core.import_ref.2e7: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.ade)] // CHECK:STDOUT: %Core.import_ref.063 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %Core.import_ref.4b4 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %Core.import_ref.af7: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.d28) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.f29)] // CHECK:STDOUT: %Core.import_ref.dd4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.2f2) = 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.884)] // CHECK:STDOUT: %Core.import_ref.554 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.2e7, %Core.import_ref.063, %Core.import_ref.4b4, %Core.import_ref.af7, %Core.import_ref.dd4, %Core.import_ref.554), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.373: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.498] // CHECK:STDOUT: %Core.import_ref.e86: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.390] // CHECK:STDOUT: %DiffMutableADL: = namespace [concrete] { // CHECK:STDOUT: .ValueType = %ValueType.decl // CHECK:STDOUT: .MutableRange = %MutableRange.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %ValueType.decl: type = class_decl @ValueType [concrete = constants.%ValueType] {} {} // 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: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.b0d0 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.390: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = field_decl has_value, element1, %Core.import_ref.b0d0 in [concrete] {} // CHECK:STDOUT: %Core.import_ref.ab7 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.498: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = field_decl value, element0, %Core.import_ref.ab7 in [concrete] {} // CHECK:STDOUT: %MutableRange.decl: type = class_decl @MutableRange [concrete = constants.%MutableRange] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc41_44.1 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.2] { // CHECK:STDOUT: %self.param_patt: %pattern_type.1d1 = ref_param_pattern [concrete = constants.%self.param_patt.964] // CHECK:STDOUT: %self.patt: %pattern_type.1d1 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.82f] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.dd1 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.dd1 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.2: %Destroy.WithSelf.Op.type.ef016f.3 = fn_decl @Destroy.WithSelf.Op.loc41_44.1 [concrete = constants.%Destroy.WithSelf.Op.403171.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.1d1 = ref_param_pattern [concrete = constants.%self.param_patt.964] // CHECK:STDOUT: %self.patt: %pattern_type.1d1 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.82f] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.dd1 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.dd1 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc41_44.2 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.5da = ref_param_pattern [concrete = constants.%self.param_patt.323] // CHECK:STDOUT: %self.patt: %pattern_type.5da = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b95] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.65d = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.65d = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.3: %Destroy.WithSelf.Op.type.ef016f.4 = fn_decl @Destroy.WithSelf.Op.loc41_44.2 [concrete = constants.%Destroy.WithSelf.Op.403171.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.5da = ref_param_pattern [concrete = constants.%self.param_patt.323] // CHECK:STDOUT: %self.patt: %pattern_type.5da = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.b95] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.65d = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.65d = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc41_44.3 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.4: %Destroy.WithSelf.Op.type.ef016f.5 = fn_decl @Destroy.WithSelf.Op.loc41_44.3 [concrete = constants.%Destroy.WithSelf.Op.403171.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc41_44.4 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.bef = ref_param_pattern [concrete = constants.%self.param_patt.5ce] // CHECK:STDOUT: %self.patt: %pattern_type.bef = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.6ba] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.afd = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.afd = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.5: %Destroy.WithSelf.Op.type.ef016f.6 = fn_decl @Destroy.WithSelf.Op.loc41_44.4 [concrete = constants.%Destroy.WithSelf.Op.403171.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.bef = ref_param_pattern [concrete = constants.%self.param_patt.5ce] // CHECK:STDOUT: %self.patt: %pattern_type.bef = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.6ba] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.afd = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.afd = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc41_44.5 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.c4b = ref_param_pattern [concrete = constants.%self.param_patt.0a4] // CHECK:STDOUT: %self.patt: %pattern_type.c4b = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.138] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.f08 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.f08 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.6: %Destroy.WithSelf.Op.type.ef016f.7 = fn_decl @Destroy.WithSelf.Op.loc41_44.5 [concrete = constants.%Destroy.WithSelf.Op.403171.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.c4b = ref_param_pattern [concrete = constants.%self.param_patt.0a4] // CHECK:STDOUT: %self.patt: %pattern_type.c4b = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.138] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.f08 = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.f08 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc41_44.6 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.0bb = ref_param_pattern [concrete = constants.%self.param_patt.8be] // CHECK:STDOUT: %self.patt: %pattern_type.0bb = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.bb8] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.f5e = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.f5e = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.7: %Destroy.WithSelf.Op.type.ef016f.8 = fn_decl @Destroy.WithSelf.Op.loc41_44.6 [concrete = constants.%Destroy.WithSelf.Op.403171.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.0bb = ref_param_pattern [concrete = constants.%self.param_patt.8be] // CHECK:STDOUT: %self.patt: %pattern_type.0bb = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.bb8] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.f5e = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.f5e = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestIterate(%R.loc37_17.2: %Iterate_where.type.9df) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc37_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.711)] // CHECK:STDOUT: %Iterate.facet.loc41_44.5: %Iterate.type = facet_value %R.as_type.loc37_86.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc41_44.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.f6c)] // CHECK:STDOUT: %.loc41_44.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc41_44.5 [symbolic = %.loc41_44.20 (constants.%.2577)] // CHECK:STDOUT: %impl.elem2.loc41_44.3: @TestIterate.%.loc41_44.20 (%.2577) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc41_44.3 (constants.%impl.elem2.f11)] // CHECK:STDOUT: %specific_impl_fn.loc41_44.4: = specific_impl_function %impl.elem2.loc41_44.3, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc41_44.5) [symbolic = %specific_impl_fn.loc41_44.4 (constants.%specific_impl_fn.d03)] // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc41_44.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.d76)] // CHECK:STDOUT: %.loc41_44.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc41_44.5 [symbolic = %.loc41_44.21 (constants.%.894)] // CHECK:STDOUT: %impl.elem3.loc41_44.2: @TestIterate.%.loc41_44.21 (%.894) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc41_44.2 (constants.%impl.elem3.eed)] // CHECK:STDOUT: %specific_impl_fn.loc41_44.5: = specific_impl_function %impl.elem3.loc41_44.2, @Iterate.WithSelf.Next(%Iterate.facet.loc41_44.5) [symbolic = %specific_impl_fn.loc41_44.5 (constants.%specific_impl_fn.303)] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.SelfDestruct.type (constants.%Destroy.WithSelf.SelfDestruct.type.55d)] // CHECK:STDOUT: %.loc41_44.22: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type, %impl.elem1 [symbolic = %.loc41_44.22 (constants.%.a44)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.696)] // CHECK:STDOUT: %impl.elem2.loc41_44.4: @TestIterate.%.loc41_44.22 (%.a44) = impl_witness_access %Destroy.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc41_44.4 (constants.%impl.elem2.1f1)] // CHECK:STDOUT: %specific_impl_fn.loc41_44.6: = specific_impl_function %impl.elem2.loc41_44.4, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1) [symbolic = %specific_impl_fn.loc41_44.6 (constants.%specific_impl_fn.cb8)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc37_86.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.d2d = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc37_86.1 (%R.as_type) = name_ref r, %r // CHECK:STDOUT: %impl.elem2.loc41_44.1: @TestIterate.%.loc41_44.20 (%.2577) = impl_witness_access constants.%Iterate.lookup_impl_witness.711, element2 [symbolic = %impl.elem2.loc41_44.3 (constants.%impl.elem2.f11)] // CHECK:STDOUT: %bound_method.loc41_44.1: = bound_method %r.ref, %impl.elem2.loc41_44.1 // CHECK:STDOUT: %Iterate.facet.loc41_44.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.711) [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %.loc41_44.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc41_44.1 [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %Iterate.facet.loc41_44.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.711) [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %.loc41_44.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc41_44.2 [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %specific_impl_fn.loc41_44.1: = specific_impl_function %impl.elem2.loc41_44.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.04e) [symbolic = %specific_impl_fn.loc41_44.4 (constants.%specific_impl_fn.d03)] // CHECK:STDOUT: %bound_method.loc41_44.2: = bound_method %r.ref, %specific_impl_fn.loc41_44.1 // CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.b30) = var_storage invalid // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.b30) to %var = call %bound_method.loc41_44.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3.loc41_44.1: @TestIterate.%.loc41_44.21 (%.894) = impl_witness_access constants.%Iterate.lookup_impl_witness.711, element3 [symbolic = %impl.elem3.loc41_44.2 (constants.%impl.elem3.eed)] // CHECK:STDOUT: %bound_method.loc41_44.3: = bound_method %r.ref, %impl.elem3.loc41_44.1 // CHECK:STDOUT: %Iterate.facet.loc41_44.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.711) [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %.loc41_44.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc41_44.3 [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %Iterate.facet.loc41_44.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.711) [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %.loc41_44.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc41_44.4 [symbolic = %Iterate.facet.loc41_44.5 (constants.%Iterate.facet.04e)] // CHECK:STDOUT: %.loc41_44.5: %Destroy.type = converted constants.%as_type.b30, constants.%impl.elem1.0e0 [symbolic = %impl.elem1 (constants.%impl.elem1.0e0)] // CHECK:STDOUT: %.loc41_44.6: %Destroy.type = converted constants.%as_type.b30, constants.%impl.elem1.0e0 [symbolic = %impl.elem1 (constants.%impl.elem1.0e0)] // CHECK:STDOUT: %specific_impl_fn.loc41_44.2: = specific_impl_function %impl.elem3.loc41_44.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.04e) [symbolic = %specific_impl_fn.loc41_44.5 (constants.%specific_impl_fn.303)] // CHECK:STDOUT: %bound_method.loc41_44.4: = bound_method %r.ref, %specific_impl_fn.loc41_44.2 // CHECK:STDOUT: %.loc41_44.7: ref %Optional.f5e = temporary_storage // CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.f5e to %.loc41_44.7 = call %bound_method.loc41_44.4(%r.ref, %var) // CHECK:STDOUT: %.loc41_44.8: ref %Optional.f5e = temporary %.loc41_44.7, %Iterate.WithSelf.Next.call // CHECK:STDOUT: %.loc41_44.9: %Optional.HasValue.type.a05 = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.c95) [concrete = constants.%Optional.HasValue.a9c] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.a05 = name_ref HasValue, %.loc41_44.9 [concrete = constants.%Optional.HasValue.a9c] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc41_44.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.c95) [concrete = constants.%Optional.HasValue.specific_fn] // CHECK:STDOUT: %bound_method.loc41_44.5: = bound_method %.loc41_44.8, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc41_44.10: %Optional.f5e = acquire_value %.loc41_44.8 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc41_44.5(%.loc41_44.10) // CHECK:STDOUT: %.loc41_44.11: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc41_44.12: bool = converted %Optional.HasValue.call, %.loc41_44.11 // CHECK:STDOUT: if %.loc41_44.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc41_44.13: %Optional.Get.type.476 = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.c95) [concrete = constants.%Optional.Get.60b] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.476 = name_ref Get, %.loc41_44.13 [concrete = constants.%Optional.Get.60b] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc41_44.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.c95) [concrete = constants.%Optional.Get.specific_fn] // CHECK:STDOUT: %bound_method.loc41_44.6: = bound_method %.loc41_44.8, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc41_44.14: ref %ValueType = temporary_storage // CHECK:STDOUT: %.loc41_44.15: %Optional.f5e = acquire_value %.loc41_44.8 // CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc41_44.14 = call %bound_method.loc41_44.6(%.loc41_44.15) // CHECK:STDOUT: %.loc41_44.16: ref %ValueType = temporary %.loc41_44.14, %Optional.Get.call // CHECK:STDOUT: %.loc41_44.17: %ValueType = acquire_value %.loc41_44.16 // CHECK:STDOUT: %.loc41_29: type = splice_block %ValueType.ref.loc41 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc41: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %DiffMutableADL.ref.loc41: = name_ref DiffMutableADL, imports.%DiffMutableADL [concrete = imports.%DiffMutableADL] // CHECK:STDOUT: %ValueType.ref.loc41: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc41_44.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc42_12: ref %ValueType = value_as_ref %i.ref // CHECK:STDOUT: %addr.loc42: %ptr.9c6 = addr_of %.loc42_12 // CHECK:STDOUT: %.loc42_9.1: %ptr.5f4 = as_compatible %addr.loc42 // CHECK:STDOUT: %.loc42_9.2: %ptr.5f4 = converted %addr.loc42, %.loc42_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc42_9.2) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_44.1: = bound_method %.loc41_44.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_44.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_44.1(%.loc41_44.16) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_44.2: = bound_method %.loc41_44.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_44.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_44.2(%.loc41_44.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_44.3: = bound_method %.loc41_44.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_44.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_44.3(%.loc41_44.8) // CHECK:STDOUT: %impl.elem2.loc41_44.2: @TestIterate.%.loc41_44.22 (%.a44) = impl_witness_access constants.%Destroy.lookup_impl_witness.696, element2 [symbolic = %impl.elem2.loc41_44.4 (constants.%impl.elem2.1f1)] // CHECK:STDOUT: %bound_method.loc41_44.7: = bound_method %var, %impl.elem2.loc41_44.2 // CHECK:STDOUT: %.loc41_44.18: %Destroy.type = converted constants.%as_type.b30, constants.%impl.elem1.0e0 [symbolic = %impl.elem1 (constants.%impl.elem1.0e0)] // CHECK:STDOUT: %.loc41_44.19: %Destroy.type = converted constants.%as_type.b30, constants.%impl.elem1.0e0 [symbolic = %impl.elem1 (constants.%impl.elem1.0e0)] // CHECK:STDOUT: %specific_impl_fn.loc41_44.3: = specific_impl_function %impl.elem2.loc41_44.2, @Destroy.WithSelf.SelfDestruct.1(constants.%impl.elem1.0e0) [symbolic = %specific_impl_fn.loc41_44.6 (constants.%specific_impl_fn.cb8)] // CHECK:STDOUT: %bound_method.loc41_44.8: = bound_method %var, %specific_impl_fn.loc41_44.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_44.4: init %empty_tuple.type = call %bound_method.loc41_44.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc41_44.1(%self.param: ref %.dd1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc41_44.1(%self.param: ref %.dd1) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc41_44.1(%self.param: ref %.dd1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.2(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.1(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc41_44.2(%self.param: ref %MaybeUnformed.65d) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc41_44.2(%self.param: ref %MaybeUnformed.65d) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc41_44.2(%self.param: ref %MaybeUnformed.65d) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.3(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.2(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc41_44.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc41_44.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc41_44.3(%self.param: ref bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.4(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.3(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc41_44.4(%self.param: ref %struct_type.value.has_value.afd) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc41_44.1: ref bool = struct_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_44.1: = bound_method %.loc41_44.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_44.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_44.1(%.loc41_44.1) // CHECK:STDOUT: %.loc41_44.2: ref %MaybeUnformed.65d = struct_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_44.2: = bound_method %.loc41_44.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_44.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_44.2(%.loc41_44.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc41_44.4(%self.param: ref %struct_type.value.has_value.afd) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc41_44.4(%self.param: ref %struct_type.value.has_value.afd) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.5(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.4(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc41_44.5(%self.param: ref %DefaultOptionalStorage.f08) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %has_value.ref: %DefaultOptionalStorage.elem.9e9 = name_ref has_value, imports.%Core.import_ref.e86 [concrete = imports.%field_decl.390] // CHECK:STDOUT: %.loc41_44.1: ref bool = class_element_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_44.1: = bound_method %.loc41_44.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_44.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_44.1(%.loc41_44.1) // CHECK:STDOUT: %value.ref: %DefaultOptionalStorage.elem.28f = name_ref value, imports.%Core.import_ref.373 [concrete = imports.%field_decl.498] // CHECK:STDOUT: %.loc41_44.2: ref %MaybeUnformed.65d = class_element_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc41_44.2: = bound_method %.loc41_44.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc41_44.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc41_44.2(%.loc41_44.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc41_44.5(%self.param: ref %DefaultOptionalStorage.f08) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc41_44.5(%self.param: ref %DefaultOptionalStorage.f08) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.6(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.5(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc41_44.6(%self.param: ref %Optional.f5e) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc41_44.6(%self.param: ref %Optional.f5e) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc41_44.6(%self.param: ref %Optional.f5e) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.7(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.6(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @TestRangeFor(%m.param: ref %MutableRange) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.d2d = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %m.ref: ref %MutableRange = name_ref m, %m // CHECK:STDOUT: %var: ref = var_storage invalid [concrete = ] // CHECK:STDOUT: assign , // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %HasValue.ref: = name_ref HasValue, [concrete = ] // CHECK:STDOUT: if br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %Get.ref: = name_ref Get, [concrete = ] // CHECK:STDOUT: %.loc63: type = splice_block %ValueType.ref.loc63 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc63: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %DiffMutableADL.ref.loc63: = name_ref DiffMutableADL, imports.%DiffMutableADL [concrete = imports.%DiffMutableADL] // CHECK:STDOUT: %ValueType.ref.loc63: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i: %ValueType = wrapper_binding i, [concrete = ] // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i [concrete = ] // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc37_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc37_17.1 => constants.%R // CHECK:STDOUT: %R.as_type.loc37_86.1 => constants.%R.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.0bc // CHECK:STDOUT: %r.param_patt.loc37_84.2 => constants.%r.param_patt // CHECK:STDOUT: %r.patt.loc37_84.2 => constants.%r.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_adl_overloads.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: type: type = facet_type [concrete] // CHECK:STDOUT: %Iterate.type: type = facet_type <@Iterate> [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %facet_type.f48: type = facet_type <@Destroy & @Copy> [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Get.type.786: type = fn_type @Optional.Get, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Get.2d0: %Optional.Get.type.786 = struct_value () [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.3ea: type = fn_type @Optional.HasValue, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.HasValue.f2f: %Optional.HasValue.type.3ea = struct_value () [symbolic] // CHECK:STDOUT: %T.283: %facet_type.f48 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.74b: type = facet_access_type %T.283 [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.28a: = lookup_impl_witness %T.283, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.16e: %Destroy.type = facet_value %T.as_type.74b, (%Destroy.lookup_impl_witness.28a) [symbolic] // CHECK:STDOUT: %MaybeUnformed.91c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.16e) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.ade: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%T.283) [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.b49: type = unbound_element_type %DefaultOptionalStorage.ade, bool [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.elem.229: type = unbound_element_type %DefaultOptionalStorage.ade, %MaybeUnformed.91c [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.type.2f2: type = fn_type @T.as_type.as.OptionalStorage.impl.Get, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Get.884: %T.as_type.as.OptionalStorage.impl.Get.type.2f2 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.type.d28: 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.f29: %T.as_type.as.OptionalStorage.impl.Has.type.d28 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.type.760: type = fn_type @T.as_type.as.OptionalStorage.impl.Some, @T.as_type.as.OptionalStorage.impl(%T.283) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Some.268: %T.as_type.as.OptionalStorage.impl.Some.type.760 = struct_value () [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.None.type.925: 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.f42: %T.as_type.as.OptionalStorage.impl.None.type.925 = struct_value () [symbolic] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRange.type: type = facet_type <@CppRange> [concrete] // CHECK:STDOUT: %.Self.e0b: %CppRange.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.50b: = lookup_impl_witness %.Self.e0b, @CppRangeForIterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.32d: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.50b, element0 [symbolic_self] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.851: = lookup_impl_witness %impl.elem0.32d, @CppUnsafeDeref [symbolic_self] // CHECK:STDOUT: %impl.elem0.10d: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.851, element0 [symbolic_self] // CHECK:STDOUT: %CppRange_where.type.d682d6.1: type = facet_type <@CppRange where %impl.elem0.10d impls @Copy> [concrete] // CHECK:STDOUT: %T.f45530.2: %CppRange_where.type.d682d6.1 = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.d4a: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.5a8: %T.as_type.as.Iterate.impl.Next.type.d4a = struct_value () [symbolic] // CHECK:STDOUT: %CppRangeForIterate.lookup_impl_witness.b581a8.2: = lookup_impl_witness %T.f45530.2, @CppRangeForIterate [symbolic] // CHECK:STDOUT: %impl.elem0.5f971c.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element0 [symbolic] // CHECK:STDOUT: %CppUnsafeDeref.lookup_impl_witness.87e543.2: = lookup_impl_witness %impl.elem0.5f971c.2, @CppUnsafeDeref [symbolic] // CHECK:STDOUT: %impl.elem0.493765.2: type = impl_witness_access %CppUnsafeDeref.lookup_impl_witness.87e543.2, element0 [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.8fb: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%T.f45530.2) [symbolic] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.8a1: %T.as_type.as.Iterate.impl.NewCursor.type.8fb = struct_value () [symbolic] // CHECK:STDOUT: %impl.elem1.c2dc15.2: type = impl_witness_access %CppRangeForIterate.lookup_impl_witness.b581a8.2, element1 [symbolic] // CHECK:STDOUT: %tuple.type.1ba: type = tuple_type (%impl.elem0.5f971c.2, %impl.elem1.c2dc15.2) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.812: = lookup_impl_witness %tuple.type.1ba, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.facet.9cd: %Destroy.type = facet_value %tuple.type.1ba, (%Destroy.lookup_impl_witness.812) [symbolic] // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [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.e09: type = pattern_type %ValueType [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.2: type = fn_type @Destroy.WithSelf.Op.loc44 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.2: %Destroy.WithSelf.Op.type.ef016f.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2: type = fn_type @Destroy.WithSelf.SelfDestruct.loc44 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.2: %Destroy.WithSelf.SelfDestruct.type.fbceb5.2 = struct_value () [concrete] // CHECK:STDOUT: %ValueType.SubobjectDestroy.type: type = fn_type @ValueType.SubobjectDestroy [concrete] // CHECK:STDOUT: %ValueType.SubobjectDestroy: %ValueType.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.dc3: = custom_witness (%Destroy.WithSelf.Op.403171.2, %ValueType.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.2), @Destroy [concrete] // CHECK:STDOUT: %const.924: type = const_type %ValueType [concrete] // CHECK:STDOUT: %ptr.403: type = ptr_type %const.924 [concrete] // CHECK:STDOUT: %ptr.6ed: type = ptr_type %ValueType [concrete] // CHECK:STDOUT: %ValueType.Op.type: type = fn_type @ValueType.Op [concrete] // CHECK:STDOUT: %ValueType.Op: %ValueType.Op.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.1c5: = custom_witness (%ValueType.Op), @Copy [concrete] // CHECK:STDOUT: %facet_value.36a: %facet_type.f48 = facet_value %ValueType, (%custom_witness.dc3, %custom_witness.1c5) [concrete] // 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.8b0: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.36a> [concrete] // CHECK:STDOUT: %pattern_type.5f2: type = pattern_type %Iterate_where.type.8b0 [concrete] // CHECK:STDOUT: %R.patt: %pattern_type.5f2 = symbolic_binding_pattern R, 0 [symbolic] // CHECK:STDOUT: %R: %Iterate_where.type.8b0 = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] // CHECK:STDOUT: %pattern_type.611: type = pattern_type %R.as_type [symbolic] // CHECK:STDOUT: %r.param_patt.e64: %pattern_type.611 = value_param_pattern [symbolic] // CHECK:STDOUT: %r.patt.dcb: %pattern_type.611 = wrapper_binding_pattern r, %r.param_patt.e64 [symbolic] // CHECK:STDOUT: %i.patt: %pattern_type.e09 = value_binding_pattern i [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.a99: = lookup_impl_witness %R, @Iterate [symbolic] // CHECK:STDOUT: %Iterate.facet.c55: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.a99) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.fb9: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.c55) [symbolic] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.5d8: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.c55) [symbolic] // CHECK:STDOUT: %.54f: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.fb9, %Iterate.facet.c55 [symbolic] // CHECK:STDOUT: %impl.elem2.ff2: %.54f = impl_witness_access %Iterate.lookup_impl_witness.a99, element2 [symbolic] // CHECK:STDOUT: %impl.elem1.751: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.a99, element1 [symbolic] // CHECK:STDOUT: %as_type.733: type = facet_access_type %impl.elem1.751 [symbolic] // CHECK:STDOUT: %specific_impl_fn.541: = specific_impl_function %impl.elem2.ff2, @Iterate.WithSelf.NewCursor(%Iterate.facet.c55) [symbolic] // CHECK:STDOUT: %.216: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.5d8, %Iterate.facet.c55 [symbolic] // CHECK:STDOUT: %impl.elem3.5f1: %.216 = impl_witness_access %Iterate.lookup_impl_witness.a99, element3 [symbolic] // CHECK:STDOUT: %DefaultOptionalStorage.8dd: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.36a) [concrete] // CHECK:STDOUT: %OptionalStorage.impl_witness.120: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.36a) [concrete] // CHECK:STDOUT: %OptionalStorage.facet.adc: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.120) [concrete] // CHECK:STDOUT: %Optional.006: type = class_type @Optional, @Optional(%OptionalStorage.facet.adc) [concrete] // CHECK:STDOUT: %pattern_type.d0f: type = pattern_type %Optional.006 [concrete] // CHECK:STDOUT: %specific_impl_fn.eaf: = specific_impl_function %impl.elem3.5f1, @Iterate.WithSelf.Next(%Iterate.facet.c55) [symbolic] // CHECK:STDOUT: %Optional.HasValue.type.06b: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.adc) [concrete] // CHECK:STDOUT: %Optional.HasValue.994: %Optional.HasValue.type.06b = struct_value () [concrete] // CHECK:STDOUT: %Optional.Get.type.a9b: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.adc) [concrete] // CHECK:STDOUT: %Optional.Get.740: %Optional.Get.type.a9b = struct_value () [concrete] // CHECK:STDOUT: %Destroy.facet.745: %Destroy.type = facet_value %ValueType, (%custom_witness.dc3) [concrete] // CHECK:STDOUT: %MaybeUnformed.e45: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.745) [concrete] // CHECK:STDOUT: %.8f3: type = maybe_unformed_type %ValueType [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.532: type = unbound_element_type %DefaultOptionalStorage.8dd, %MaybeUnformed.e45 [concrete] // CHECK:STDOUT: %DefaultOptionalStorage.elem.e54: type = unbound_element_type %DefaultOptionalStorage.8dd, bool [concrete] // CHECK:STDOUT: %struct_type.value.has_value.70e: type = struct_type {.value: %MaybeUnformed.e45, .has_value: bool} [concrete] // CHECK:STDOUT: %Optional.HasValue.specific_fn.c92: = specific_function %Optional.HasValue.994, @Optional.HasValue(%OptionalStorage.facet.adc) [concrete] // CHECK:STDOUT: %Optional.Get.specific_fn.10e: = specific_function %Optional.Get.740, @Optional.Get(%OptionalStorage.facet.adc) [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.type: type = fn_type @operator_PlusEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk: %operator_PlusEqual__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.60e: type = pattern_type %.8f3 [concrete] // CHECK:STDOUT: %self.param_patt.61b3: %pattern_type.60e = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.ecc: %pattern_type.60e = wrapper_binding_pattern self, %self.param_patt.61b3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc48_41.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.3: type = fn_type @Destroy.WithSelf.Op.loc48_41.1 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.3: %Destroy.WithSelf.Op.type.ef016f.3 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.a8c: type = pattern_type %MaybeUnformed.e45 [concrete] // CHECK:STDOUT: %self.param_patt.6bf: %pattern_type.a8c = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.3f7: %pattern_type.a8c = wrapper_binding_pattern self, %self.param_patt.6bf [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc48_41.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.4: type = fn_type @Destroy.WithSelf.Op.loc48_41.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.4: %Destroy.WithSelf.Op.type.ef016f.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4: type = fn_type @Destroy.WithSelf.SelfDestruct.loc48_41.2 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.4: %Destroy.WithSelf.SelfDestruct.type.fbceb5.4 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.40d: %pattern_type.831 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.560: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt.40d [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc48_41.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.5: type = fn_type @Destroy.WithSelf.Op.loc48_41.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.5: %Destroy.WithSelf.Op.type.ef016f.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5: type = fn_type @Destroy.WithSelf.SelfDestruct.loc48_41.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.5: %Destroy.WithSelf.SelfDestruct.type.fbceb5.5 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.14e: type = pattern_type %struct_type.value.has_value.70e [concrete] // CHECK:STDOUT: %self.param_patt.2f9: %pattern_type.14e = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.204: %pattern_type.14e = wrapper_binding_pattern self, %self.param_patt.2f9 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc48_41.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.6: type = fn_type @Destroy.WithSelf.Op.loc48_41.4 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.6: %Destroy.WithSelf.Op.type.ef016f.6 = struct_value () [concrete] // CHECK:STDOUT: %pattern_type.474: type = pattern_type %DefaultOptionalStorage.8dd [concrete] // CHECK:STDOUT: %self.param_patt.8b7: %pattern_type.474 = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.5be: %pattern_type.474 = wrapper_binding_pattern self, %self.param_patt.8b7 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc48_41.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.7: type = fn_type @Destroy.WithSelf.Op.loc48_41.5 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.7: %Destroy.WithSelf.Op.type.ef016f.7 = struct_value () [concrete] // CHECK:STDOUT: %self.param_patt.8ac: %pattern_type.d0f = ref_param_pattern [concrete] // CHECK:STDOUT: %self.patt.25e: %pattern_type.d0f = wrapper_binding_pattern self, %self.param_patt.8ac [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7: type = fn_type @Destroy.WithSelf.SubobjectDestroy.loc48_41.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.7: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.8: type = fn_type @Destroy.WithSelf.Op.loc48_41.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.8: %Destroy.WithSelf.Op.type.ef016f.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8: type = fn_type @Destroy.WithSelf.SelfDestruct.loc48_41.6 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.8: %Destroy.WithSelf.SelfDestruct.type.fbceb5.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.lookup_impl_witness.eb0: = lookup_impl_witness %impl.elem1.751, @Destroy [symbolic] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.4ed: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1.751) [symbolic] // CHECK:STDOUT: %.97d: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.4ed, %impl.elem1.751 [symbolic] // CHECK:STDOUT: %impl.elem2.f7b: %.97d = impl_witness_access %Destroy.lookup_impl_witness.eb0, element2 [symbolic] // CHECK:STDOUT: %specific_impl_fn.577: = specific_impl_function %impl.elem2.f7b, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1.751) [symbolic] // CHECK:STDOUT: %MutableAndConstRange: type = class_type @MutableAndConstRange [concrete] // CHECK:STDOUT: %pattern_type.fdb: type = pattern_type %MutableAndConstRange [concrete] // CHECK:STDOUT: %Iterator: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %Begin.type: type = fn_type @Begin [concrete] // CHECK:STDOUT: %Begin: %Begin.type = struct_value () [concrete] // CHECK:STDOUT: %End.type: type = fn_type @End [concrete] // CHECK:STDOUT: %End: %End.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.660: = custom_witness (%Iterator, %Iterator, %Begin, %End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.9: type = fn_type @Destroy.WithSelf.Op.loc55 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.9: %Destroy.WithSelf.Op.type.ef016f.9 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9: type = fn_type @Destroy.WithSelf.SelfDestruct.loc55 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.9: %Destroy.WithSelf.SelfDestruct.type.fbceb5.9 = struct_value () [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy.type: type = fn_type @Iterator.SubobjectDestroy [concrete] // CHECK:STDOUT: %Iterator.SubobjectDestroy: %Iterator.SubobjectDestroy.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.809: = custom_witness (%Destroy.WithSelf.Op.403171.9, %Iterator.SubobjectDestroy, %Destroy.WithSelf.SelfDestruct.db3fdb.9), @Destroy [concrete] // CHECK:STDOUT: %Iterator.Op.type.c95ff6.1: type = fn_type @Iterator.Op.1 [concrete] // CHECK:STDOUT: %Iterator.Op.c90ac2.1: %Iterator.Op.type.c95ff6.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.d56: = custom_witness (%ValueType, %Iterator.Op.c90ac2.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.c95ff6.2: type = fn_type @Iterator.Op.2 [concrete] // CHECK:STDOUT: %Iterator.Op.c90ac2.2: %Iterator.Op.type.c95ff6.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.68a: = custom_witness (%Iterator.Op.c90ac2.2), @Inc [concrete] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type: type = fn_type @NotEqual [concrete] // CHECK:STDOUT: %NotEqual: %NotEqual.type = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.edd: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Iterator) [concrete] // CHECK:STDOUT: %facet_value.24f: %CppRange_where.type.d682d6.1 = facet_value %MutableAndConstRange, (%custom_witness.660, %custom_witness.809, %custom_witness.d56, %custom_witness.68a, %custom_witness.edd, %custom_witness.dc3, %custom_witness.1c5, %custom_witness.809) [concrete] // CHECK:STDOUT: %tuple.type.de6: type = tuple_type (%Iterator, %Iterator) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8: type = fn_type @Destroy.WithSelf.SubobjectDestroy.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.d01daf.8: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.8 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.type.ef016f.10: type = fn_type @Destroy.WithSelf.Op.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.Op.403171.10: %Destroy.WithSelf.Op.type.ef016f.10 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10: type = fn_type @Destroy.WithSelf.SelfDestruct.3 [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.db3fdb.10: %Destroy.WithSelf.SelfDestruct.type.fbceb5.10 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f8f19d.8: = custom_witness (%Destroy.WithSelf.Op.403171.10, %Destroy.WithSelf.SubobjectDestroy.d01daf.8, %Destroy.WithSelf.SelfDestruct.db3fdb.10), @Destroy [concrete] // CHECK:STDOUT: %Destroy.facet.c9a: %Destroy.type = facet_value %tuple.type.de6, (%custom_witness.f8f19d.8) [concrete] // CHECK:STDOUT: %Iterate.impl_witness.198: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.24f) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.212: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.24f) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.160: %T.as_type.as.Iterate.impl.NewCursor.type.212 = struct_value () [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.6dd: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.24f) [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.ddf: %T.as_type.as.Iterate.impl.Next.type.6dd = struct_value () [concrete] // CHECK:STDOUT: %facet_value.fc8: %Iterate_where.type.8b0 = facet_value %MutableAndConstRange, (%Iterate.impl_witness.198) [concrete] // CHECK:STDOUT: %r.param_patt.3a6: %pattern_type.fdb = value_param_pattern [concrete] // CHECK:STDOUT: %r.patt.403: %pattern_type.fdb = wrapper_binding_pattern r, %r.param_patt.3a6 [concrete] // CHECK:STDOUT: %Iterate.facet.b30: %Iterate.type = facet_value %MutableAndConstRange, (%Iterate.impl_witness.198) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.b5a: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.b30) [concrete] // CHECK:STDOUT: %Iterate.WithSelf.Next.type.3b0: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.b30) [concrete] // CHECK:STDOUT: %.bc1: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.b5a, %Iterate.facet.b30 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.160, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.24f) [concrete] // CHECK:STDOUT: %.698: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.3b0, %Iterate.facet.b30 [concrete] // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.ddf, @T.as_type.as.Iterate.impl.Next(%facet_value.24f) [concrete] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type.235: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%Destroy.facet.c9a) [concrete] // CHECK:STDOUT: %.a38: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type.235, %Destroy.facet.c9a [concrete] // CHECK:STDOUT: %complete_type.95d: = complete_type_witness %tuple.type.de6 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .OverloadADL = %OverloadADL // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.c82: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.3ea) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.f2f)] // CHECK:STDOUT: %Core.import_ref.29e: @Optional.%Optional.Get.type (%Optional.Get.type.786) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.Get (constants.%Optional.Get.2d0)] // CHECK:STDOUT: %Core.import_ref.2e7: type = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%DefaultOptionalStorage (constants.%DefaultOptionalStorage.ade)] // CHECK:STDOUT: %Core.import_ref.ef4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None.type (%T.as_type.as.OptionalStorage.impl.None.type.925) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.None (constants.%T.as_type.as.OptionalStorage.impl.None.f42)] // CHECK:STDOUT: %Core.import_ref.a20: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some.type (%T.as_type.as.OptionalStorage.impl.Some.type.760) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Some (constants.%T.as_type.as.OptionalStorage.impl.Some.268)] // CHECK:STDOUT: %Core.import_ref.af7: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has.type (%T.as_type.as.OptionalStorage.impl.Has.type.d28) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Has (constants.%T.as_type.as.OptionalStorage.impl.Has.f29)] // CHECK:STDOUT: %Core.import_ref.dd4: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.2f2) = 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.884)] // CHECK:STDOUT: %Core.import_ref.554 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.2e7, %Core.import_ref.ef4, %Core.import_ref.a20, %Core.import_ref.af7, %Core.import_ref.dd4, %Core.import_ref.554), @T.as_type.as.OptionalStorage.impl [concrete] // CHECK:STDOUT: %Core.import_ref.373: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.498] // CHECK:STDOUT: %Core.import_ref.e86: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [concrete = %field_decl.390] // CHECK:STDOUT: %Core.import_ref.eef: %facet_type.f48 = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%facet_value (constants.%facet_value.f93)] // CHECK:STDOUT: %Core.import_ref.fcc: %Destroy.type = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%Destroy.facet (constants.%Destroy.facet.9cd)] // CHECK:STDOUT: %Core.import_ref.946: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.8fb) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.8a1)] // CHECK:STDOUT: %Core.import_ref.cfb: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.d4a) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.5a8)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.946, %Core.import_ref.cfb), @T.as_type.as.Iterate.impl [concrete] // CHECK:STDOUT: %OverloadADL: = namespace [concrete] { // CHECK:STDOUT: .ValueType = %ValueType.decl // CHECK:STDOUT: .MutableAndConstRange = %MutableAndConstRange.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %ValueType.decl: type = class_decl @ValueType [concrete = constants.%ValueType] {} {} // 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: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.b0d0 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.390: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.2 (%DefaultOptionalStorage.elem.b49) = field_decl has_value, element1, %Core.import_ref.b0d0 in [concrete] {} // CHECK:STDOUT: %Core.import_ref.ab7 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %field_decl.498: @DefaultOptionalStorage.%DefaultOptionalStorage.elem.1 (%DefaultOptionalStorage.elem.229) = field_decl value, element0, %Core.import_ref.ab7 in [concrete] {} // CHECK:STDOUT: %MutableAndConstRange.decl: type = class_decl @MutableAndConstRange [concrete = constants.%MutableAndConstRange] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generated { // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.1: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.2 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc48_41.1 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.2] { // CHECK:STDOUT: %self.param_patt: %pattern_type.60e = ref_param_pattern [concrete = constants.%self.param_patt.61b3] // CHECK:STDOUT: %self.patt: %pattern_type.60e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.ecc] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.8f3 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.8f3 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.2: %Destroy.WithSelf.Op.type.ef016f.3 = fn_decl @Destroy.WithSelf.Op.loc48_41.1 [concrete = constants.%Destroy.WithSelf.Op.403171.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.60e = ref_param_pattern [concrete = constants.%self.param_patt.61b3] // CHECK:STDOUT: %self.patt: %pattern_type.60e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.ecc] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %.8f3 = ref_param call_param0 // CHECK:STDOUT: %self: ref %.8f3 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.2: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.3 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc48_41.2 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.3] { // CHECK:STDOUT: %self.param_patt: %pattern_type.a8c = ref_param_pattern [concrete = constants.%self.param_patt.6bf] // CHECK:STDOUT: %self.patt: %pattern_type.a8c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3f7] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.e45 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.e45 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.3: %Destroy.WithSelf.Op.type.ef016f.4 = fn_decl @Destroy.WithSelf.Op.loc48_41.2 [concrete = constants.%Destroy.WithSelf.Op.403171.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.a8c = ref_param_pattern [concrete = constants.%self.param_patt.6bf] // CHECK:STDOUT: %self.patt: %pattern_type.a8c = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.3f7] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %MaybeUnformed.e45 = ref_param call_param0 // CHECK:STDOUT: %self: ref %MaybeUnformed.e45 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.3: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.4 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc48_41.3 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.4] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.4: %Destroy.WithSelf.Op.type.ef016f.5 = fn_decl @Destroy.WithSelf.Op.loc48_41.3 [concrete = constants.%Destroy.WithSelf.Op.403171.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.831 = ref_param_pattern [concrete = constants.%self.param_patt.40d] // CHECK:STDOUT: %self.patt: %pattern_type.831 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.560] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref bool = ref_param call_param0 // CHECK:STDOUT: %self: ref bool = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.4: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.5 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc48_41.4 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.5] { // CHECK:STDOUT: %self.param_patt: %pattern_type.14e = ref_param_pattern [concrete = constants.%self.param_patt.2f9] // CHECK:STDOUT: %self.patt: %pattern_type.14e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.204] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.70e = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.70e = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.5: %Destroy.WithSelf.Op.type.ef016f.6 = fn_decl @Destroy.WithSelf.Op.loc48_41.4 [concrete = constants.%Destroy.WithSelf.Op.403171.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.14e = ref_param_pattern [concrete = constants.%self.param_patt.2f9] // CHECK:STDOUT: %self.patt: %pattern_type.14e = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.204] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %struct_type.value.has_value.70e = ref_param call_param0 // CHECK:STDOUT: %self: ref %struct_type.value.has_value.70e = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.5: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.6 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc48_41.5 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.6] { // CHECK:STDOUT: %self.param_patt: %pattern_type.474 = ref_param_pattern [concrete = constants.%self.param_patt.8b7] // CHECK:STDOUT: %self.patt: %pattern_type.474 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.5be] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.8dd = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.8dd = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.6: %Destroy.WithSelf.Op.type.ef016f.7 = fn_decl @Destroy.WithSelf.Op.loc48_41.5 [concrete = constants.%Destroy.WithSelf.Op.403171.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.474 = ref_param_pattern [concrete = constants.%self.param_patt.8b7] // CHECK:STDOUT: %self.patt: %pattern_type.474 = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.5be] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %DefaultOptionalStorage.8dd = ref_param call_param0 // CHECK:STDOUT: %self: ref %DefaultOptionalStorage.8dd = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.decl.763c71.6: %Destroy.WithSelf.SubobjectDestroy.type.dfcbdb.7 = fn_decl @Destroy.WithSelf.SubobjectDestroy.loc48_41.6 [concrete = constants.%Destroy.WithSelf.SubobjectDestroy.d01daf.7] { // CHECK:STDOUT: %self.param_patt: %pattern_type.d0f = ref_param_pattern [concrete = constants.%self.param_patt.8ac] // CHECK:STDOUT: %self.patt: %pattern_type.d0f = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.25e] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.006 = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.006 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: %Destroy.WithSelf.Op.decl.5f94cf.7: %Destroy.WithSelf.Op.type.ef016f.8 = fn_decl @Destroy.WithSelf.Op.loc48_41.6 [concrete = constants.%Destroy.WithSelf.Op.403171.8] { // CHECK:STDOUT: %self.param_patt: %pattern_type.d0f = ref_param_pattern [concrete = constants.%self.param_patt.8ac] // CHECK:STDOUT: %self.patt: %pattern_type.d0f = wrapper_binding_pattern self, %self.param_patt [concrete = constants.%self.patt.25e] // CHECK:STDOUT: } { // CHECK:STDOUT: %self.param: ref %Optional.006 = ref_param call_param0 // CHECK:STDOUT: %self: ref %Optional.006 = wrapper_binding self, %self.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TestIterate(%R.loc44_17.2: %Iterate_where.type.8b0) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc44_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.a99)] // CHECK:STDOUT: %Iterate.facet.loc48_41.5: %Iterate.type = facet_value %R.as_type.loc44_83.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc48_41.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.fb9)] // CHECK:STDOUT: %.loc48_41.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc48_41.5 [symbolic = %.loc48_41.20 (constants.%.54f)] // CHECK:STDOUT: %impl.elem2.loc48_41.3: @TestIterate.%.loc48_41.20 (%.54f) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc48_41.3 (constants.%impl.elem2.ff2)] // CHECK:STDOUT: %specific_impl_fn.loc48_41.4: = specific_impl_function %impl.elem2.loc48_41.3, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc48_41.5) [symbolic = %specific_impl_fn.loc48_41.4 (constants.%specific_impl_fn.541)] // CHECK:STDOUT: // CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc48_41.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.5d8)] // CHECK:STDOUT: %.loc48_41.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc48_41.5 [symbolic = %.loc48_41.21 (constants.%.216)] // CHECK:STDOUT: %impl.elem3.loc48_41.2: @TestIterate.%.loc48_41.21 (%.216) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc48_41.2 (constants.%impl.elem3.5f1)] // CHECK:STDOUT: %specific_impl_fn.loc48_41.5: = specific_impl_function %impl.elem3.loc48_41.2, @Iterate.WithSelf.Next(%Iterate.facet.loc48_41.5) [symbolic = %specific_impl_fn.loc48_41.5 (constants.%specific_impl_fn.eaf)] // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type: type = fn_type @Destroy.WithSelf.SelfDestruct.1, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.SelfDestruct.type (constants.%Destroy.WithSelf.SelfDestruct.type.4ed)] // CHECK:STDOUT: %.loc48_41.22: type = fn_type_with_self_type %Destroy.WithSelf.SelfDestruct.type, %impl.elem1 [symbolic = %.loc48_41.22 (constants.%.97d)] // CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.eb0)] // CHECK:STDOUT: %impl.elem2.loc48_41.4: @TestIterate.%.loc48_41.22 (%.97d) = impl_witness_access %Destroy.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc48_41.4 (constants.%impl.elem2.f7b)] // CHECK:STDOUT: %specific_impl_fn.loc48_41.6: = specific_impl_function %impl.elem2.loc48_41.4, @Destroy.WithSelf.SelfDestruct.1(%impl.elem1) [symbolic = %specific_impl_fn.loc48_41.6 (constants.%specific_impl_fn.577)] // CHECK:STDOUT: // CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc44_83.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.e09 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc44_83.1 (%R.as_type) = name_ref r, %r // CHECK:STDOUT: %impl.elem2.loc48_41.1: @TestIterate.%.loc48_41.20 (%.54f) = impl_witness_access constants.%Iterate.lookup_impl_witness.a99, element2 [symbolic = %impl.elem2.loc48_41.3 (constants.%impl.elem2.ff2)] // CHECK:STDOUT: %bound_method.loc48_41.1: = bound_method %r.ref, %impl.elem2.loc48_41.1 // CHECK:STDOUT: %Iterate.facet.loc48_41.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.a99) [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %.loc48_41.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc48_41.1 [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %Iterate.facet.loc48_41.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.a99) [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %.loc48_41.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc48_41.2 [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %specific_impl_fn.loc48_41.1: = specific_impl_function %impl.elem2.loc48_41.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.c55) [symbolic = %specific_impl_fn.loc48_41.4 (constants.%specific_impl_fn.541)] // CHECK:STDOUT: %bound_method.loc48_41.2: = bound_method %r.ref, %specific_impl_fn.loc48_41.1 // CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.733) = var_storage invalid // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.733) to %var = call %bound_method.loc48_41.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3.loc48_41.1: @TestIterate.%.loc48_41.21 (%.216) = impl_witness_access constants.%Iterate.lookup_impl_witness.a99, element3 [symbolic = %impl.elem3.loc48_41.2 (constants.%impl.elem3.5f1)] // CHECK:STDOUT: %bound_method.loc48_41.3: = bound_method %r.ref, %impl.elem3.loc48_41.1 // CHECK:STDOUT: %Iterate.facet.loc48_41.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.a99) [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %.loc48_41.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc48_41.3 [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %Iterate.facet.loc48_41.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.a99) [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %.loc48_41.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc48_41.4 [symbolic = %Iterate.facet.loc48_41.5 (constants.%Iterate.facet.c55)] // CHECK:STDOUT: %.loc48_41.5: %Destroy.type = converted constants.%as_type.733, constants.%impl.elem1.751 [symbolic = %impl.elem1 (constants.%impl.elem1.751)] // CHECK:STDOUT: %.loc48_41.6: %Destroy.type = converted constants.%as_type.733, constants.%impl.elem1.751 [symbolic = %impl.elem1 (constants.%impl.elem1.751)] // CHECK:STDOUT: %specific_impl_fn.loc48_41.2: = specific_impl_function %impl.elem3.loc48_41.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.c55) [symbolic = %specific_impl_fn.loc48_41.5 (constants.%specific_impl_fn.eaf)] // CHECK:STDOUT: %bound_method.loc48_41.4: = bound_method %r.ref, %specific_impl_fn.loc48_41.2 // CHECK:STDOUT: %.loc48_41.7: ref %Optional.006 = temporary_storage // CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.006 to %.loc48_41.7 = call %bound_method.loc48_41.4(%r.ref, %var) // CHECK:STDOUT: %.loc48_41.8: ref %Optional.006 = temporary %.loc48_41.7, %Iterate.WithSelf.Next.call // CHECK:STDOUT: %.loc48_41.9: %Optional.HasValue.type.06b = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.adc) [concrete = constants.%Optional.HasValue.994] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.06b = name_ref HasValue, %.loc48_41.9 [concrete = constants.%Optional.HasValue.994] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc48_41.8, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.adc) [concrete = constants.%Optional.HasValue.specific_fn.c92] // CHECK:STDOUT: %bound_method.loc48_41.5: = bound_method %.loc48_41.8, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc48_41.10: %Optional.006 = acquire_value %.loc48_41.8 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc48_41.5(%.loc48_41.10) // CHECK:STDOUT: %.loc48_41.11: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc48_41.12: bool = converted %Optional.HasValue.call, %.loc48_41.11 // CHECK:STDOUT: if %.loc48_41.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc48_41.13: %Optional.Get.type.a9b = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.adc) [concrete = constants.%Optional.Get.740] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.a9b = name_ref Get, %.loc48_41.13 [concrete = constants.%Optional.Get.740] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc48_41.8, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.adc) [concrete = constants.%Optional.Get.specific_fn.10e] // CHECK:STDOUT: %bound_method.loc48_41.6: = bound_method %.loc48_41.8, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc48_41.14: ref %ValueType = temporary_storage // CHECK:STDOUT: %.loc48_41.15: %Optional.006 = acquire_value %.loc48_41.8 // CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc48_41.14 = call %bound_method.loc48_41.6(%.loc48_41.15) // CHECK:STDOUT: %.loc48_41.16: ref %ValueType = temporary %.loc48_41.14, %Optional.Get.call // CHECK:STDOUT: %.loc48_41.17: %ValueType = acquire_value %.loc48_41.16 // CHECK:STDOUT: %.loc48_26: type = splice_block %ValueType.ref.loc48 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc48: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %OverloadADL.ref.loc48: = name_ref OverloadADL, imports.%OverloadADL [concrete = imports.%OverloadADL] // CHECK:STDOUT: %ValueType.ref.loc48: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc48_41.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc49_12: ref %ValueType = value_as_ref %i.ref // CHECK:STDOUT: %addr.loc49: %ptr.6ed = addr_of %.loc49_12 // CHECK:STDOUT: %.loc49_9.1: %ptr.403 = as_compatible %addr.loc49 // CHECK:STDOUT: %.loc49_9.2: %ptr.403 = converted %addr.loc49, %.loc49_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc49_9.2) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc48_41.1: = bound_method %.loc48_41.16, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc48_41.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc48_41.1(%.loc48_41.16) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc48_41.2: = bound_method %.loc48_41.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc48_41.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc48_41.2(%.loc48_41.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc48_41.3: = bound_method %.loc48_41.8, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc48_41.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc48_41.3(%.loc48_41.8) // CHECK:STDOUT: %impl.elem2.loc48_41.2: @TestIterate.%.loc48_41.22 (%.97d) = impl_witness_access constants.%Destroy.lookup_impl_witness.eb0, element2 [symbolic = %impl.elem2.loc48_41.4 (constants.%impl.elem2.f7b)] // CHECK:STDOUT: %bound_method.loc48_41.7: = bound_method %var, %impl.elem2.loc48_41.2 // CHECK:STDOUT: %.loc48_41.18: %Destroy.type = converted constants.%as_type.733, constants.%impl.elem1.751 [symbolic = %impl.elem1 (constants.%impl.elem1.751)] // CHECK:STDOUT: %.loc48_41.19: %Destroy.type = converted constants.%as_type.733, constants.%impl.elem1.751 [symbolic = %impl.elem1 (constants.%impl.elem1.751)] // CHECK:STDOUT: %specific_impl_fn.loc48_41.3: = specific_impl_function %impl.elem2.loc48_41.2, @Destroy.WithSelf.SelfDestruct.1(constants.%impl.elem1.751) [symbolic = %specific_impl_fn.loc48_41.6 (constants.%specific_impl_fn.577)] // CHECK:STDOUT: %bound_method.loc48_41.8: = bound_method %var, %specific_impl_fn.loc48_41.3 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc48_41.4: init %empty_tuple.type = call %bound_method.loc48_41.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc48_41.1(%self.param: ref %.8f3) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc48_41.1(%self.param: ref %.8f3) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc48_41.1(%self.param: ref %.8f3) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.2(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.1(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc48_41.2(%self.param: ref %MaybeUnformed.e45) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc48_41.2(%self.param: ref %MaybeUnformed.e45) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc48_41.2(%self.param: ref %MaybeUnformed.e45) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.3(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.2(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc48_41.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc48_41.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc48_41.3(%self.param: ref bool) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.4(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.3(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc48_41.4(%self.param: ref %struct_type.value.has_value.70e) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %.loc48_41.1: ref bool = struct_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc48_41.1: = bound_method %.loc48_41.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc48_41.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc48_41.1(%.loc48_41.1) // CHECK:STDOUT: %.loc48_41.2: ref %MaybeUnformed.e45 = struct_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc48_41.2: = bound_method %.loc48_41.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc48_41.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc48_41.2(%.loc48_41.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc48_41.4(%self.param: ref %struct_type.value.has_value.70e) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc48_41.4(%self.param: ref %struct_type.value.has_value.70e) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.5(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.4(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc48_41.5(%self.param: ref %DefaultOptionalStorage.8dd) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %has_value.ref: %DefaultOptionalStorage.elem.e54 = name_ref has_value, imports.%Core.import_ref.e86 [concrete = imports.%field_decl.390] // CHECK:STDOUT: %.loc48_41.1: ref bool = class_element_access %self.param, element1 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc48_41.1: = bound_method %.loc48_41.1, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.5 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc48_41.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc48_41.1(%.loc48_41.1) // CHECK:STDOUT: %value.ref: %DefaultOptionalStorage.elem.532 = name_ref value, imports.%Core.import_ref.373 [concrete = imports.%field_decl.498] // CHECK:STDOUT: %.loc48_41.2: ref %MaybeUnformed.e45 = class_element_access %self.param, element0 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc48_41.2: = bound_method %.loc48_41.2, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.4 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc48_41.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc48_41.2(%.loc48_41.2) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc48_41.5(%self.param: ref %DefaultOptionalStorage.8dd) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc48_41.5(%self.param: ref %DefaultOptionalStorage.8dd) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.6(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.5(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SubobjectDestroy.loc48_41.6(%self.param: ref %Optional.006) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.Op.loc48_41.6(%self.param: ref %Optional.006) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: fn @Destroy.WithSelf.SelfDestruct.loc48_41.6(%self.param: ref %Optional.006) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.Op.decl.5f94cf.7(%self.param) // CHECK:STDOUT: %Destroy.WithSelf.SubobjectDestroy.call: init %empty_tuple.type = call generated.%Destroy.WithSelf.SubobjectDestroy.decl.763c71.6(%self.param) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @TestRangeFor(%mc.param: ref %MutableAndConstRange) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %i.patt: %pattern_type.e09 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %mc.ref: ref %MutableAndConstRange = name_ref mc, %mc // CHECK:STDOUT: %impl.elem2: %.bc1 = impl_witness_access constants.%Iterate.impl_witness.198, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.160] // CHECK:STDOUT: %bound_method.loc62_42.1: = bound_method %mc.ref, %impl.elem2 // CHECK:STDOUT: %facet_value.loc62_42.1: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.660, constants.%custom_witness.809, constants.%custom_witness.d56, constants.%custom_witness.68a, constants.%custom_witness.edd, constants.%custom_witness.dc3, constants.%custom_witness.1c5, constants.%custom_witness.809) [concrete = constants.%facet_value.24f] // CHECK:STDOUT: %.loc62_42.1: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc62_42.1 [concrete = constants.%facet_value.24f] // CHECK:STDOUT: %facet_value.loc62_42.2: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.660, constants.%custom_witness.809, constants.%custom_witness.d56, constants.%custom_witness.68a, constants.%custom_witness.edd, constants.%custom_witness.dc3, constants.%custom_witness.1c5, constants.%custom_witness.809) [concrete = constants.%facet_value.24f] // CHECK:STDOUT: %.loc62_42.2: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc62_42.2 [concrete = constants.%facet_value.24f] // CHECK:STDOUT: %specific_fn.loc62_42.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.24f) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] // CHECK:STDOUT: %bound_method.loc62_42.2: = bound_method %mc.ref, %specific_fn.loc62_42.1 // CHECK:STDOUT: %var: ref %tuple.type.de6 = var_storage invalid // CHECK:STDOUT: %.loc62_40.1: %MutableAndConstRange = acquire_value %mc.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.de6 to %var = call %bound_method.loc62_42.2(%.loc62_40.1) // CHECK:STDOUT: assign %var, %T.as_type.as.Iterate.impl.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: // CHECK:STDOUT: %impl.elem3: %.698 = impl_witness_access constants.%Iterate.impl_witness.198, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.ddf] // CHECK:STDOUT: %bound_method.loc62_42.3: = bound_method %mc.ref, %impl.elem3 // CHECK:STDOUT: %facet_value.loc62_42.3: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.660, constants.%custom_witness.809, constants.%custom_witness.d56, constants.%custom_witness.68a, constants.%custom_witness.edd, constants.%custom_witness.dc3, constants.%custom_witness.1c5, constants.%custom_witness.809) [concrete = constants.%facet_value.24f] // CHECK:STDOUT: %.loc62_42.3: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc62_42.3 [concrete = constants.%facet_value.24f] // CHECK:STDOUT: %facet_value.loc62_42.4: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.660, constants.%custom_witness.809, constants.%custom_witness.d56, constants.%custom_witness.68a, constants.%custom_witness.edd, constants.%custom_witness.dc3, constants.%custom_witness.1c5, constants.%custom_witness.809) [concrete = constants.%facet_value.24f] // CHECK:STDOUT: %.loc62_42.4: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc62_42.4 [concrete = constants.%facet_value.24f] // CHECK:STDOUT: %specific_fn.loc62_42.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.24f) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] // CHECK:STDOUT: %bound_method.loc62_42.4: = bound_method %mc.ref, %specific_fn.loc62_42.2 // CHECK:STDOUT: %.loc62_42.5: ref %Optional.006 = temporary_storage // CHECK:STDOUT: %.loc62_40.2: %MutableAndConstRange = acquire_value %mc.ref // CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.006 to %.loc62_42.5 = call %bound_method.loc62_42.4(%.loc62_40.2, %var) // CHECK:STDOUT: %.loc62_42.6: ref %Optional.006 = temporary %.loc62_42.5, %T.as_type.as.Iterate.impl.Next.call // CHECK:STDOUT: %.loc62_42.7: %Optional.HasValue.type.06b = specific_constant imports.%Core.import_ref.c82, @Optional(constants.%OptionalStorage.facet.adc) [concrete = constants.%Optional.HasValue.994] // CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.06b = name_ref HasValue, %.loc62_42.7 [concrete = constants.%Optional.HasValue.994] // CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc62_42.6, %HasValue.ref // CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.adc) [concrete = constants.%Optional.HasValue.specific_fn.c92] // CHECK:STDOUT: %bound_method.loc62_42.5: = bound_method %.loc62_42.6, %Optional.HasValue.specific_fn // CHECK:STDOUT: %.loc62_42.8: %Optional.006 = acquire_value %.loc62_42.6 // CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc62_42.5(%.loc62_42.8) // CHECK:STDOUT: %.loc62_42.9: bool = value_of_initializer %Optional.HasValue.call // CHECK:STDOUT: %.loc62_42.10: bool = converted %Optional.HasValue.call, %.loc62_42.9 // CHECK:STDOUT: if %.loc62_42.10 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: // CHECK:STDOUT: %.loc62_42.11: %Optional.Get.type.a9b = specific_constant imports.%Core.import_ref.29e, @Optional(constants.%OptionalStorage.facet.adc) [concrete = constants.%Optional.Get.740] // CHECK:STDOUT: %Get.ref: %Optional.Get.type.a9b = name_ref Get, %.loc62_42.11 [concrete = constants.%Optional.Get.740] // CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc62_42.6, %Get.ref // CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.adc) [concrete = constants.%Optional.Get.specific_fn.10e] // CHECK:STDOUT: %bound_method.loc62_42.6: = bound_method %.loc62_42.6, %Optional.Get.specific_fn // CHECK:STDOUT: %.loc62_42.12: ref %ValueType = temporary_storage // CHECK:STDOUT: %.loc62_42.13: %Optional.006 = acquire_value %.loc62_42.6 // CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc62_42.12 = call %bound_method.loc62_42.6(%.loc62_42.13) // CHECK:STDOUT: %.loc62_42.14: ref %ValueType = temporary %.loc62_42.12, %Optional.Get.call // CHECK:STDOUT: %.loc62_42.15: %ValueType = acquire_value %.loc62_42.14 // CHECK:STDOUT: %.loc62_26: type = splice_block %ValueType.ref.loc62 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc62: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %OverloadADL.ref.loc62: = name_ref OverloadADL, imports.%OverloadADL [concrete = imports.%OverloadADL] // CHECK:STDOUT: %ValueType.ref.loc62: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc62_42.15 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc63_12: ref %ValueType = value_as_ref %i.ref // CHECK:STDOUT: %addr.loc63: %ptr.6ed = addr_of %.loc63_12 // CHECK:STDOUT: %.loc63_9.1: %ptr.403 = as_compatible %addr.loc63 // CHECK:STDOUT: %.loc63_9.2: %ptr.403 = converted %addr.loc63, %.loc63_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc63_9.2) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc62_42.1: = bound_method %.loc62_42.14, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.2 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc62_42.1: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc62_42.1(%.loc62_42.14) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc62_42.2: = bound_method %.loc62_42.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc62_42.2: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc62_42.2(%.loc62_42.6) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc62_42.3: = bound_method %.loc62_42.6, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.8 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc62_42.3: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc62_42.3(%.loc62_42.6) // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.bound.loc62_42.4: = bound_method %var, constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.call.loc62_42.4: init %empty_tuple.type = call %Destroy.WithSelf.SelfDestruct.bound.loc62_42.4(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc44_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc44_17.1 => constants.%R // CHECK:STDOUT: %R.as_type.loc44_83.1 => constants.%R.as_type // CHECK:STDOUT: %pattern_type => constants.%pattern_type.611 // CHECK:STDOUT: %r.param_patt.loc44_81.2 => constants.%r.param_patt.e64 // CHECK:STDOUT: %r.patt.loc44_81.2 => constants.%r.patt.dcb // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%facet_value.fc8) { // CHECK:STDOUT: %R.patt.loc44_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc44_17.1 => constants.%facet_value.fc8 // CHECK:STDOUT: %R.as_type.loc44_83.1 => constants.%MutableAndConstRange // CHECK:STDOUT: %pattern_type => constants.%pattern_type.fdb // CHECK:STDOUT: %r.param_patt.loc44_81.2 => constants.%r.param_patt.3a6 // CHECK:STDOUT: %r.patt.loc44_81.2 => constants.%r.patt.403 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc44 => constants.%complete_type.357 // CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.198 // CHECK:STDOUT: %Iterate.facet.loc48_41.5 => constants.%Iterate.facet.b30 // CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.b5a // CHECK:STDOUT: %.loc48_41.20 => constants.%.bc1 // CHECK:STDOUT: %impl.elem2.loc48_41.3 => constants.%T.as_type.as.Iterate.impl.NewCursor.160 // CHECK:STDOUT: %specific_impl_fn.loc48_41.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn // CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.c9a // CHECK:STDOUT: %as_type => constants.%tuple.type.de6 // CHECK:STDOUT: %require_complete.1 => constants.%complete_type.95d // CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.3b0 // CHECK:STDOUT: %.loc48_41.21 => constants.%.698 // CHECK:STDOUT: %impl.elem3.loc48_41.2 => constants.%T.as_type.as.Iterate.impl.Next.ddf // CHECK:STDOUT: %specific_impl_fn.loc48_41.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn // CHECK:STDOUT: %Destroy.WithSelf.SelfDestruct.type => constants.%Destroy.WithSelf.SelfDestruct.type.235 // CHECK:STDOUT: %.loc48_41.22 => constants.%.a38 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.f8f19d.8 // CHECK:STDOUT: %impl.elem2.loc48_41.4 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: %specific_impl_fn.loc48_41.6 => constants.%Destroy.WithSelf.SelfDestruct.db3fdb.10 // CHECK:STDOUT: } // CHECK:STDOUT: